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 }