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 ItemSword extends Item
007 {
008 private int weaponDamage;
009 private final EnumToolMaterial toolMaterial;
010
011 public ItemSword(int par1, EnumToolMaterial par2EnumToolMaterial)
012 {
013 super(par1);
014 this.toolMaterial = par2EnumToolMaterial;
015 this.maxStackSize = 1;
016 this.setMaxDamage(par2EnumToolMaterial.getMaxUses());
017 this.setCreativeTab(CreativeTabs.tabCombat);
018 this.weaponDamage = 4 + par2EnumToolMaterial.getDamageVsEntity();
019 }
020
021 /**
022 * Returns the strength of the stack against a given block. 1.0F base, (Quality+1)*2 if correct blocktype, 1.5F if
023 * sword
024 */
025 public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block)
026 {
027 return par2Block.blockID == Block.web.blockID ? 15.0F : 1.5F;
028 }
029
030 /**
031 * Current implementations of this method in child classes do not use the entry argument beside ev. They just raise
032 * the damage on the stack.
033 */
034 public boolean hitEntity(ItemStack par1ItemStack, EntityLiving par2EntityLiving, EntityLiving par3EntityLiving)
035 {
036 par1ItemStack.damageItem(1, par3EntityLiving);
037 return true;
038 }
039
040 public boolean onBlockDestroyed(ItemStack par1ItemStack, World par2World, int par3, int par4, int par5, int par6, EntityLiving par7EntityLiving)
041 {
042 if ((double)Block.blocksList[par3].getBlockHardness(par2World, par4, par5, par6) != 0.0D)
043 {
044 par1ItemStack.damageItem(2, par7EntityLiving);
045 }
046
047 return true;
048 }
049
050 /**
051 * Returns the damage against a given entity.
052 */
053 public int getDamageVsEntity(Entity par1Entity)
054 {
055 return this.weaponDamage;
056 }
057
058 @SideOnly(Side.CLIENT)
059
060 /**
061 * Returns True is the item is renderer in full 3D when hold.
062 */
063 public boolean isFull3D()
064 {
065 return true;
066 }
067
068 /**
069 * returns the action that specifies what animation to play when the items is being used
070 */
071 public EnumAction getItemUseAction(ItemStack par1ItemStack)
072 {
073 return EnumAction.block;
074 }
075
076 /**
077 * How long it takes to use or consume an item
078 */
079 public int getMaxItemUseDuration(ItemStack par1ItemStack)
080 {
081 return 72000;
082 }
083
084 /**
085 * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer
086 */
087 public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
088 {
089 par3EntityPlayer.setItemInUse(par1ItemStack, this.getMaxItemUseDuration(par1ItemStack));
090 return par1ItemStack;
091 }
092
093 /**
094 * Returns if the item (tool) can harvest results from the block type.
095 */
096 public boolean canHarvestBlock(Block par1Block)
097 {
098 return par1Block.blockID == Block.web.blockID;
099 }
100
101 /**
102 * Return the enchantability factor of the item, most of the time is based on material.
103 */
104 public int getItemEnchantability()
105 {
106 return this.toolMaterial.getEnchantability();
107 }
108
109 public String func_77825_f()
110 {
111 return this.toolMaterial.toString();
112 }
113 }