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 }