From e5e7710f924f15b74ddd07d4f81740f454bd8fa5 Mon Sep 17 00:00:00 2001 From: EternalQ Date: Tue, 3 Mar 2026 16:56:00 +0300 Subject: [PATCH] fix: remove unneccesary event on break --- .../tileentity/TileEntityBlockBreaker.java | 36 ++++++++++++------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/src/main/java/openblocks/common/tileentity/TileEntityBlockBreaker.java b/src/main/java/openblocks/common/tileentity/TileEntityBlockBreaker.java index 28c728d37..fce22849e 100644 --- a/src/main/java/openblocks/common/tileentity/TileEntityBlockBreaker.java +++ b/src/main/java/openblocks/common/tileentity/TileEntityBlockBreaker.java @@ -1,9 +1,9 @@ package openblocks.common.tileentity; +import java.util.ArrayList; import java.util.List; import net.minecraft.block.Block; -import net.minecraft.entity.item.EntityItem; import net.minecraft.init.Blocks; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; @@ -15,8 +15,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import openmods.api.INeighbourAwareTile; -import openmods.fakeplayer.BreakBlockAction; -import openmods.fakeplayer.FakePlayerPool; import openmods.include.IncludeInterface; import openmods.inventory.GenericInventory; import openmods.inventory.legacy.ItemDistribution; @@ -125,21 +123,33 @@ public void breakBlock() { final Block block = worldObj.getBlock(x, y, z); if (!canBreakBlock(block, x, y, z)) return; - final List drops = FakePlayerPool.instance - .executeOnPlayer((WorldServer) worldObj, new BreakBlockAction(worldObj, x, y, z)); - tryInjectItems(drops, direction.getOpposite()); + final List drops = getBlockDrops(x, y, z); + if (tryStore(drops, direction.getOpposite())) worldObj.setBlock(x, y, z, Blocks.air, 0, 3);; } - private void tryInjectItems(List drops, ForgeDirection direction) { - TileEntity targetInventory = getTileInDirection(direction); - if (targetInventory == null) return; + public List getBlockDrops(final int x, final int y, final int z) { + List out = new ArrayList<>(); + final Block which = worldObj.getBlock(x, y, z); + + if (which != null) { + out = which.getDrops(worldObj, x, y, z, worldObj.getBlockMetadata(x, y, z), 0); + } - for (EntityItem drop : drops) { - ItemStack stack = drop.getEntityItem(); - ItemDistribution.insertItemInto(stack, targetInventory, direction, true); + if (out == null) { + return new ArrayList<>(); + } + return out; + } + + private boolean tryStore(List drops, ForgeDirection direction) { + TileEntity targetInventory = getTileInDirection(direction); + if (targetInventory == null) return false; - if (stack.stackSize <= 0) drop.setDead(); + boolean anyInserted = false; + for (ItemStack stack : drops) { + anyInserted |= ItemDistribution.insertItemInto(stack, targetInventory, direction, true); } + return anyInserted; } @Override