001 package net.minecraft.src;
002
003 import cpw.mods.fml.common.Side;
004 import cpw.mods.fml.common.asm.SideOnly;
005
006 public class ItemArmor extends Item
007 {
008 /** Holds the 'base' maxDamage that each armorType have. */
009 private static final int[] maxDamageArray = new int[] {11, 16, 15, 13};
010
011 /**
012 * Stores the armor type: 0 is helmet, 1 is plate, 2 is legs and 3 is boots
013 */
014 public final int armorType;
015
016 /** Holds the amount of damage that the armor reduces at full durability. */
017 public final int damageReduceAmount;
018
019 /**
020 * Used on RenderPlayer to select the correspondent armor to be rendered on the player: 0 is cloth, 1 is chain, 2 is
021 * iron, 3 is diamond and 4 is gold.
022 */
023 public final int renderIndex;
024
025 /** The EnumArmorMaterial used for this ItemArmor */
026 private final EnumArmorMaterial material;
027
028 public ItemArmor(int par1, EnumArmorMaterial par2EnumArmorMaterial, int par3, int par4)
029 {
030 super(par1);
031 this.material = par2EnumArmorMaterial;
032 this.armorType = par4;
033 this.renderIndex = par3;
034 this.damageReduceAmount = par2EnumArmorMaterial.getDamageReductionAmount(par4);
035 this.setMaxDamage(par2EnumArmorMaterial.getDurability(par4));
036 this.maxStackSize = 1;
037 this.setCreativeTab(CreativeTabs.tabCombat);
038 }
039
040 @SideOnly(Side.CLIENT)
041 public int getColorFromItemStack(ItemStack par1ItemStack, int par2)
042 {
043 if (par2 > 0)
044 {
045 return 16777215;
046 }
047 else
048 {
049 int var3 = this.getColor(par1ItemStack);
050
051 if (var3 < 0)
052 {
053 var3 = 16777215;
054 }
055
056 return var3;
057 }
058 }
059
060 @SideOnly(Side.CLIENT)
061 public boolean requiresMultipleRenderPasses()
062 {
063 return this.material == EnumArmorMaterial.CLOTH;
064 }
065
066 /**
067 * Return the enchantability factor of the item, most of the time is based on material.
068 */
069 public int getItemEnchantability()
070 {
071 return this.material.getEnchantability();
072 }
073
074 /**
075 * Return the armor material for this armor item.
076 */
077 public EnumArmorMaterial getArmorMaterial()
078 {
079 return this.material;
080 }
081
082 /**
083 * Return whether the specified armor ItemStack has a color.
084 */
085 public boolean hasColor(ItemStack par1ItemStack)
086 {
087 return this.material != EnumArmorMaterial.CLOTH ? false : (!par1ItemStack.hasTagCompound() ? false : (!par1ItemStack.getTagCompound().hasKey("display") ? false : par1ItemStack.getTagCompound().getCompoundTag("display").hasKey("color")));
088 }
089
090 /**
091 * Return the color for the specified armor ItemStack.
092 */
093 public int getColor(ItemStack par1ItemStack)
094 {
095 if (this.material != EnumArmorMaterial.CLOTH)
096 {
097 return -1;
098 }
099 else
100 {
101 NBTTagCompound var2 = par1ItemStack.getTagCompound();
102
103 if (var2 == null)
104 {
105 return 10511680;
106 }
107 else
108 {
109 NBTTagCompound var3 = var2.getCompoundTag("display");
110 return var3 == null ? 10511680 : (var3.hasKey("color") ? var3.getInteger("color") : 10511680);
111 }
112 }
113 }
114
115 @SideOnly(Side.CLIENT)
116
117 /**
118 * Gets an icon index based on an item's damage value and the given render pass
119 */
120 public int getIconFromDamageForRenderPass(int par1, int par2)
121 {
122 return par2 == 1 ? this.iconIndex + 144 : super.getIconFromDamageForRenderPass(par1, par2);
123 }
124
125 /**
126 * Remove the color from the specified armor ItemStack.
127 */
128 public void removeColor(ItemStack par1ItemStack)
129 {
130 if (this.material == EnumArmorMaterial.CLOTH)
131 {
132 NBTTagCompound var2 = par1ItemStack.getTagCompound();
133
134 if (var2 != null)
135 {
136 NBTTagCompound var3 = var2.getCompoundTag("display");
137
138 if (var3.hasKey("color"))
139 {
140 var3.removeTag("color");
141 }
142 }
143 }
144 }
145
146 public void func_82813_b(ItemStack par1ItemStack, int par2)
147 {
148 if (this.material != EnumArmorMaterial.CLOTH)
149 {
150 throw new UnsupportedOperationException("Can\'t dye non-leather!");
151 }
152 else
153 {
154 NBTTagCompound var3 = par1ItemStack.getTagCompound();
155
156 if (var3 == null)
157 {
158 var3 = new NBTTagCompound();
159 par1ItemStack.setTagCompound(var3);
160 }
161
162 NBTTagCompound var4 = var3.getCompoundTag("display");
163
164 if (!var3.hasKey("display"))
165 {
166 var3.setCompoundTag("display", var4);
167 }
168
169 var4.setInteger("color", par2);
170 }
171 }
172
173 /**
174 * Return whether this item is repairable in an anvil.
175 */
176 public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack)
177 {
178 return this.material.getArmorCraftingMaterial() == par2ItemStack.itemID ? true : super.getIsRepairable(par1ItemStack, par2ItemStack);
179 }
180
181 /**
182 * Returns the 'max damage' factor array for the armor, each piece of armor have a durability factor (that gets
183 * multiplied by armor material factor)
184 */
185 static int[] getMaxDamageArray()
186 {
187 return maxDamageArray;
188 }
189 }