001    package net.minecraft.enchantment;
002    
003    import net.minecraft.entity.EntityLiving;
004    import net.minecraft.entity.EnumCreatureAttribute;
005    import net.minecraft.item.ItemAxe;
006    import net.minecraft.item.ItemStack;
007    import net.minecraft.util.MathHelper;
008    
009    public class EnchantmentDamage extends Enchantment
010    {
011        /** Holds the name to be translated of each protection type. */
012        private static final String[] protectionName = new String[] {"all", "undead", "arthropods"};
013    
014        /**
015         * Holds the base factor of enchantability needed to be able to use the enchant.
016         */
017        private static final int[] baseEnchantability = new int[] {1, 5, 5};
018    
019        /**
020         * Holds how much each level increased the enchantability factor to be able to use this enchant.
021         */
022        private static final int[] levelEnchantability = new int[] {11, 8, 8};
023    
024        /**
025         * Used on the formula of base enchantability, this is the 'window' factor of values to be able to use thing
026         * enchant.
027         */
028        private static final int[] thresholdEnchantability = new int[] {20, 20, 20};
029    
030        /**
031         * Defines the type of damage of the enchantment, 0 = all, 1 = undead, 3 = arthropods
032         */
033        public final int damageType;
034    
035        public EnchantmentDamage(int par1, int par2, int par3)
036        {
037            super(par1, par2, EnumEnchantmentType.weapon);
038            this.damageType = par3;
039        }
040    
041        /**
042         * Returns the minimal value of enchantability needed on the enchantment level passed.
043         */
044        public int getMinEnchantability(int par1)
045        {
046            return baseEnchantability[this.damageType] + (par1 - 1) * levelEnchantability[this.damageType];
047        }
048    
049        /**
050         * Returns the maximum value of enchantability nedded on the enchantment level passed.
051         */
052        public int getMaxEnchantability(int par1)
053        {
054            return this.getMinEnchantability(par1) + thresholdEnchantability[this.damageType];
055        }
056    
057        /**
058         * Returns the maximum level that the enchantment can have.
059         */
060        public int getMaxLevel()
061        {
062            return 5;
063        }
064    
065        /**
066         * Calculates de (magic) damage done by the enchantment on a living entity based on level and entity passed.
067         */
068        public int calcModifierLiving(int par1, EntityLiving par2EntityLiving)
069        {
070            return this.damageType == 0 ? MathHelper.floor_float((float)par1 * 2.75F) : (this.damageType == 1 && par2EntityLiving.getCreatureAttribute() == EnumCreatureAttribute.UNDEAD ? MathHelper.floor_float((float)par1 * 4.5F) : (this.damageType == 2 && par2EntityLiving.getCreatureAttribute() == EnumCreatureAttribute.ARTHROPOD ? MathHelper.floor_float((float)par1 * 4.5F) : 0));
071        }
072    
073        /**
074         * Return the name of key in translation table of this enchantment.
075         */
076        public String getName()
077        {
078            return "enchantment.damage." + protectionName[this.damageType];
079        }
080    
081        /**
082         * Determines if the enchantment passed can be applyied together with this enchantment.
083         */
084        public boolean canApplyTogether(Enchantment par1Enchantment)
085        {
086            return !(par1Enchantment instanceof EnchantmentDamage);
087        }
088    
089        public boolean func_92037_a(ItemStack par1ItemStack)
090        {
091            return par1ItemStack.getItem() instanceof ItemAxe ? true : super.func_92037_a(par1ItemStack);
092        }
093    }