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    }