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