From 4efa2b1272e9e4244eada40130080fd490ccf560 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 18 Aug 2023 15:02:13 -0700 Subject: [PATCH] fix backtracking bad behavior when render distance is tiny --- .../baritone/process/elytra/ElytraBehavior.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/process/elytra/ElytraBehavior.java b/src/main/java/baritone/process/elytra/ElytraBehavior.java index 709d22334..c6207b08f 100644 --- a/src/main/java/baritone/process/elytra/ElytraBehavior.java +++ b/src/main/java/baritone/process/elytra/ElytraBehavior.java @@ -330,12 +330,19 @@ public final class ElytraBehavior implements Helper { } if (!ElytraBehavior.this.clearView(this.path.getVec(i), this.path.getVec(i + 1), false)) { // obstacle. where do we return to pathing? - // find the next valid segment + // if the end of render distance is closer to goal, then that's fine, otherwise we'd be "digging our hole deeper" and making an already bad backtrack worse + int rejoinMainPathAt; + if (this.path.get(rangeEndExcl - 1).distanceSq(this.path.get(path.size() - 1)) < ctx.playerFeet().distanceSq(this.path.get(path.size() - 1))) { + rejoinMainPathAt = rangeEndExcl - 1; // rejoin after current render distance + } else { + rejoinMainPathAt = path.size() - 1; // large backtrack detected. ignore render distance, rejoin later on + } + final BetterBlockPos blockage = this.path.get(i); - final double distance = ctx.playerFeet().distanceTo(this.path.get(rangeEndExcl - 1)); + final double distance = ctx.playerFeet().distanceTo(this.path.get(rejoinMainPathAt)); final long start = System.nanoTime(); - this.pathRecalcSegment(rangeEndExcl - 1) + this.pathRecalcSegment(rejoinMainPathAt) .thenRun(() -> { logDirect(String.format("Recalculated segment around path blockage near %s %s %s (next %.1f blocks in %.4f seconds)", SettingsUtil.maybeCensor(blockage.x),