--- ../src_base/common/net/minecraft/src/BlockLeaves.java +++ ../src_work/common/net/minecraft/src/BlockLeaves.java @@ -2,10 +2,14 @@ import cpw.mods.fml.common.Side; import cpw.mods.fml.common.asm.SideOnly; + +import java.util.ArrayList; import java.util.List; import java.util.Random; -public class BlockLeaves extends BlockLeavesBase +import net.minecraftforge.common.IShearable; + +public class BlockLeaves extends BlockLeavesBase implements IShearable { /** * The base index in terrain.png corresponding to the fancy version of the leaf texture. This is stored so we can @@ -98,10 +102,9 @@ { int var12 = par1World.getBlockId(par2 + var9, par3 + var10, par4 + var11); - if (var12 == Block.leaves.blockID) + if (Block.blocksList[var12] != null) { - int var13 = par1World.getBlockMetadata(par2 + var9, par3 + var10, par4 + var11); - par1World.setBlockMetadata(par2 + var9, par3 + var10, par4 + var11, var13 | 8); + Block.blocksList[var12].beginLeavesDecay(par1World, par2 + var9, par3 + var10, par4 + var11); } } } @@ -147,11 +150,13 @@ { var15 = par1World.getBlockId(par2 + var12, par3 + var13, par4 + var14); - if (var15 == Block.wood.blockID) + Block block = Block.blocksList[var15]; + + if (block != null && block.canSustainLeaves(par1World, par2 + var12, par3 + var13, par4 + var14)) { this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = 0; } - else if (var15 == Block.leaves.blockID) + else if (block != null && block.isLeaves(par1World, par2 + var12, par3 + var13, par4 + var14)) { this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = -2; } @@ -294,15 +299,7 @@ */ public void harvestBlock(World par1World, EntityPlayer par2EntityPlayer, int par3, int par4, int par5, int par6) { - if (!par1World.isRemote && par2EntityPlayer.getCurrentEquippedItem() != null && par2EntityPlayer.getCurrentEquippedItem().itemID == Item.shears.shiftedIndex) - { - par2EntityPlayer.addStat(StatList.mineBlockStatArray[this.blockID], 1); - this.dropBlockAsItem_do(par1World, par3, par4, par5, new ItemStack(Block.leaves.blockID, 1, par6 & 3)); - } - else - { - super.harvestBlock(par1World, par2EntityPlayer, par3, par4, par5, par6); - } + super.harvestBlock(par1World, par2EntityPlayer, par3, par4, par5, par6); } /** @@ -353,4 +350,30 @@ par3List.add(new ItemStack(par1, 1, 2)); par3List.add(new ItemStack(par1, 1, 3)); } + + @Override + public boolean isShearable(ItemStack item, World world, int x, int y, int z) + { + return true; + } + + @Override + public ArrayList onSheared(ItemStack item, World world, int x, int y, int z, int fortune) + { + ArrayList ret = new ArrayList(); + ret.add(new ItemStack(this, 1, world.getBlockMetadata(x, y, z) & 3)); + return ret; + } + + @Override + public void beginLeavesDecay(World world, int x, int y, int z) + { + world.setBlockMetadata(x, y, z, world.getBlockMetadata(x, y, z) | 8); + } + + @Override + public boolean isLeaves(World world, int x, int y, int z) + { + return true; + } }