From 9a9b4a1874241cfd02d396830196bc4df5e80230 Mon Sep 17 00:00:00 2001 From: Entropy5 <44469915+Entropy5@users.noreply.github.com> Date: Tue, 10 Jan 2023 05:56:30 +0100 Subject: [PATCH 1/3] bugfix for odd height schematics --- src/main/java/baritone/process/BuilderProcess.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 9b932a657..d8b5316ac 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -84,7 +84,7 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil private int layer; private int numRepeats; private List approxPlaceable; - public final int[] selectionYBounds = {0, 0}; + public final int[] selectionLayerBounds = {0, 0}; public BuilderProcess(Baritone baritone) { super(baritone); @@ -123,10 +123,10 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil logDirect(String.format("Schematic starts at y=%s with height %s", y, schematic.heightY())); logDirect(String.format("Selection starts at y=%s and ends at y=%s", minim.isPresent() ? minim.getAsInt() : 0, maxim.isPresent() ? maxim.getAsInt() : 0)); if (minim.isPresent() && maxim.isPresent()) { - selectionYBounds[0] = Baritone.settings().layerOrder.value ? y + schematic.heightY() - maxim.getAsInt() : minim.getAsInt() - y; - selectionYBounds[1] = Baritone.settings().layerOrder.value ? y + schematic.heightY() - minim.getAsInt() : maxim.getAsInt() - y; + selectionLayerBounds[0] = Baritone.settings().layerOrder.value ? y + schematic.heightY() - maxim.getAsInt() : minim.getAsInt() - y; + selectionLayerBounds[1] = Baritone.settings().layerOrder.value ? y + schematic.heightY() - minim.getAsInt() : maxim.getAsInt() - y; } - this.layer = this.selectionYBounds[0] / Baritone.settings().layerHeight.value; + this.layer = this.selectionLayerBounds[0] / Baritone.settings().layerHeight.value; logDirect("Skipped everything under layer " + this.layer); } } @@ -586,9 +586,9 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil private void checkAboveSelection() { if (Baritone.settings().buildInLayers.value && Baritone.settings().buildOnlySelection.value && - this.layer * Baritone.settings().layerHeight.value > this.selectionYBounds[1]) { + this.layer * Baritone.settings().layerHeight.value > this.selectionLayerBounds[1]) { logDirect("Skipped everything above layer " + this.layer); - this.layer = realSchematic.heightY() / Baritone.settings().layerHeight.value; + this.layer = realSchematic.heightY() / Baritone.settings().layerHeight.value + 1; } } From 98a87d099b0d0d4f147fa7d35f674c08de5c2379 Mon Sep 17 00:00:00 2001 From: Entropy5 <44469915+Entropy5@users.noreply.github.com> Date: Wed, 11 Jan 2023 04:36:15 +0100 Subject: [PATCH 2/3] zac suggestion --- .../java/baritone/process/BuilderProcess.java | 33 ++++++++----------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index d8b5316ac..298c88770 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -84,7 +84,7 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil private int layer; private int numRepeats; private List approxPlaceable; - public final int[] selectionLayerBounds = {0, 0}; + public int stopAtHeight = 0; public BuilderProcess(Baritone baritone) { super(baritone); @@ -113,21 +113,24 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil this.origin = new Vec3i(x, y, z); this.paused = false; this.layer = Baritone.settings().startAtLayer.value; + this.stopAtHeight = schematic.heightY(); if (Baritone.settings().buildOnlySelection.value) { if (baritone.getSelectionManager().getSelections().length == 0) { logDirect("Poor little kitten forgot to set a selection while BuildOnlySelection is true"); - } - if (Baritone.settings().buildInLayers.value) { + this.stopAtHeight = 0; + } else if (Baritone.settings().buildInLayers.value) { OptionalInt minim = Stream.of(baritone.getSelectionManager().getSelections()).mapToInt(sel -> sel.min().y).min(); OptionalInt maxim = Stream.of(baritone.getSelectionManager().getSelections()).mapToInt(sel -> sel.max().y).max(); - logDirect(String.format("Schematic starts at y=%s with height %s", y, schematic.heightY())); - logDirect(String.format("Selection starts at y=%s and ends at y=%s", minim.isPresent() ? minim.getAsInt() : 0, maxim.isPresent() ? maxim.getAsInt() : 0)); if (minim.isPresent() && maxim.isPresent()) { - selectionLayerBounds[0] = Baritone.settings().layerOrder.value ? y + schematic.heightY() - maxim.getAsInt() : minim.getAsInt() - y; - selectionLayerBounds[1] = Baritone.settings().layerOrder.value ? y + schematic.heightY() - minim.getAsInt() : maxim.getAsInt() - y; + int startAtHeight = Baritone.settings().layerOrder.value ? y + schematic.heightY() - maxim.getAsInt() : minim.getAsInt() - y; + this.stopAtHeight = (Baritone.settings().layerOrder.value ? y + schematic.heightY() - minim.getAsInt() : maxim.getAsInt() - y) + 1; + this.layer = startAtHeight / Baritone.settings().layerHeight.value; + if (Baritone.settings().chatDebug.value) { + logDirect(String.format("Schematic starts at y=%s with height %s", y, schematic.heightY())); + logDirect(String.format("Selection starts at y=%s and ends at y=%s", minim.getAsInt(), maxim.getAsInt())); + logDirect(String.format("Considering relevant height %s - %s", startAtHeight, this.stopAtHeight)); + } } - this.layer = this.selectionLayerBounds[0] / Baritone.settings().layerHeight.value; - logDirect("Skipped everything under layer " + this.layer); } } @@ -479,8 +482,7 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil } BuilderCalculationContext bcc = new BuilderCalculationContext(); if (!recalc(bcc)) { - checkAboveSelection(); - if (Baritone.settings().buildInLayers.value && layer * Baritone.settings().layerHeight.value < realSchematic.heightY()) { + if (Baritone.settings().buildInLayers.value && layer * Baritone.settings().layerHeight.value < stopAtHeight) { logDirect("Starting layer " + layer); layer++; return onTick(calcFailed, isSafeToCancel, recursions + 1); @@ -570,7 +572,6 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil if (goal == null) { goal = assemble(bcc, approxPlaceable, true); // we're far away, so assume that we have our whole inventory to recalculate placeable properly if (goal == null) { - checkAboveSelection(); if (Baritone.settings().skipFailedLayers.value && Baritone.settings().buildInLayers.value && layer * Baritone.settings().layerHeight.value < realSchematic.heightY()) { logDirect("Skipping layer that I cannot construct! Layer #" + layer); layer++; @@ -584,14 +585,6 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil return new PathingCommandContext(goal, PathingCommandType.FORCE_REVALIDATE_GOAL_AND_PATH, bcc); } - private void checkAboveSelection() { - if (Baritone.settings().buildInLayers.value && Baritone.settings().buildOnlySelection.value && - this.layer * Baritone.settings().layerHeight.value > this.selectionLayerBounds[1]) { - logDirect("Skipped everything above layer " + this.layer); - this.layer = realSchematic.heightY() / Baritone.settings().layerHeight.value + 1; - } - } - private boolean recalc(BuilderCalculationContext bcc) { if (incorrectPositions == null) { incorrectPositions = new HashSet<>(); From 16a62625b35d42420ea26e2cfb1c1ea2f6939c17 Mon Sep 17 00:00:00 2001 From: Entropy5 <44469915+Entropy5@users.noreply.github.com> Date: Thu, 12 Jan 2023 04:29:31 +0100 Subject: [PATCH 3/3] this seems to work as well? --- src/main/java/baritone/process/BuilderProcess.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/process/BuilderProcess.java b/src/main/java/baritone/process/BuilderProcess.java index 298c88770..f3f138c96 100644 --- a/src/main/java/baritone/process/BuilderProcess.java +++ b/src/main/java/baritone/process/BuilderProcess.java @@ -95,6 +95,7 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil this.name = name; this.schematic = schematic; this.realSchematic = null; + boolean buildingSelectionSchematic = schematic instanceof SelectionSchematic; if (!Baritone.settings().buildSubstitutes.value.isEmpty()) { this.schematic = new SubstituteSchematic(this.schematic, Baritone.settings().buildSubstitutes.value); } @@ -114,7 +115,7 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil this.paused = false; this.layer = Baritone.settings().startAtLayer.value; this.stopAtHeight = schematic.heightY(); - if (Baritone.settings().buildOnlySelection.value) { + if (Baritone.settings().buildOnlySelection.value && buildingSelectionSchematic) { // currently redundant but safer maybe if (baritone.getSelectionManager().getSelections().length == 0) { logDirect("Poor little kitten forgot to set a selection while BuildOnlySelection is true"); this.stopAtHeight = 0; @@ -124,12 +125,10 @@ public final class BuilderProcess extends BaritoneProcessHelper implements IBuil if (minim.isPresent() && maxim.isPresent()) { int startAtHeight = Baritone.settings().layerOrder.value ? y + schematic.heightY() - maxim.getAsInt() : minim.getAsInt() - y; this.stopAtHeight = (Baritone.settings().layerOrder.value ? y + schematic.heightY() - minim.getAsInt() : maxim.getAsInt() - y) + 1; - this.layer = startAtHeight / Baritone.settings().layerHeight.value; - if (Baritone.settings().chatDebug.value) { - logDirect(String.format("Schematic starts at y=%s with height %s", y, schematic.heightY())); - logDirect(String.format("Selection starts at y=%s and ends at y=%s", minim.getAsInt(), maxim.getAsInt())); - logDirect(String.format("Considering relevant height %s - %s", startAtHeight, this.stopAtHeight)); - } + this.layer = Math.max(this.layer, startAtHeight / Baritone.settings().layerHeight.value); // startAtLayer or startAtHeight, whichever is highest + logDebug(String.format("Schematic starts at y=%s with height %s", y, schematic.heightY())); + logDebug(String.format("Selection starts at y=%s and ends at y=%s", minim.getAsInt(), maxim.getAsInt())); + logDebug(String.format("Considering relevant height %s - %s", startAtHeight, this.stopAtHeight)); } } }