From 43d5458a25f5f570e556cd1668b7f0d84c58d697 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 3 Apr 2021 16:41:45 -0700 Subject: [PATCH] fix weird behavior where allowBreak false broke #goto --- .../baritone/process/GetToBlockProcess.java | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index 78df95883..f6764d4c8 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -30,6 +30,7 @@ import baritone.api.utils.input.Input; import baritone.pathing.movement.CalculationContext; import baritone.utils.BaritoneProcessHelper; import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.inventory.ContainerPlayer; import net.minecraft.util.math.BlockPos; @@ -57,7 +58,7 @@ public final class GetToBlockProcess extends BaritoneProcessHelper implements IG start = ctx.playerFeet(); blacklist = new ArrayList<>(); arrivalTickCount = 0; - rescan(new ArrayList<>(), new CalculationContext(baritone)); + rescan(new ArrayList<>(), new GetToBlockCalculationContext(false)); } @Override @@ -68,7 +69,7 @@ public final class GetToBlockProcess extends BaritoneProcessHelper implements IG @Override public synchronized PathingCommand onTick(boolean calcFailed, boolean isSafeToCancel) { if (knownLocations == null) { - rescan(new ArrayList<>(), new CalculationContext(baritone)); + rescan(new ArrayList<>(), new GetToBlockCalculationContext(false)); } if (knownLocations.isEmpty()) { if (Baritone.settings().exploreForBlocks.value && !calcFailed) { @@ -77,6 +78,7 @@ public final class GetToBlockProcess extends BaritoneProcessHelper implements IG public boolean isInGoal(int x, int y, int z) { return false; } + @Override public double heuristic() { return Double.NEGATIVE_INFINITY; @@ -106,7 +108,7 @@ public final class GetToBlockProcess extends BaritoneProcessHelper implements IG int mineGoalUpdateInterval = Baritone.settings().mineGoalUpdateInterval.value; if (mineGoalUpdateInterval != 0 && tickCount++ % mineGoalUpdateInterval == 0) { // big brain List current = new ArrayList<>(knownLocations); - CalculationContext context = new CalculationContext(baritone, true); + CalculationContext context = new GetToBlockCalculationContext(true); Baritone.getExecutor().execute(() -> rescan(current, context)); } if (goal.isInGoal(ctx.playerFeet()) && goal.isInGoal(baritone.getPathingBehavior().pathStart()) && isSafeToCancel) { @@ -151,6 +153,20 @@ public final class GetToBlockProcess extends BaritoneProcessHelper implements IG return !newBlacklist.isEmpty(); } + // this is to signal to MineProcess that we don't care about the allowBreak setting + // it is NOT to be used to actually calculate a path + public class GetToBlockCalculationContext extends CalculationContext { + + public GetToBlockCalculationContext(boolean forUseOnAnotherThread) { + super(GetToBlockProcess.super.baritone, forUseOnAnotherThread); + } + + @Override + public double breakCostMultiplierAt(int x, int y, int z, IBlockState current) { + return 1; + } + } + // safer than direct double comparison from distanceSq private boolean areAdjacent(BlockPos posA, BlockPos posB) { int diffX = Math.abs(posA.getX() - posB.getX());