diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 7a3a16b77..2a2ba15a2 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -38,12 +38,14 @@ import baritone.pathing.path.PathExecutor; import baritone.utils.BlockBreakHelper; import baritone.utils.Helper; import baritone.utils.PathRenderer; +import it.unimi.dsi.fastutil.longs.LongOpenHashSet; import net.minecraft.util.math.BlockPos; import net.minecraft.world.chunk.EmptyChunk; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Optional; import java.util.concurrent.LinkedBlockingQueue; -import java.util.stream.Collectors; public final class PathingBehavior extends Behavior implements IPathingBehavior, Helper { @@ -419,11 +421,11 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, } else { timeout = Baritone.settings().planAheadTimeoutMS.get(); } - Optional> favoredPositions; - if (Baritone.settings().backtrackCostFavoringCoefficient.get() == 1D) { - favoredPositions = Optional.empty(); - } else { - favoredPositions = previous.map(IPath::positions).map(Collection::stream).map(x -> x.map(BetterBlockPos::longHash)).map(x -> x.collect(Collectors.toList())).map(HashSet::new); // <-- okay this is EPIC + Optional favoredPositions = Optional.empty(); + if (Baritone.settings().backtrackCostFavoringCoefficient.get() != 1D && previous.isPresent()) { + LongOpenHashSet tmp = new LongOpenHashSet(); + previous.get().positions().forEach(pos -> tmp.add(BetterBlockPos.longHash(pos))); + favoredPositions = Optional.of(tmp); } try { IPathFinder pf = new AStarPathFinder(start.getX(), start.getY(), start.getZ(), goal, favoredPositions, context); diff --git a/src/main/java/baritone/pathing/calc/AStarPathFinder.java b/src/main/java/baritone/pathing/calc/AStarPathFinder.java index 83830ac0a..cad0b5117 100644 --- a/src/main/java/baritone/pathing/calc/AStarPathFinder.java +++ b/src/main/java/baritone/pathing/calc/AStarPathFinder.java @@ -29,8 +29,8 @@ import baritone.utils.BlockStateInterface; import baritone.utils.Helper; import baritone.utils.pathing.BetterWorldBorder; import baritone.utils.pathing.MutableMoveResult; +import it.unimi.dsi.fastutil.longs.LongOpenHashSet; -import java.util.HashSet; import java.util.Optional; /** @@ -40,10 +40,10 @@ import java.util.Optional; */ public final class AStarPathFinder extends AbstractNodeCostSearch implements Helper { - private final Optional> favoredPositions; + private final Optional favoredPositions; private final CalculationContext calcContext; - public AStarPathFinder(int startX, int startY, int startZ, Goal goal, Optional> favoredPositions, CalculationContext context) { + public AStarPathFinder(int startX, int startY, int startZ, Goal goal, Optional favoredPositions, CalculationContext context) { super(startX, startY, startZ, goal); this.favoredPositions = favoredPositions; this.calcContext = context; @@ -64,9 +64,9 @@ public final class AStarPathFinder extends AbstractNodeCostSearch implements Hel bestSoFar[i] = startNode; } MutableMoveResult res = new MutableMoveResult(); - HashSet favored = favoredPositions.orElse(null); BetterWorldBorder worldBorder = new BetterWorldBorder(world().getWorldBorder()); BlockStateInterface.clearCachedChunk(); + LongOpenHashSet favored = favoredPositions.orElse(null); long startTime = System.nanoTime() / 1000000L; boolean slowPath = Baritone.settings().slowPath.get(); if (slowPath) {