98 lines
3.5 KiB
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())));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|