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 public int func_82803_g() 022 { 023 return this.toolMaterial.getDamageVsEntity(); 024 } 025 026 /** 027 * Returns the strength of the stack against a given block. 1.0F base, (Quality+1)*2 if correct blocktype, 1.5F if 028 * sword 029 */ 030 public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block) 031 { 032 if (par2Block.blockID == Block.web.blockID) 033 { 034 return 15.0F; 035 } 036 else 037 { 038 Material var3 = par2Block.blockMaterial; 039 return var3 != Material.plants && var3 != Material.vine && var3 != Material.field_76261_t && var3 != Material.leaves && var3 != Material.pumpkin ? 1.0F : 1.5F; 040 } 041 } 042 043 /** 044 * Current implementations of this method in child classes do not use the entry argument beside ev. They just raise 045 * the damage on the stack. 046 */ 047 public boolean hitEntity(ItemStack par1ItemStack, EntityLiving par2EntityLiving, EntityLiving par3EntityLiving) 048 { 049 par1ItemStack.damageItem(1, par3EntityLiving); 050 return true; 051 } 052 053 public boolean onBlockDestroyed(ItemStack par1ItemStack, World par2World, int par3, int par4, int par5, int par6, EntityLiving par7EntityLiving) 054 { 055 if ((double)Block.blocksList[par3].getBlockHardness(par2World, par4, par5, par6) != 0.0D) 056 { 057 par1ItemStack.damageItem(2, par7EntityLiving); 058 } 059 060 return true; 061 } 062 063 /** 064 * Returns the damage against a given entity. 065 */ 066 public int getDamageVsEntity(Entity par1Entity) 067 { 068 return this.weaponDamage; 069 } 070 071 @SideOnly(Side.CLIENT) 072 073 /** 074 * Returns True is the item is renderer in full 3D when hold. 075 */ 076 public boolean isFull3D() 077 { 078 return true; 079 } 080 081 /** 082 * returns the action that specifies what animation to play when the items is being used 083 */ 084 public EnumAction getItemUseAction(ItemStack par1ItemStack) 085 { 086 return EnumAction.block; 087 } 088 089 /** 090 * How long it takes to use or consume an item 091 */ 092 public int getMaxItemUseDuration(ItemStack par1ItemStack) 093 { 094 return 72000; 095 } 096 097 /** 098 * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer 099 */ 100 public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) 101 { 102 par3EntityPlayer.setItemInUse(par1ItemStack, this.getMaxItemUseDuration(par1ItemStack)); 103 return par1ItemStack; 104 } 105 106 /** 107 * Returns if the item (tool) can harvest results from the block type. 108 */ 109 public boolean canHarvestBlock(Block par1Block) 110 { 111 return par1Block.blockID == Block.web.blockID; 112 } 113 114 /** 115 * Return the enchantability factor of the item, most of the time is based on material. 116 */ 117 public int getItemEnchantability() 118 { 119 return this.toolMaterial.getEnchantability(); 120 } 121 122 public String func_77825_f() 123 { 124 return this.toolMaterial.toString(); 125 } 126 127 /** 128 * Return whether this item is repairable in an anvil. 129 */ 130 public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) 131 { 132 return this.toolMaterial.getToolCraftingMaterial() == par2ItemStack.itemID ? true : super.getIsRepairable(par1ItemStack, par2ItemStack); 133 } 134 }