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