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