diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 9eed667f9..08fe54d3a 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -1388,6 +1388,12 @@ public final class Settings { */ public final Setting elytraAutoJump = new Setting<>(false); + /** + * The seed used to generate chunks for long distance elytra path-finding in the nether. + * Defaults to 2b2t's nether seed. + */ + public final Setting elytraNetherSeed = new Setting<>(146008555100680L); + /** * A map of lowercase setting field names to their respective setting */ diff --git a/src/main/java/baritone/behavior/ElytraBehavior.java b/src/main/java/baritone/behavior/ElytraBehavior.java index 9ff48f3a2..edabf2912 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -66,11 +66,6 @@ import static baritone.utils.BaritoneMath.fastFloor; public final class ElytraBehavior extends Behavior implements IElytraBehavior, Helper { - /** - * 2b2t seed - */ - private static final long NETHER_SEED = 146008555100680L; - // Used exclusively for PathRenderer public List> clearLines; public List> blockedLines; @@ -79,7 +74,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H public List visiblePath; // :sunglasses: - private final NetherPathfinderContext context; + private NetherPathfinderContext context; private final PathManager pathManager; private final ElytraProcess process; @@ -113,7 +108,6 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H public ElytraBehavior(Baritone baritone) { super(baritone); - this.context = new NetherPathfinderContext(NETHER_SEED); this.clearLines = new CopyOnWriteArrayList<>(); this.blockedLines = new CopyOnWriteArrayList<>(); this.pathManager = this.new PathManager(); @@ -439,6 +433,21 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H } } + // Setup/reset context + final long netherSeed = Baritone.settings().elytraNetherSeed.value; + if (this.context == null || this.context.getSeed() != netherSeed) { + if (this.context != null) { + this.context.destroy(); + } + this.context = new NetherPathfinderContext(netherSeed); + + if (this.isActive()) { + // TODO: Re-pack chunks? + logDirect("Nether seed changed, recalculating path"); + this.pathManager.pathToDestination(); + } + } + // Certified mojang employee incident if (this.remainingFireworkTicks > 0) { this.remainingFireworkTicks--;