Skip to content

Commit ac6684c

Browse files
authored
Fix #929: Hunger cost for 3x3 steam drill mining (#1049)
1 parent c4f0e88 commit ac6684c

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

src/main/java/aztech/modern_industrialization/items/SteamDrillItem.java

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@
6969
import net.minecraft.world.level.BlockGetter;
7070
import net.minecraft.world.level.ClipContext;
7171
import net.minecraft.world.level.Level;
72-
import net.minecraft.world.level.block.Block;
7372
import net.minecraft.world.level.block.state.BlockState;
7473
import net.minecraft.world.level.material.FluidState;
7574
import net.minecraft.world.level.material.Fluids;
@@ -79,7 +78,6 @@
7978
import net.minecraft.world.phys.Vec3;
8079
import net.neoforged.bus.api.EventPriority;
8180
import net.neoforged.neoforge.capabilities.Capabilities;
82-
import net.neoforged.neoforge.common.CommonHooks;
8381
import net.neoforged.neoforge.common.NeoForge;
8482
import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent;
8583
import net.neoforged.neoforge.event.level.BlockDropsEvent;
@@ -310,6 +308,8 @@ private static void trackClickedFace(PlayerInteractEvent.LeftClickBlock event) {
310308
private record ClickedBlock(BlockPos pos, Direction face) {
311309
}
312310

311+
private static final ThreadLocal<Boolean> recursiveMineBlock = ThreadLocal.withInitial(() -> false);
312+
313313
@Override
314314
public boolean mineBlock(ItemStack stack, Level world, BlockState state, BlockPos pos, LivingEntity miner) {
315315
useFuel(stack, miner);
@@ -318,24 +318,26 @@ public boolean mineBlock(ItemStack stack, Level world, BlockState state, BlockPo
318318
return false;
319319
}
320320

321+
if (recursiveMineBlock.get()) {
322+
// Avoid endless recursion
323+
return false;
324+
}
325+
321326
var area = getArea(world, p, stack, false);
322327
if (area == null) {
323328
return false;
324329
}
325330
lastClickedBlock.remove(p);
326331

327332
totalDrops = new ArrayList<>();
328-
forEachMineableBlock(world, area, miner, (blockPos, tempState) -> {
329-
Block block = tempState.getBlock();
330-
var blockEntity = world.getBlockEntity(blockPos);
331-
var breakEvent = CommonHooks.fireBlockBreak(world, p.gameMode.getGameModeForPlayer(), p,
332-
blockPos, tempState);
333-
if (!breakEvent.isCanceled() && block.onDestroyedByPlayer(tempState, world, blockPos, (Player) miner, true, tempState.getFluidState())) {
334-
block.destroy(world, blockPos, tempState);
335-
// Thanks to our event above, the drops won't make it into the level, and will be added to `totalDrops` instead.
336-
Block.dropResources(tempState, world, blockPos, blockEntity, miner, stack);
337-
}
338-
});
333+
recursiveMineBlock.set(true);
334+
try {
335+
forEachMineableBlock(world, area, miner, (blockPos, tempState) -> {
336+
p.gameMode.destroyBlock(blockPos);
337+
});
338+
} finally {
339+
recursiveMineBlock.set(false);
340+
}
339341
totalDrops.forEach(itemStack -> {
340342
ItemHandlerHelper.giveItemToPlayer(p, itemStack);
341343
});

0 commit comments

Comments
 (0)