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