    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 func_82790_a(ItemStack par1ItemStack, int par2)
    042        {
    043            if (par2 > 0)
    044            {
    045                return 16777215;
    046            }
    047            else
    048            {
    049                int var3 = this.func_82814_b(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        public EnumArmorMaterial func_82812_d()
    075        {
    076            return this.material;
    077        }
    078
    079        public boolean func_82816_b_(ItemStack par1ItemStack)
    080        {
    081            return this.material != EnumArmorMaterial.CLOTH ? false : (!par1ItemStack.hasTagCompound() ? false : (!par1ItemStack.getTagCompound().hasKey("display") ? false : par1ItemStack.getTagCompound().getCompoundTag("display").hasKey("color")));
    082        }
    083
    084        public int func_82814_b(ItemStack par1ItemStack)
    085        {
    086            if (this.material != EnumArmorMaterial.CLOTH)
    087            {
    088                return -1;
    089            }
    090            else
    091            {
    092                NBTTagCompound var2 = par1ItemStack.getTagCompound();
    093
    094                if (var2 == null)
    095                {
    096                    return 10511680;
    097                }
    098                else
    099                {
    100                    NBTTagCompound var3 = var2.getCompoundTag("display");
    101                    return var3 == null ? 10511680 : (var3.hasKey("color") ? var3.getInteger("color") : 10511680);
    102                }
    103            }
    104        }
    105
    106        @SideOnly(Side.CLIENT)
    107
    108        /**
    109         * Gets an icon index based on an item's damage value and the given render pass
    110         */
    111        public int getIconFromDamageForRenderPass(int par1, int par2)
    112        {
    113            return par2 == 1 ? this.iconIndex + 144 : super.getIconFromDamageForRenderPass(par1, par2);
    114        }
    115
    116        public void func_82815_c(ItemStack par1ItemStack)
    117        {
    118            if (this.material == EnumArmorMaterial.CLOTH)
    119            {
    120                NBTTagCompound var2 = par1ItemStack.getTagCompound();
    121
    122                if (var2 != null)
    123                {
    124                    NBTTagCompound var3 = var2.getCompoundTag("display");
    125
    126                    if (var3.hasKey("color"))
    127                    {
    128                        var3.func_82580_o("color");
    129                    }
    130                }
    131            }
    132        }
    133
    134        public void func_82813_b(ItemStack par1ItemStack, int par2)
    135        {
    136            if (this.material != EnumArmorMaterial.CLOTH)
    137            {
    138                throw new UnsupportedOperationException("Can\'t dye non-leather!");
    139            }
    140            else
    141            {
    142                NBTTagCompound var3 = par1ItemStack.getTagCompound();
    143
    144                if (var3 == null)
    145                {
    146                    var3 = new NBTTagCompound();
    147                    par1ItemStack.setTagCompound(var3);
    148                }
    149
    150                NBTTagCompound var4 = var3.getCompoundTag("display");
    151
    152                if (!var3.hasKey("display"))
    153                {
    154                    var3.setCompoundTag("display", var4);
    155                }
    156
    157                var4.setInteger("color", par2);
    158            }
    159        }
    160
    161        public boolean func_82789_a(ItemStack par1ItemStack, ItemStack par2ItemStack)
    162        {
    163            return this.material.func_82845_b() == par2ItemStack.itemID ? true : super.func_82789_a(par1ItemStack, par2ItemStack);
    164        }
    165
    166        /**
    167         * Returns the 'max damage' factor array for the armor, each piece of armor have a durability factor (that gets
    168         * multiplied by armor material factor)
    169         */
    170        static int[] getMaxDamageArray()
    171        {
    172            return maxDamageArray;
    173        }
    174    }