From 2b4512ee3f8ab8217c7ba81083d899ca92104b18 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 8 Oct 2018 20:37:52 -0500 Subject: [PATCH] Move to API --- .../api/behavior/IPathingBehavior.java | 29 +++++++++++++++++++ .../api}/pathing/calc/IPathFinder.java | 4 +-- .../api}/pathing/movement/IMovement.java | 4 +-- .../api}/pathing/movement/MovementStatus.java | 2 +- .../api}/pathing/path/CutoffPath.java | 6 ++-- .../api}/pathing/path/CutoffResult.java | 2 +- .../baritone/api}/pathing/path/IPath.java | 21 ++------------ .../api/pathing/path/IPathExecutor.java | 27 +++++++++++++++++ .../baritone/api/utils}/BetterBlockPos.java | 26 ++++++++++++++--- .../launch/mixins/MixinMinecraft.java | 1 - .../java/baritone/behavior/MineBehavior.java | 6 ++-- .../baritone/behavior/PathingBehavior.java | 18 ++++++------ .../pathing/calc/AStarPathFinder.java | 7 +++-- .../pathing/calc/AbstractNodeCostSearch.java | 26 ++++------------- src/main/java/baritone/pathing/calc/Path.java | 6 ++-- .../java/baritone/pathing/calc/PathNode.java | 3 +- .../baritone/pathing/movement/Movement.java | 4 ++- .../pathing/movement/MovementHelper.java | 2 +- .../pathing/movement/MovementState.java | 1 + .../java/baritone/pathing/movement/Moves.java | 2 +- .../movement/movements/MovementAscend.java | 8 +++-- .../movement/movements/MovementDescend.java | 4 +-- .../movement/movements/MovementDiagonal.java | 8 +++-- .../movement/movements/MovementDownward.java | 8 +++-- .../movement/movements/MovementFall.java | 4 +-- .../movement/movements/MovementParkour.java | 8 +++-- .../movement/movements/MovementPillar.java | 8 +++-- .../movement/movements/MovementTraverse.java | 8 +++-- .../baritone/pathing/path/PathExecutor.java | 28 ++++++++++++++---- .../utils/ExampleBaritoneControl.java | 1 - src/main/java/baritone/utils/Helper.java | 2 +- .../java/baritone/utils/PathRenderer.java | 4 +-- .../utils/pathing/BetterBlockPosTest.java | 1 + 33 files changed, 190 insertions(+), 99 deletions(-) rename src/{main/java/baritone => api/java/baritone/api}/pathing/calc/IPathFinder.java (96%) rename src/{main/java/baritone => api/java/baritone/api}/pathing/movement/IMovement.java (95%) rename src/{main/java/baritone => api/java/baritone/api}/pathing/movement/MovementStatus.java (95%) rename src/{main/java/baritone => api/java/baritone/api}/pathing/path/CutoffPath.java (93%) rename src/{main/java/baritone => api/java/baritone/api}/pathing/path/CutoffResult.java (97%) rename src/{main/java/baritone => api/java/baritone/api}/pathing/path/IPath.java (85%) create mode 100644 src/api/java/baritone/api/pathing/path/IPathExecutor.java rename src/{main/java/baritone/utils/pathing => api/java/baritone/api/utils}/BetterBlockPos.java (86%) diff --git a/src/api/java/baritone/api/behavior/IPathingBehavior.java b/src/api/java/baritone/api/behavior/IPathingBehavior.java index e21d999d..5960688a 100644 --- a/src/api/java/baritone/api/behavior/IPathingBehavior.java +++ b/src/api/java/baritone/api/behavior/IPathingBehavior.java @@ -17,7 +17,10 @@ package baritone.api.behavior; +import baritone.api.pathing.calc.IPathFinder; import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.path.IPath; +import baritone.api.pathing.path.IPathExecutor; import java.util.Optional; @@ -65,4 +68,30 @@ public interface IPathingBehavior extends IBehavior { * Cancels the pathing behavior or the current path calculation. */ void cancel(); + + /** + * Returns the current path, from the current path executor, if there is one. + * + * @return The current path + */ + default Optional getPath() { + return Optional.ofNullable(getCurrent()).map(IPathExecutor::getPath); + } + + /** + * @return The current path finder being executed + */ + Optional getCurrentPathSearch(); + + /** + * @return The current path executor + */ + IPathExecutor getCurrent(); + + /** + * Returns the next path executor, created when planning ahead. + * + * @return The next path executor + */ + IPathExecutor getNext(); } diff --git a/src/main/java/baritone/pathing/calc/IPathFinder.java b/src/api/java/baritone/api/pathing/calc/IPathFinder.java similarity index 96% rename from src/main/java/baritone/pathing/calc/IPathFinder.java rename to src/api/java/baritone/api/pathing/calc/IPathFinder.java index e6f3be06..31fed89d 100644 --- a/src/main/java/baritone/pathing/calc/IPathFinder.java +++ b/src/api/java/baritone/api/pathing/calc/IPathFinder.java @@ -15,10 +15,10 @@ * along with Baritone. If not, see . */ -package baritone.pathing.calc; +package baritone.api.pathing.calc; import baritone.api.pathing.goals.Goal; -import baritone.pathing.path.IPath; +import baritone.api.pathing.path.IPath; import java.util.Optional; diff --git a/src/main/java/baritone/pathing/movement/IMovement.java b/src/api/java/baritone/api/pathing/movement/IMovement.java similarity index 95% rename from src/main/java/baritone/pathing/movement/IMovement.java rename to src/api/java/baritone/api/pathing/movement/IMovement.java index 83b65019..7b3eca5f 100644 --- a/src/main/java/baritone/pathing/movement/IMovement.java +++ b/src/api/java/baritone/api/pathing/movement/IMovement.java @@ -15,9 +15,9 @@ * along with Baritone. If not, see . */ -package baritone.pathing.movement; +package baritone.api.pathing.movement; -import baritone.utils.pathing.BetterBlockPos; +import baritone.api.utils.BetterBlockPos; import net.minecraft.util.math.BlockPos; import java.util.List; diff --git a/src/main/java/baritone/pathing/movement/MovementStatus.java b/src/api/java/baritone/api/pathing/movement/MovementStatus.java similarity index 95% rename from src/main/java/baritone/pathing/movement/MovementStatus.java rename to src/api/java/baritone/api/pathing/movement/MovementStatus.java index 4b4b92c3..6b5215ad 100644 --- a/src/main/java/baritone/pathing/movement/MovementStatus.java +++ b/src/api/java/baritone/api/pathing/movement/MovementStatus.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.pathing.movement; +package baritone.api.pathing.movement; /** * @author Brady diff --git a/src/main/java/baritone/pathing/path/CutoffPath.java b/src/api/java/baritone/api/pathing/path/CutoffPath.java similarity index 93% rename from src/main/java/baritone/pathing/path/CutoffPath.java rename to src/api/java/baritone/api/pathing/path/CutoffPath.java index 916b6c52..a702b7fd 100644 --- a/src/main/java/baritone/pathing/path/CutoffPath.java +++ b/src/api/java/baritone/api/pathing/path/CutoffPath.java @@ -15,11 +15,11 @@ * along with Baritone. If not, see . */ -package baritone.pathing.path; +package baritone.api.pathing.path; import baritone.api.pathing.goals.Goal; -import baritone.pathing.movement.IMovement; -import baritone.utils.pathing.BetterBlockPos; +import baritone.api.pathing.movement.IMovement; +import baritone.api.utils.BetterBlockPos; import java.util.Collections; import java.util.List; diff --git a/src/main/java/baritone/pathing/path/CutoffResult.java b/src/api/java/baritone/api/pathing/path/CutoffResult.java similarity index 97% rename from src/main/java/baritone/pathing/path/CutoffResult.java rename to src/api/java/baritone/api/pathing/path/CutoffResult.java index d1c03c1e..eeaa4ad1 100644 --- a/src/main/java/baritone/pathing/path/CutoffResult.java +++ b/src/api/java/baritone/api/pathing/path/CutoffResult.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package baritone.pathing.path; +package baritone.api.pathing.path; /** * @author Brady diff --git a/src/main/java/baritone/pathing/path/IPath.java b/src/api/java/baritone/api/pathing/path/IPath.java similarity index 85% rename from src/main/java/baritone/pathing/path/IPath.java rename to src/api/java/baritone/api/pathing/path/IPath.java index afc1bce3..2d4b08e3 100644 --- a/src/main/java/baritone/pathing/path/IPath.java +++ b/src/api/java/baritone/api/pathing/path/IPath.java @@ -15,15 +15,13 @@ * along with Baritone. If not, see . */ -package baritone.pathing.path; +package baritone.api.pathing.path; import baritone.api.BaritoneAPI; import baritone.api.pathing.goals.Goal; -import baritone.pathing.movement.IMovement; -import baritone.utils.Utils; -import baritone.utils.pathing.BetterBlockPos; +import baritone.api.pathing.movement.IMovement; +import baritone.api.utils.BetterBlockPos; import net.minecraft.client.Minecraft; -import net.minecraft.util.Tuple; import net.minecraft.util.math.BlockPos; import net.minecraft.world.chunk.EmptyChunk; @@ -70,19 +68,6 @@ public interface IPath { */ Goal getGoal(); - default Tuple closestPathPos() { - double best = -1; - BlockPos bestPos = null; - for (BlockPos pos : positions()) { - double dist = Utils.playerDistanceToCenter(pos); - if (dist < best || best == -1) { - best = dist; - bestPos = pos; - } - } - return new Tuple<>(best, bestPos); - } - /** * Where does this path start */ diff --git a/src/api/java/baritone/api/pathing/path/IPathExecutor.java b/src/api/java/baritone/api/pathing/path/IPathExecutor.java new file mode 100644 index 00000000..bf701224 --- /dev/null +++ b/src/api/java/baritone/api/pathing/path/IPathExecutor.java @@ -0,0 +1,27 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Baritone is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.pathing.path; + +/** + * @author Brady + * @since 10/8/2018 + */ +public interface IPathExecutor { + + IPath getPath(); +} diff --git a/src/main/java/baritone/utils/pathing/BetterBlockPos.java b/src/api/java/baritone/api/utils/BetterBlockPos.java similarity index 86% rename from src/main/java/baritone/utils/pathing/BetterBlockPos.java rename to src/api/java/baritone/api/utils/BetterBlockPos.java index e81319db..a1a3cb32 100644 --- a/src/main/java/baritone/utils/pathing/BetterBlockPos.java +++ b/src/api/java/baritone/api/utils/BetterBlockPos.java @@ -15,9 +15,8 @@ * along with Baritone. If not, see . */ -package baritone.utils.pathing; +package baritone.api.utils; -import baritone.pathing.calc.AbstractNodeCostSearch; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; @@ -54,11 +53,30 @@ public final class BetterBlockPos extends BlockPos { @Override public int hashCode() { - return (int) AbstractNodeCostSearch.posHash(x, y, z); + return (int) longHash(x, y, z); } public static long longHash(BetterBlockPos pos) { - return AbstractNodeCostSearch.posHash(pos.x, pos.y, pos.z); + return longHash(pos.x, pos.y, pos.z); + } + + public static long longHash(int x, int y, int z) { + /* + * This is the hashcode implementation of Vec3i (the superclass of the class which I shall not name) + * + * public int hashCode() { + * return (this.getY() + this.getZ() * 31) * 31 + this.getX(); + * } + * + * That is terrible and has tons of collisions and makes the HashMap terribly inefficient. + * + * That's why we grab out the X, Y, Z and calculate our own hashcode + */ + long hash = 3241; + hash = 3457689L * hash + x; + hash = 8734625L * hash + y; + hash = 2873465L * hash + z; + return hash; } @Override diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 2f0d1ab4..5d2ed420 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -40,7 +40,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; /** diff --git a/src/main/java/baritone/behavior/MineBehavior.java b/src/main/java/baritone/behavior/MineBehavior.java index 0f1a6b34..205c677d 100644 --- a/src/main/java/baritone/behavior/MineBehavior.java +++ b/src/main/java/baritone/behavior/MineBehavior.java @@ -22,13 +22,13 @@ import baritone.api.behavior.IMineBehavior; import baritone.api.event.events.PathEvent; import baritone.api.event.events.TickEvent; import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalBlock; +import baritone.api.pathing.goals.GoalComposite; +import baritone.api.pathing.goals.GoalTwoBlocks; import baritone.cache.CachedChunk; import baritone.cache.ChunkPacker; import baritone.cache.WorldProvider; import baritone.cache.WorldScanner; -import baritone.api.pathing.goals.GoalBlock; -import baritone.api.pathing.goals.GoalComposite; -import baritone.api.pathing.goals.GoalTwoBlocks; import baritone.utils.BlockStateInterface; import baritone.utils.Helper; import net.minecraft.block.Block; diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 16c88b92..45163852 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -25,19 +25,19 @@ import baritone.api.event.events.RenderEvent; import baritone.api.event.events.TickEvent; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalXZ; +import baritone.api.pathing.path.CutoffResult; +import baritone.api.pathing.path.IPath; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.pathing.calc.AStarPathFinder; import baritone.pathing.calc.AbstractNodeCostSearch; -import baritone.pathing.calc.IPathFinder; +import baritone.api.pathing.calc.IPathFinder; import baritone.pathing.movement.MovementHelper; -import baritone.pathing.path.CutoffResult; -import baritone.pathing.path.IPath; import baritone.pathing.path.PathExecutor; import baritone.utils.BlockBreakHelper; import baritone.utils.BlockStateInterface; import baritone.utils.Helper; import baritone.utils.PathRenderer; -import baritone.utils.pathing.BetterBlockPos; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.world.chunk.EmptyChunk; @@ -191,19 +191,19 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, return goal; } + @Override public PathExecutor getCurrent() { return current; } + @Override public PathExecutor getNext() { return next; } - // TODO: Expose this method in the API? - // In order to do so, we'd need to move over IPath which has a whole lot of references to other - // things that may not need to be exposed necessarily, so we'll need to figure that out. - public Optional getPath() { - return Optional.ofNullable(current).map(PathExecutor::getPath); + @Override + public Optional getCurrentPathSearch() { + return Optional.ofNullable(AbstractNodeCostSearch.currentlyRunning()); } @Override diff --git a/src/main/java/baritone/pathing/calc/AStarPathFinder.java b/src/main/java/baritone/pathing/calc/AStarPathFinder.java index 583428e9..3afafda9 100644 --- a/src/main/java/baritone/pathing/calc/AStarPathFinder.java +++ b/src/main/java/baritone/pathing/calc/AStarPathFinder.java @@ -20,10 +20,11 @@ package baritone.pathing.calc; import baritone.Baritone; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.movement.ActionCosts; +import baritone.api.pathing.path.IPath; +import baritone.api.utils.BetterBlockPos; import baritone.pathing.calc.openset.BinaryHeapOpenSet; import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.Moves; -import baritone.pathing.path.IPath; import baritone.utils.BlockStateInterface; import baritone.utils.Helper; import baritone.utils.pathing.MutableMoveResult; @@ -47,7 +48,7 @@ public final class AStarPathFinder extends AbstractNodeCostSearch implements Hel @Override protected Optional calculate0(long timeout) { - startNode = getNodeAtPosition(startX, startY, startZ, posHash(startX, startY, startZ)); + startNode = getNodeAtPosition(startX, startY, startZ, BetterBlockPos.longHash(startX, startY, startZ)); startNode.cost = 0; startNode.combinedCost = startNode.estimatedCostToGoal; BinaryHeapOpenSet openSet = new BinaryHeapOpenSet(); @@ -122,7 +123,7 @@ public final class AStarPathFinder extends AbstractNodeCostSearch implements Hel if (actionCost <= 0) { throw new IllegalStateException(moves + " calculated implausible cost " + actionCost); } - long hashCode = posHash(res.x, res.y, res.z); + long hashCode = BetterBlockPos.longHash(res.x, res.y, res.z); if (favoring && favored.contains(hashCode)) { // see issue #18 actionCost *= favorCoeff; diff --git a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java index 68a523fa..adac5e28 100644 --- a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java +++ b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java @@ -18,8 +18,9 @@ package baritone.pathing.calc; import baritone.Baritone; +import baritone.api.pathing.calc.IPathFinder; import baritone.api.pathing.goals.Goal; -import baritone.pathing.path.IPath; +import baritone.api.pathing.path.IPath; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import java.util.Optional; @@ -140,25 +141,6 @@ public abstract class AbstractNodeCostSearch implements IPathFinder { return node; } - public static long posHash(int x, int y, int z) { - /* - * This is the hashcode implementation of Vec3i (the superclass of the class which I shall not name) - * - * public int hashCode() { - * return (this.getY() + this.getZ() * 31) * 31 + this.getX(); - * } - * - * That is terrible and has tons of collisions and makes the HashMap terribly inefficient. - * - * That's why we grab out the X, Y, Z and calculate our own hashcode - */ - long hash = 3241; - hash = 3457689L * hash + x; - hash = 8734625L * hash + y; - hash = 2873465L * hash + z; - return hash; - } - public static void forceCancel() { currentlyRunning = null; } @@ -225,4 +207,8 @@ public abstract class AbstractNodeCostSearch implements IPathFinder { public static Optional getCurrentlyRunning() { return Optional.ofNullable(currentlyRunning); } + + public static AbstractNodeCostSearch currentlyRunning() { + return currentlyRunning; + } } diff --git a/src/main/java/baritone/pathing/calc/Path.java b/src/main/java/baritone/pathing/calc/Path.java index 6606cfba..ddd51dc2 100644 --- a/src/main/java/baritone/pathing/calc/Path.java +++ b/src/main/java/baritone/pathing/calc/Path.java @@ -18,11 +18,11 @@ package baritone.pathing.calc; import baritone.api.pathing.goals.Goal; -import baritone.pathing.movement.IMovement; +import baritone.api.pathing.movement.IMovement; +import baritone.api.pathing.path.IPath; +import baritone.api.utils.BetterBlockPos; import baritone.pathing.movement.Movement; import baritone.pathing.movement.Moves; -import baritone.pathing.path.IPath; -import baritone.utils.pathing.BetterBlockPos; import net.minecraft.util.math.BlockPos; import java.util.ArrayList; diff --git a/src/main/java/baritone/pathing/calc/PathNode.java b/src/main/java/baritone/pathing/calc/PathNode.java index 8e42d564..8f316132 100644 --- a/src/main/java/baritone/pathing/calc/PathNode.java +++ b/src/main/java/baritone/pathing/calc/PathNode.java @@ -19,6 +19,7 @@ package baritone.pathing.calc; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.movement.ActionCosts; +import baritone.api.utils.BetterBlockPos; /** * A node in the path, containing the cost and steps to get to it. @@ -85,7 +86,7 @@ public final class PathNode { */ @Override public int hashCode() { - return (int) AbstractNodeCostSearch.posHash(x, y, z); + return (int) BetterBlockPos.longHash(x, y, z); } @Override diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index bb699d0e..cffa28ee 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -18,11 +18,13 @@ package baritone.pathing.movement; import baritone.Baritone; +import baritone.api.pathing.movement.IMovement; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.Rotation; import baritone.behavior.LookBehavior; import baritone.behavior.LookBehaviorUtils; import baritone.utils.*; -import baritone.utils.pathing.BetterBlockPos; import net.minecraft.block.BlockLiquid; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 28b14e9e..5b5be77e 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -19,11 +19,11 @@ package baritone.pathing.movement; import baritone.Baritone; import baritone.api.pathing.movement.ActionCosts; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.Rotation; import baritone.behavior.LookBehaviorUtils; import baritone.pathing.movement.MovementState.MovementTarget; import baritone.utils.*; -import baritone.utils.pathing.BetterBlockPos; import net.minecraft.block.*; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.state.IBlockState; diff --git a/src/main/java/baritone/pathing/movement/MovementState.java b/src/main/java/baritone/pathing/movement/MovementState.java index acf223d4..db99ce5d 100644 --- a/src/main/java/baritone/pathing/movement/MovementState.java +++ b/src/main/java/baritone/pathing/movement/MovementState.java @@ -17,6 +17,7 @@ package baritone.pathing.movement; +import baritone.api.pathing.movement.MovementStatus; import baritone.api.utils.Rotation; import baritone.utils.InputOverrideHandler.Input; import net.minecraft.util.math.Vec3d; diff --git a/src/main/java/baritone/pathing/movement/Moves.java b/src/main/java/baritone/pathing/movement/Moves.java index c5b1069d..3d53ff5b 100644 --- a/src/main/java/baritone/pathing/movement/Moves.java +++ b/src/main/java/baritone/pathing/movement/Moves.java @@ -17,8 +17,8 @@ package baritone.pathing.movement; +import baritone.api.utils.BetterBlockPos; import baritone.pathing.movement.movements.*; -import baritone.utils.pathing.BetterBlockPos; import baritone.utils.pathing.MutableMoveResult; import net.minecraft.util.EnumFacing; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 9ad42d99..6989179b 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -18,12 +18,16 @@ package baritone.pathing.movement.movements; import baritone.Baritone; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.BetterBlockPos; import baritone.behavior.LookBehaviorUtils; -import baritone.pathing.movement.*; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.MovementHelper; +import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import baritone.utils.InputOverrideHandler; import baritone.utils.Utils; -import baritone.utils.pathing.BetterBlockPos; import net.minecraft.block.BlockFalling; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index 227a6b89..ba3deb7d 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -18,14 +18,14 @@ package baritone.pathing.movement.movements; import baritone.Baritone; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.BetterBlockPos; import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.Movement; import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.MovementState; -import baritone.pathing.movement.MovementStatus; import baritone.utils.BlockStateInterface; import baritone.utils.InputOverrideHandler; -import baritone.utils.pathing.BetterBlockPos; import baritone.utils.pathing.MutableMoveResult; import net.minecraft.block.Block; import net.minecraft.block.BlockFalling; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index b8ef01c3..8ff681c6 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -17,10 +17,14 @@ package baritone.pathing.movement.movements; -import baritone.pathing.movement.*; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.BetterBlockPos; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.MovementHelper; +import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import baritone.utils.InputOverrideHandler; -import baritone.utils.pathing.BetterBlockPos; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java index d808d993..0ac4f2b0 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java @@ -17,9 +17,13 @@ package baritone.pathing.movement.movements; -import baritone.pathing.movement.*; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.BetterBlockPos; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.MovementHelper; +import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; -import baritone.utils.pathing.BetterBlockPos; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index 3ce2848f..e09eb579 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -18,18 +18,18 @@ package baritone.pathing.movement.movements; import baritone.Baritone; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.Rotation; import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.Movement; import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.MovementState; -import baritone.pathing.movement.MovementStatus; import baritone.pathing.movement.MovementState.MovementTarget; import baritone.utils.BlockStateInterface; import baritone.utils.InputOverrideHandler; import baritone.utils.RayTraceUtils; import baritone.utils.Utils; -import baritone.utils.pathing.BetterBlockPos; import baritone.utils.pathing.MutableMoveResult; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.Items; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index 7ecb4c04..94b7dfea 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -18,11 +18,15 @@ package baritone.pathing.movement.movements; import baritone.Baritone; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.Rotation; import baritone.behavior.LookBehaviorUtils; -import baritone.pathing.movement.*; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.MovementHelper; +import baritone.pathing.movement.MovementState; import baritone.utils.*; -import baritone.utils.pathing.BetterBlockPos; import baritone.utils.pathing.MutableMoveResult; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index 7680fb43..60803a3c 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -17,12 +17,16 @@ package baritone.pathing.movement.movements; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.Rotation; -import baritone.pathing.movement.*; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.MovementHelper; +import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import baritone.utils.InputOverrideHandler; import baritone.utils.Utils; -import baritone.utils.pathing.BetterBlockPos; import net.minecraft.block.*; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 00000ac4..f029619a 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -18,13 +18,17 @@ package baritone.pathing.movement.movements; import baritone.Baritone; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.Rotation; import baritone.behavior.LookBehaviorUtils; -import baritone.pathing.movement.*; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.Movement; +import baritone.pathing.movement.MovementHelper; +import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import baritone.utils.InputOverrideHandler; import baritone.utils.Utils; -import baritone.utils.pathing.BetterBlockPos; import net.minecraft.block.*; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index a60b4a29..5f8c3f89 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -20,18 +20,23 @@ package baritone.pathing.path; import baritone.Baritone; import baritone.api.event.events.TickEvent; import baritone.api.pathing.movement.ActionCosts; +import baritone.api.pathing.movement.IMovement; +import baritone.api.pathing.movement.MovementStatus; +import baritone.api.pathing.path.IPath; +import baritone.api.pathing.path.IPathExecutor; +import baritone.api.utils.BetterBlockPos; import baritone.pathing.calc.AbstractNodeCostSearch; -import baritone.pathing.movement.*; +import baritone.pathing.movement.CalculationContext; +import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.movements.*; import baritone.utils.*; -import baritone.utils.pathing.BetterBlockPos; import net.minecraft.init.Blocks; import net.minecraft.util.Tuple; import net.minecraft.util.math.BlockPos; import java.util.*; -import static baritone.pathing.movement.MovementStatus.*; +import static baritone.api.pathing.movement.MovementStatus.*; /** * Behavior to execute a precomputed path. Does not (yet) deal with path segmentation or stitching @@ -39,7 +44,7 @@ import static baritone.pathing.movement.MovementStatus.*; * * @author leijurv */ -public class PathExecutor implements Helper { +public class PathExecutor implements IPathExecutor, Helper { private static final double MAX_MAX_DIST_FROM_PATH = 3; private static final double MAX_DIST_FROM_PATH = 2; @@ -125,7 +130,7 @@ public class PathExecutor implements Helper { } } } - Tuple status = path.closestPathPos(); + Tuple status = closestPathPos(path); if (possiblyOffPath(status, MAX_DIST_FROM_PATH)) { ticksAway++; System.out.println("FAR AWAY FROM PATH FOR " + ticksAway + " TICKS. Current distance: " + status.getFirst() + ". Threshold: " + MAX_DIST_FROM_PATH); @@ -269,6 +274,19 @@ public class PathExecutor implements Helper { return false; // movement is in progress } + private Tuple closestPathPos(IPath path) { + double best = -1; + BlockPos bestPos = null; + for (BlockPos pos : path.positions()) { + double dist = Utils.playerDistanceToCenter(pos); + if (dist < best || best == -1) { + best = dist; + bestPos = pos; + } + } + return new Tuple<>(best, bestPos); + } + private boolean shouldPause() { Optional current = AbstractNodeCostSearch.getCurrentlyRunning(); if (!current.isPresent()) { diff --git a/src/main/java/baritone/utils/ExampleBaritoneControl.java b/src/main/java/baritone/utils/ExampleBaritoneControl.java index fd733d7f..c851a087 100644 --- a/src/main/java/baritone/utils/ExampleBaritoneControl.java +++ b/src/main/java/baritone/utils/ExampleBaritoneControl.java @@ -31,7 +31,6 @@ import baritone.cache.ChunkPacker; import baritone.cache.Waypoint; import baritone.cache.WorldProvider; import baritone.pathing.calc.AbstractNodeCostSearch; -import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.Movement; import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.Moves; diff --git a/src/main/java/baritone/utils/Helper.java b/src/main/java/baritone/utils/Helper.java index a0ffdb96..f026ec38 100755 --- a/src/main/java/baritone/utils/Helper.java +++ b/src/main/java/baritone/utils/Helper.java @@ -18,8 +18,8 @@ package baritone.utils; import baritone.Baritone; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.Rotation; -import baritone.utils.pathing.BetterBlockPos; import net.minecraft.block.BlockSlab; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 6891a299..de2630c9 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -23,12 +23,12 @@ import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalComposite; import baritone.api.pathing.goals.GoalTwoBlocks; import baritone.api.pathing.goals.GoalXZ; +import baritone.api.pathing.path.IPath; +import baritone.api.utils.BetterBlockPos; import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.PathingBehavior; import baritone.pathing.calc.AbstractNodeCostSearch; -import baritone.pathing.path.IPath; import baritone.pathing.path.PathExecutor; -import baritone.utils.pathing.BetterBlockPos; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; diff --git a/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java b/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java index 13b76c73..a21f0cd4 100644 --- a/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java +++ b/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java @@ -17,6 +17,7 @@ package baritone.utils.pathing; +import baritone.api.utils.BetterBlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import org.junit.Test;