001 package net.minecraft.item; 002 003 import cpw.mods.fml.relauncher.Side; 004 import cpw.mods.fml.relauncher.SideOnly; 005 import java.util.List; 006 import java.util.Random; 007 import net.minecraft.enchantment.Enchantment; 008 import net.minecraft.enchantment.EnchantmentData; 009 import net.minecraft.entity.player.EntityPlayer; 010 import net.minecraft.nbt.NBTTagCompound; 011 import net.minecraft.nbt.NBTTagList; 012 import net.minecraft.util.MathHelper; 013 import net.minecraft.util.WeightedRandomChestContent; 014 015 public class ItemEnchantedBook extends Item 016 { 017 public ItemEnchantedBook(int par1) 018 { 019 super(par1); 020 } 021 022 @SideOnly(Side.CLIENT) 023 public boolean hasEffect(ItemStack par1ItemStack) 024 { 025 return true; 026 } 027 028 /** 029 * Checks isDamagable and if it cannot be stacked 030 */ 031 public boolean isItemTool(ItemStack par1ItemStack) 032 { 033 return false; 034 } 035 036 @SideOnly(Side.CLIENT) 037 038 /** 039 * Return an item rarity from EnumRarity 040 */ 041 public EnumRarity getRarity(ItemStack par1ItemStack) 042 { 043 return this.func_92056_g(par1ItemStack).tagCount() > 0 ? EnumRarity.uncommon : super.getRarity(par1ItemStack); 044 } 045 046 public NBTTagList func_92056_g(ItemStack par1ItemStack) 047 { 048 return par1ItemStack.stackTagCompound != null && par1ItemStack.stackTagCompound.hasKey("StoredEnchantments") ? (NBTTagList)par1ItemStack.stackTagCompound.getTag("StoredEnchantments") : new NBTTagList(); 049 } 050 051 @SideOnly(Side.CLIENT) 052 053 /** 054 * allows items to add custom lines of information to the mouseover description 055 */ 056 public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) 057 { 058 super.addInformation(par1ItemStack, par2EntityPlayer, par3List, par4); 059 NBTTagList var5 = this.func_92056_g(par1ItemStack); 060 061 if (var5 != null) 062 { 063 for (int var6 = 0; var6 < var5.tagCount(); ++var6) 064 { 065 short var7 = ((NBTTagCompound)var5.tagAt(var6)).getShort("id"); 066 short var8 = ((NBTTagCompound)var5.tagAt(var6)).getShort("lvl"); 067 068 if (Enchantment.enchantmentsList[var7] != null) 069 { 070 par3List.add(Enchantment.enchantmentsList[var7].getTranslatedName(var8)); 071 } 072 } 073 } 074 } 075 076 public void func_92060_a(ItemStack par1ItemStack, EnchantmentData par2EnchantmentData) 077 { 078 NBTTagList var3 = this.func_92056_g(par1ItemStack); 079 boolean var4 = true; 080 081 for (int var5 = 0; var5 < var3.tagCount(); ++var5) 082 { 083 NBTTagCompound var6 = (NBTTagCompound)var3.tagAt(var5); 084 085 if (var6.getShort("id") == par2EnchantmentData.enchantmentobj.effectId) 086 { 087 if (var6.getShort("lvl") < par2EnchantmentData.enchantmentLevel) 088 { 089 var6.setShort("lvl", (short)par2EnchantmentData.enchantmentLevel); 090 } 091 092 var4 = false; 093 break; 094 } 095 } 096 097 if (var4) 098 { 099 NBTTagCompound var7 = new NBTTagCompound(); 100 var7.setShort("id", (short)par2EnchantmentData.enchantmentobj.effectId); 101 var7.setShort("lvl", (short)par2EnchantmentData.enchantmentLevel); 102 var3.appendTag(var7); 103 } 104 105 if (!par1ItemStack.hasTagCompound()) 106 { 107 par1ItemStack.setTagCompound(new NBTTagCompound()); 108 } 109 110 par1ItemStack.getTagCompound().setTag("StoredEnchantments", var3); 111 } 112 113 public ItemStack func_92057_a(EnchantmentData par1EnchantmentData) 114 { 115 ItemStack var2 = new ItemStack(this); 116 this.func_92060_a(var2, par1EnchantmentData); 117 return var2; 118 } 119 120 @SideOnly(Side.CLIENT) 121 public void func_92113_a(Enchantment par1Enchantment, List par2List) 122 { 123 for (int var3 = par1Enchantment.getMinLevel(); var3 <= par1Enchantment.getMaxLevel(); ++var3) 124 { 125 par2List.add(this.func_92057_a(new EnchantmentData(par1Enchantment, var3))); 126 } 127 } 128 129 public ItemStack func_92055_a(Random par1Random) 130 { 131 Enchantment var2 = Enchantment.field_92038_c[par1Random.nextInt(Enchantment.field_92038_c.length)]; 132 ItemStack var3 = new ItemStack(this.itemID, 1, 0); 133 int var4 = MathHelper.getRandomIntegerInRange(par1Random, var2.getMinLevel(), var2.getMaxLevel()); 134 this.func_92060_a(var3, new EnchantmentData(var2, var4)); 135 return var3; 136 } 137 138 public WeightedRandomChestContent func_92059_b(Random par1Random) 139 { 140 return this.func_92058_a(par1Random, 1, 1, 1); 141 } 142 143 public WeightedRandomChestContent func_92058_a(Random par1, int par2, int par3, int par4) 144 { 145 Enchantment var5 = Enchantment.field_92038_c[par1.nextInt(Enchantment.field_92038_c.length)]; 146 ItemStack var6 = new ItemStack(this.itemID, 1, 0); 147 int var7 = MathHelper.getRandomIntegerInRange(par1, var5.getMinLevel(), var5.getMaxLevel()); 148 this.func_92060_a(var6, new EnchantmentData(var5, var7)); 149 return new WeightedRandomChestContent(var6, par2, par3, par4); 150 } 151 }