001 package net.minecraft.enchantment;
002
003 import net.minecraft.entity.EntityLiving;
004 import net.minecraft.entity.EnumCreatureAttribute;
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 /**
071 * Return the name of key in translation table of this enchantment.
072 */
073 public String getName()
074 {
075 return "enchantment.damage." + protectionName[this.damageType];
076 }
077
078 /**
079 * Determines if the enchantment passed can be applyied together with this enchantment.
080 */
081 public boolean canApplyTogether(Enchantment par1Enchantment)
082 {
083 return !(par1Enchantment instanceof EnchantmentDamage);
084 }
085 }