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 }