From 9631ef5de68194f0306c1dbe528d2a399fa7df53 Mon Sep 17 00:00:00 2001 From: DemoXin Date: Tue, 19 Nov 2013 21:02:30 -0500 Subject: [PATCH] * BlockUtil.getItemStackFromBlock() now properly posts HarvestDropsEvent and loads its results for compatibility. * BlockUtil.breakBlock() now utilizes BlockUtil.getItemStackFromBlock() to get its drop list. --- common/buildcraft/core/utils/BlockUtil.java | 23 ++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/common/buildcraft/core/utils/BlockUtil.java b/common/buildcraft/core/utils/BlockUtil.java index 3b173e7b..0dde53c8 100644 --- a/common/buildcraft/core/utils/BlockUtil.java +++ b/common/buildcraft/core/utils/BlockUtil.java @@ -10,8 +10,12 @@ package buildcraft.core.utils; import buildcraft.BuildCraftCore; import buildcraft.BuildCraftEnergy; import buildcraft.api.core.BuildCraftAPI; +import buildcraft.core.proxy.CoreProxy; import cpw.mods.fml.common.FMLCommonHandler; + +import java.util.ArrayList; import java.util.List; + import net.minecraft.block.Block; import net.minecraft.block.BlockFluid; import net.minecraft.entity.item.EntityItem; @@ -22,12 +26,14 @@ import net.minecraft.network.packet.Packet60Explosion; import net.minecraft.world.ChunkPosition; import net.minecraft.world.Explosion; import net.minecraft.world.World; +import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidBlock; + public class BlockUtil { public static List getItemStackFromBlock(World world, int i, int j, int k) { @@ -41,7 +47,19 @@ public class BlockUtil { int meta = world.getBlockMetadata(i, j, k); - return block.getBlockDropped(world, i, j, k, meta, 0); + ArrayList dropsList = block.getBlockDropped(world, i, j, k, meta, 0); + float dropChance = ForgeEventFactory.fireBlockHarvesting(dropsList, world, block, i, j, k, meta, 0, 1.0F, false, CoreProxy.proxy.getBuildCraftPlayer(world)); + + ArrayList returnList = new ArrayList(); + for (ItemStack s : dropsList) + { + if (world.rand.nextFloat() <= dropChance) + { + returnList.add(s); + } + } + + return returnList; } public static void breakBlock(World world, int x, int y, int z) { @@ -50,8 +68,7 @@ public class BlockUtil { public static void breakBlock(World world, int x, int y, int z, int forcedLifespan) { if (!world.isAirBlock(x, y, z) && BuildCraftCore.dropBrokenBlocks && !world.isRemote && world.getGameRules().getGameRuleBooleanValue("doTileDrops")) { - int blockId = world.getBlockId(x, y, z); - List items = Block.blocksList[blockId].getBlockDropped(world, x, y, z, world.getBlockMetadata(x, y, z), 0); + List items = getItemStackFromBlock(world, x, y, z); for (ItemStack item : items) { float var = 0.7F;