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 }