001 package net.minecraft.src;
002
003 import java.util.ArrayList;
004
005 import net.minecraftforge.common.IShearable;
006
007 public class ItemShears extends Item
008 {
009 public ItemShears(int par1)
010 {
011 super(par1);
012 this.setMaxStackSize(1);
013 this.setMaxDamage(238);
014 this.setCreativeTab(CreativeTabs.tabTools);
015 }
016
017 public boolean onBlockDestroyed(ItemStack par1ItemStack, World par2World, int par3, int par4, int par5, int par6, EntityLiving par7EntityLiving)
018 {
019 if (par3 != Block.leaves.blockID && par3 != Block.web.blockID && par3 != Block.tallGrass.blockID && par3 != Block.vine.blockID && par3 != Block.tripWire.blockID && !(Block.blocksList[par3] instanceof IShearable))
020 {
021 return super.onBlockDestroyed(par1ItemStack, par2World, par3, par4, par5, par6, par7EntityLiving);
022 }
023 else
024 {
025 return true;
026 }
027 }
028
029 /**
030 * Returns if the item (tool) can harvest results from the block type.
031 */
032 public boolean canHarvestBlock(Block par1Block)
033 {
034 return par1Block.blockID == Block.web.blockID;
035 }
036
037 /**
038 * Returns the strength of the stack against a given block. 1.0F base, (Quality+1)*2 if correct blocktype, 1.5F if
039 * sword
040 */
041 public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block)
042 {
043 return par2Block.blockID != Block.web.blockID && par2Block.blockID != Block.leaves.blockID ? (par2Block.blockID == Block.cloth.blockID ? 5.0F : super.getStrVsBlock(par1ItemStack, par2Block)) : 15.0F;
044 }
045
046 @Override
047 public boolean itemInteractionForEntity(ItemStack itemstack, EntityLiving entity)
048 {
049 if (entity.worldObj.isRemote)
050 {
051 return false;
052 }
053 if (entity instanceof IShearable)
054 {
055 IShearable target = (IShearable)entity;
056 if (target.isShearable(itemstack, entity.worldObj, (int)entity.posX, (int)entity.posY, (int)entity.posZ))
057 {
058 ArrayList<ItemStack> drops = target.onSheared(itemstack, entity.worldObj, (int)entity.posX, (int)entity.posY, (int)entity.posZ,
059 EnchantmentHelper.getEnchantmentLevel(Enchantment.fortune.effectId, itemstack));
060 for(ItemStack stack : drops)
061 {
062 EntityItem ent = entity.entityDropItem(stack, 1.0F);
063 ent.motionY += entity.rand.nextFloat() * 0.05F;
064 ent.motionX += (entity.rand.nextFloat() - entity.rand.nextFloat()) * 0.1F;
065 ent.motionZ += (entity.rand.nextFloat() - entity.rand.nextFloat()) * 0.1F;
066 }
067 itemstack.damageItem(1, entity);
068 }
069 return true;
070 }
071 return false;
072 }
073
074 @Override
075 public boolean onBlockStartBreak(ItemStack itemstack, int x, int y, int z, EntityPlayer player)
076 {
077 if (player.worldObj.isRemote)
078 {
079 return false;
080 }
081 int id = player.worldObj.getBlockId(x, y, z);
082 if (Block.blocksList[id] instanceof IShearable)
083 {
084 IShearable target = (IShearable)Block.blocksList[id];
085 if (target.isShearable(itemstack, player.worldObj, x, y, z))
086 {
087 ArrayList<ItemStack> drops = target.onSheared(itemstack, player.worldObj, x, y, z,
088 EnchantmentHelper.getEnchantmentLevel(Enchantment.fortune.effectId, itemstack));
089 for(ItemStack stack : drops)
090 {
091 float f = 0.7F;
092 double d = (double)(player.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
093 double d1 = (double)(player.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
094 double d2 = (double)(player.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
095 EntityItem entityitem = new EntityItem(player.worldObj, (double)x + d, (double)y + d1, (double)z + d2, stack);
096 entityitem.delayBeforeCanPickup = 10;
097 player.worldObj.spawnEntityInWorld(entityitem);
098 }
099 itemstack.damageItem(1, player);
100 player.addStat(StatList.mineBlockStatArray[id], 1);
101 }
102 }
103 return false;
104 }
105 }