package net.minecraft.item; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.BlockDispenser; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.dispenser.IBehaviorDispenseItem; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Icon; import net.minecraft.world.World; public class ItemArmor extends Item { /** Holds the 'base' maxDamage that each armorType have. */ private static final int[] maxDamageArray = new int[] {11, 16, 15, 13}; private static final String[] field_94606_cu = new String[] {"helmetCloth_overlay", "chestplateCloth_overlay", "leggingsCloth_overlay", "bootsCloth_overlay"}; public static final String[] field_94603_a = new String[] {"slot_empty_helmet", "slot_empty_chestplate", "slot_empty_leggings", "slot_empty_boots"}; private static final IBehaviorDispenseItem field_96605_cw = new BehaviorDispenseArmor(); /** * Stores the armor type: 0 is helmet, 1 is plate, 2 is legs and 3 is boots */ public final int armorType; /** Holds the amount of damage that the armor reduces at full durability. */ public final int damageReduceAmount; /** * Used on RenderPlayer to select the correspondent armor to be rendered on the player: 0 is cloth, 1 is chain, 2 is * iron, 3 is diamond and 4 is gold. */ public final int renderIndex; /** The EnumArmorMaterial used for this ItemArmor */ private final EnumArmorMaterial material; @SideOnly(Side.CLIENT) private Icon field_94605_cw; @SideOnly(Side.CLIENT) private Icon field_94604_cx; public ItemArmor(int par1, EnumArmorMaterial par2EnumArmorMaterial, int par3, int par4) { super(par1); this.material = par2EnumArmorMaterial; this.armorType = par4; this.renderIndex = par3; this.damageReduceAmount = par2EnumArmorMaterial.getDamageReductionAmount(par4); this.setMaxDamage(par2EnumArmorMaterial.getDurability(par4)); this.maxStackSize = 1; this.setCreativeTab(CreativeTabs.tabCombat); BlockDispenser.dispenseBehaviorRegistry.putObject(this, field_96605_cw); } @SideOnly(Side.CLIENT) public int getColorFromItemStack(ItemStack par1ItemStack, int par2) { if (par2 > 0) { return 16777215; } else { int j = this.getColor(par1ItemStack); if (j < 0) { j = 16777215; } return j; } } @SideOnly(Side.CLIENT) public boolean requiresMultipleRenderPasses() { return this.material == EnumArmorMaterial.CLOTH; } /** * Return the enchantability factor of the item, most of the time is based on material. */ public int getItemEnchantability() { return this.material.getEnchantability(); } /** * Return the armor material for this armor item. */ public EnumArmorMaterial getArmorMaterial() { return this.material; } /** * Return whether the specified armor ItemStack has a color. */ public boolean hasColor(ItemStack par1ItemStack) { return this.material != EnumArmorMaterial.CLOTH ? false : (!par1ItemStack.hasTagCompound() ? false : (!par1ItemStack.getTagCompound().hasKey("display") ? false : par1ItemStack.getTagCompound().getCompoundTag("display").hasKey("color"))); } /** * Return the color for the specified armor ItemStack. */ public int getColor(ItemStack par1ItemStack) { if (this.material != EnumArmorMaterial.CLOTH) { return -1; } else { NBTTagCompound nbttagcompound = par1ItemStack.getTagCompound(); if (nbttagcompound == null) { return 10511680; } else { NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("display"); return nbttagcompound1 == null ? 10511680 : (nbttagcompound1.hasKey("color") ? nbttagcompound1.getInteger("color") : 10511680); } } } @SideOnly(Side.CLIENT) /** * Gets an icon index based on an item's damage value and the given render pass */ public Icon getIconFromDamageForRenderPass(int par1, int par2) { return par2 == 1 ? this.field_94605_cw : super.getIconFromDamageForRenderPass(par1, par2); } /** * Remove the color from the specified armor ItemStack. */ public void removeColor(ItemStack par1ItemStack) { if (this.material == EnumArmorMaterial.CLOTH) { NBTTagCompound nbttagcompound = par1ItemStack.getTagCompound(); if (nbttagcompound != null) { NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("display"); if (nbttagcompound1.hasKey("color")) { nbttagcompound1.removeTag("color"); } } } } public void func_82813_b(ItemStack par1ItemStack, int par2) { if (this.material != EnumArmorMaterial.CLOTH) { throw new UnsupportedOperationException("Can\'t dye non-leather!"); } else { NBTTagCompound nbttagcompound = par1ItemStack.getTagCompound(); if (nbttagcompound == null) { nbttagcompound = new NBTTagCompound(); par1ItemStack.setTagCompound(nbttagcompound); } NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("display"); if (!nbttagcompound.hasKey("display")) { nbttagcompound.setCompoundTag("display", nbttagcompound1); } nbttagcompound1.setInteger("color", par2); } } /** * Return whether this item is repairable in an anvil. */ public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) { return this.material.getArmorCraftingMaterial() == par2ItemStack.itemID ? true : super.getIsRepairable(par1ItemStack, par2ItemStack); } @SideOnly(Side.CLIENT) public void registerIcons(IconRegister par1IconRegister) { super.registerIcons(par1IconRegister); if (this.material == EnumArmorMaterial.CLOTH) { this.field_94605_cw = par1IconRegister.registerIcon(field_94606_cu[this.armorType]); } this.field_94604_cx = par1IconRegister.registerIcon(field_94603_a[this.armorType]); } /** * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer */ public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) { int i = EntityLiving.getArmorPosition(par1ItemStack) - 1; ItemStack itemstack1 = par3EntityPlayer.getCurrentArmor(i); if (itemstack1 == null) { par3EntityPlayer.setCurrentItemOrArmor(i + 1, par1ItemStack.copy()); //Forge: Vanilla bug fix associated with fixed setCurrentItemOrArmor indexs for players. par1ItemStack.stackSize = 0; } return par1ItemStack; } @SideOnly(Side.CLIENT) public static Icon func_94602_b(int par0) { switch (par0) { case 0: return Item.helmetDiamond.field_94604_cx; case 1: return Item.plateDiamond.field_94604_cx; case 2: return Item.legsDiamond.field_94604_cx; case 3: return Item.bootsDiamond.field_94604_cx; default: return null; } } /** * Returns the 'max damage' factor array for the armor, each piece of armor have a durability factor (that gets * multiplied by armor material factor) */ static int[] getMaxDamageArray() { return maxDamageArray; } }