From 76d3a13f58ba5b430f6ceed8f6d53db090d39713 Mon Sep 17 00:00:00 2001 From: Babbaj Date: Sun, 16 Jul 2023 01:19:51 -0400 Subject: [PATCH] cull far away chunks from the cache --- build.gradle | 4 ++-- src/api/java/baritone/api/Settings.java | 11 +++++++++++ .../java/baritone/behavior/ElytraBehavior.java | 15 +++++++++++---- .../behavior/elytra/NetherPathfinderContext.java | 4 ++++ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index da0e2232b..e44d68e04 100755 --- a/build.gradle +++ b/build.gradle @@ -175,8 +175,8 @@ dependencies { transitive = false } launchAnnotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor' - launchImplementation('dev.babbaj:nether-pathfinder:0.24') - implementation 'dev.babbaj:nether-pathfinder:0.24' + launchImplementation('dev.babbaj:nether-pathfinder:0.34') + implementation 'dev.babbaj:nether-pathfinder:0.34' testImplementation 'junit:junit:4.12' } diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index eafa22b22..e203a0ebf 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -38,6 +38,7 @@ import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -1404,6 +1405,16 @@ public final class Settings { */ public final Setting elytraMinimumDurability = new Setting<>(5); + /** + * Time between culling far away chunks from the nether pathfinder chunk cache + */ + public final Setting elytraTimeBetweenCacheCullSecs = new Setting<>(TimeUnit.MINUTES.toSeconds(3)); + + /** + * Maximum distance chunks can be before being culled from the nether pathfinder chunk cache + */ + public final Setting elytraCacheCullDistance = new Setting<>(5000); + /** * 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 197ea61b8..42f226e79 100644 --- a/src/main/java/baritone/behavior/ElytraBehavior.java +++ b/src/main/java/baritone/behavior/ElytraBehavior.java @@ -118,9 +118,11 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H private Solution pendingSolution; private boolean solveNextTick; + private long timeLastCacheCull = 0L; + // auto swap private int invTickCountdown = 0; - private final Queue transactionQueue = new LinkedList<>(); + private final Queue invTransactionQueue = new LinkedList<>(); private ElytraBehavior(Baritone baritone) { super(baritone); @@ -516,6 +518,11 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H if (event.getType() == TickEvent.Type.OUT) { return; } + final long now = System.currentTimeMillis(); + if ((now - this.timeLastCacheCull) / 1000 > Baritone.settings().elytraTimeBetweenCacheCullSecs.value) { + this.context.queueCacheCulling(ctx.player().chunkCoordX, ctx.player().chunkCoordZ, Baritone.settings().elytraCacheCullDistance.value); + this.timeLastCacheCull = now; + } // Fetch the previous solution, regardless of if it's going to be used this.pendingSolution = null; @@ -1264,7 +1271,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H private void tickInventoryTransactions() { if (invTickCountdown <= 0) { - Runnable r = transactionQueue.poll(); + Runnable r = invTransactionQueue.poll(); if (r != null) { r.run(); invTickCountdown = Baritone.settings().ticksBetweenInventoryMoves.value; @@ -1274,7 +1281,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H } private void queueWindowClick(int windowId, int slotId, int button, ClickType type) { - transactionQueue.add(() -> ctx.playerController().windowClick(windowId, slotId, button, type, ctx.player())); + invTransactionQueue.add(() -> ctx.playerController().windowClick(windowId, slotId, button, type, ctx.player())); } private int findGoodElytra() { @@ -1289,7 +1296,7 @@ public final class ElytraBehavior extends Behavior implements IElytraBehavior, H } private void trySwapElytra() { - if (!Baritone.settings().elytraAutoSwap.value || !transactionQueue.isEmpty()) { + if (!Baritone.settings().elytraAutoSwap.value || !invTransactionQueue.isEmpty()) { return; } diff --git a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java index 457b2a7a5..e0eb7de0b 100644 --- a/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java +++ b/src/main/java/baritone/behavior/elytra/NetherPathfinderContext.java @@ -57,6 +57,10 @@ public final class NetherPathfinderContext { this.executor = Executors.newSingleThreadExecutor(); } + public void queueCacheCulling(int chunkX, int chunkZ, int maxDistanceBlocks) { + this.executor.execute(() -> NetherPathfinder.cullFarChunks(this.context, chunkX, chunkZ, maxDistanceBlocks)); + } + public void queueForPacking(final Chunk chunkIn) { final SoftReference ref = new SoftReference<>(chunkIn); this.executor.execute(() -> {