    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    }