minecraft-source/src/net/minecraft/world/item/EnchantedBookItem.java

98 lines
3.5 KiB
Java

package net.minecraft.world.item;
import java.util.AbstractList;
import java.util.Iterator;
import net.minecraft.world.item.enchantment.Enchantment;
import net.minecraft.core.NonNullList;
import net.minecraft.world.level.ItemLike;
import net.minecraft.nbt.Tag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.core.Registry;
import net.minecraft.world.item.enchantment.EnchantmentInstance;
import net.minecraft.network.chat.Component;
import java.util.List;
import javax.annotation.Nullable;
import net.minecraft.world.level.Level;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
public class EnchantedBookItem extends Item {
public EnchantedBookItem(final Properties a) {
super(a);
}
@Override
public boolean isFoil(final ItemStack bek) {
return true;
}
@Override
public boolean isEnchantable(final ItemStack bek) {
return false;
}
public static ListTag getEnchantments(final ItemStack bek) {
final CompoundTag jt2 = bek.getTag();
if (jt2 != null) {
return jt2.getList("StoredEnchantments", 10);
}
return new ListTag();
}
@Override
public void appendHoverText(final ItemStack bek, @Nullable final Level bjt, final List<Component> list, final TooltipFlag bft) {
super.appendHoverText(bek, bjt, list, bft);
ItemStack.appendEnchantmentNames(list, getEnchantments(bek));
}
public static void addEnchantment(final ItemStack bek, final EnchantmentInstance bhx) {
final ListTag jz3 = getEnchantments(bek);
boolean boolean4 = true;
final ResourceLocation sm5 = Registry.ENCHANTMENT.getKey(bhx.enchantment);
for (int integer6 = 0; integer6 < jz3.size(); ++integer6) {
final CompoundTag jt7 = jz3.getCompound(integer6);
final ResourceLocation sm6 = ResourceLocation.tryParse(jt7.getString("id"));
if (sm6 != null && sm6.equals(sm5)) {
if (jt7.getInt("lvl") < bhx.level) {
jt7.putShort("lvl", (short)bhx.level);
}
boolean4 = false;
break;
}
}
if (boolean4) {
final CompoundTag jt8 = new CompoundTag();
jt8.putString("id", String.valueOf(sm5));
jt8.putShort("lvl", (short)bhx.level);
((AbstractList<CompoundTag>)jz3).add(jt8);
}
bek.getOrCreateTag().put("StoredEnchantments", jz3);
}
public static ItemStack createForEnchantment(final EnchantmentInstance bhx) {
final ItemStack bek2 = new ItemStack(Items.ENCHANTED_BOOK);
addEnchantment(bek2, bhx);
return bek2;
}
@Override
public void fillItemCategory(final CreativeModeTab bda, final NonNullList<ItemStack> fy) {
if (bda == CreativeModeTab.TAB_SEARCH) {
for (final Enchantment bhu5 : Registry.ENCHANTMENT) {
if (bhu5.category != null) {
for (int integer6 = bhu5.getMinLevel(); integer6 <= bhu5.getMaxLevel(); ++integer6) {
fy.add(createForEnchantment(new EnchantmentInstance(bhu5, integer6)));
}
}
}
}
else if (bda.getEnchantmentCategories().length != 0) {
for (final Enchantment bhu5 : Registry.ENCHANTMENT) {
if (bda.hasEnchantmentCategory(bhu5.category)) {
fy.add(createForEnchantment(new EnchantmentInstance(bhu5, bhu5.getMaxLevel())));
}
}
}
}
}