package net.minecraft.item; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.util.List; import java.util.Random; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentData; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.MathHelper; import net.minecraft.util.WeightedRandomChestContent; public class ItemEnchantedBook extends Item { public ItemEnchantedBook(int par1) { super(par1); } @SideOnly(Side.CLIENT) public boolean hasEffect(ItemStack par1ItemStack) { return true; } /** * Checks isDamagable and if it cannot be stacked */ public boolean isItemTool(ItemStack par1ItemStack) { return false; } @SideOnly(Side.CLIENT) /** * Return an item rarity from EnumRarity */ public EnumRarity getRarity(ItemStack par1ItemStack) { return this.func_92110_g(par1ItemStack).tagCount() > 0 ? EnumRarity.uncommon : super.getRarity(par1ItemStack); } public NBTTagList func_92110_g(ItemStack par1ItemStack) { return par1ItemStack.stackTagCompound != null && par1ItemStack.stackTagCompound.hasKey("StoredEnchantments") ? (NBTTagList)par1ItemStack.stackTagCompound.getTag("StoredEnchantments") : new NBTTagList(); } @SideOnly(Side.CLIENT) /** * allows items to add custom lines of information to the mouseover description */ public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) { super.addInformation(par1ItemStack, par2EntityPlayer, par3List, par4); NBTTagList nbttaglist = this.func_92110_g(par1ItemStack); if (nbttaglist != null) { for (int i = 0; i < nbttaglist.tagCount(); ++i) { short short1 = ((NBTTagCompound)nbttaglist.tagAt(i)).getShort("id"); short short2 = ((NBTTagCompound)nbttaglist.tagAt(i)).getShort("lvl"); if (Enchantment.enchantmentsList[short1] != null) { par3List.add(Enchantment.enchantmentsList[short1].getTranslatedName(short2)); } } } } public void func_92115_a(ItemStack par1ItemStack, EnchantmentData par2EnchantmentData) { NBTTagList nbttaglist = this.func_92110_g(par1ItemStack); boolean flag = true; for (int i = 0; i < nbttaglist.tagCount(); ++i) { NBTTagCompound nbttagcompound = (NBTTagCompound)nbttaglist.tagAt(i); if (nbttagcompound.getShort("id") == par2EnchantmentData.enchantmentobj.effectId) { if (nbttagcompound.getShort("lvl") < par2EnchantmentData.enchantmentLevel) { nbttagcompound.setShort("lvl", (short)par2EnchantmentData.enchantmentLevel); } flag = false; break; } } if (flag) { NBTTagCompound nbttagcompound1 = new NBTTagCompound(); nbttagcompound1.setShort("id", (short)par2EnchantmentData.enchantmentobj.effectId); nbttagcompound1.setShort("lvl", (short)par2EnchantmentData.enchantmentLevel); nbttaglist.appendTag(nbttagcompound1); } if (!par1ItemStack.hasTagCompound()) { par1ItemStack.setTagCompound(new NBTTagCompound()); } par1ItemStack.getTagCompound().setTag("StoredEnchantments", nbttaglist); } public ItemStack func_92111_a(EnchantmentData par1EnchantmentData) { ItemStack itemstack = new ItemStack(this); this.func_92115_a(itemstack, par1EnchantmentData); return itemstack; } @SideOnly(Side.CLIENT) public void func_92113_a(Enchantment par1Enchantment, List par2List) { for (int i = par1Enchantment.getMinLevel(); i <= par1Enchantment.getMaxLevel(); ++i) { par2List.add(this.func_92111_a(new EnchantmentData(par1Enchantment, i))); } } public ItemStack func_92109_a(Random par1Random) { Enchantment enchantment = Enchantment.field_92090_c[par1Random.nextInt(Enchantment.field_92090_c.length)]; ItemStack itemstack = new ItemStack(this.itemID, 1, 0); int i = MathHelper.getRandomIntegerInRange(par1Random, enchantment.getMinLevel(), enchantment.getMaxLevel()); this.func_92115_a(itemstack, new EnchantmentData(enchantment, i)); return itemstack; } public WeightedRandomChestContent func_92114_b(Random par1Random) { return this.func_92112_a(par1Random, 1, 1, 1); } public WeightedRandomChestContent func_92112_a(Random par1Random, int par2, int par3, int par4) { Enchantment enchantment = Enchantment.field_92090_c[par1Random.nextInt(Enchantment.field_92090_c.length)]; ItemStack itemstack = new ItemStack(this.itemID, 1, 0); int l = MathHelper.getRandomIntegerInRange(par1Random, enchantment.getMinLevel(), enchantment.getMaxLevel()); this.func_92115_a(itemstack, new EnchantmentData(enchantment, l)); return new WeightedRandomChestContent(itemstack, par2, par3, par4); } }