From 90c1a1175e4c0fc39cdde209535ddac5e8a4675b Mon Sep 17 00:00:00 2001 From: Lyft <127234178+Lyfts@users.noreply.github.com> Date: Sun, 12 Jan 2025 03:12:09 +0100 Subject: [PATCH] Fix some multiblock placements aborting too early (#25) --- .../blockrenderer6343/client/world/TrackedDummyWorld.java | 8 ++++++++ .../integration/gregtech/GTGuiMultiblockHandler.java | 6 +++--- .../structurelib/StructureCompatGuiHandler.java | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/blockrenderer6343/client/world/TrackedDummyWorld.java b/src/main/java/blockrenderer6343/client/world/TrackedDummyWorld.java index 280e3a8..7acfc22 100644 --- a/src/main/java/blockrenderer6343/client/world/TrackedDummyWorld.java +++ b/src/main/java/blockrenderer6343/client/world/TrackedDummyWorld.java @@ -28,6 +28,7 @@ public class TrackedDummyWorld extends DummyWorld { private final Vector3f minPos = new Vector3f(Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE); private final Vector3f maxPos = new Vector3f(Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE); private final Vector3f size = new Vector3f(); + private boolean hasChanged; @Override public boolean setBlock(int x, int y, int z, Block block, int meta, int flags) { @@ -50,6 +51,7 @@ public boolean setBlock(int x, int y, int z, Block block, int meta, int flags) { block.onBlockAdded(this, x, y, z); } + hasChanged = true; minPos.x = Math.min(minPos.x, x); minPos.y = Math.min(minPos.y, y); minPos.z = Math.min(minPos.z, z); @@ -312,4 +314,10 @@ && isBlockTargeted(movingobjectposition1, targetedBlocks)) { private boolean isBlockTargeted(MovingObjectPosition result, LongSet targetedBlocks) { return targetedBlocks.contains(CoordinatePacker.pack(result.blockX, result.blockY, result.blockZ)); } + + public boolean hasChanged() { + boolean changed = hasChanged; + hasChanged = false; + return changed; + } } diff --git a/src/main/java/blockrenderer6343/integration/gregtech/GTGuiMultiblockHandler.java b/src/main/java/blockrenderer6343/integration/gregtech/GTGuiMultiblockHandler.java index c232252..6ddf954 100644 --- a/src/main/java/blockrenderer6343/integration/gregtech/GTGuiMultiblockHandler.java +++ b/src/main/java/blockrenderer6343/integration/gregtech/GTGuiMultiblockHandler.java @@ -174,14 +174,14 @@ protected void placeMultiblock() { IMetaTileEntity mte = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); if (mte instanceof ISurvivalConstructable survivalConstructable) { - int result, iterations = 0; + int iterations = 0; do { - result = survivalConstructable.survivalConstruct( + survivalConstructable.survivalConstruct( getBuildTriggerStack(), Integer.MAX_VALUE, ISurvivalBuildEnvironment.create(CreativeItemSource.instance, FAKE_PLAYER)); iterations++; - } while (result > 0 && iterations < MAX_PLACE_ROUNDS); + } while (renderer.world.hasChanged() && iterations < MAX_PLACE_ROUNDS); } else if (tTileEntity instanceof IConstructableProvider iConstructableProvider) { constructable = iConstructableProvider.getConstructable(); } else if (tTileEntity instanceof IConstructable iConstructable) { diff --git a/src/main/java/blockrenderer6343/integration/structurelib/StructureCompatGuiHandler.java b/src/main/java/blockrenderer6343/integration/structurelib/StructureCompatGuiHandler.java index 12a3931..80837fc 100644 --- a/src/main/java/blockrenderer6343/integration/structurelib/StructureCompatGuiHandler.java +++ b/src/main/java/blockrenderer6343/integration/structurelib/StructureCompatGuiHandler.java @@ -38,7 +38,7 @@ protected void placeMultiblock() { tryConstruct = true; break; } - } while (result > 0 && iterations < MAX_PLACE_ROUNDS); + } while (renderer.world.hasChanged() && iterations < MAX_PLACE_ROUNDS); if (tryConstruct) { multi.construct(getBuildTriggerStack(), false);