From 3d0d73a5cab839fc7494d85d1066a0f4429c4d1d Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 3 Aug 2018 13:31:33 -0700 Subject: [PATCH] Refactored IOpenSet implementations --- .../java/baritone/bot/GameEventHandler.java | 12 +++++-- .../bot/pathing/calc/AStarPathFinder.java | 2 ++ .../baritone/bot/pathing/calc/IOpenSet.java | 14 --------- .../baritone/bot/pathing/calc/PathNode.java | 3 +- .../bot/pathing/movement/MovementHelper.java | 13 +++----- .../movement/movements/MovementAscend.java | 1 - .../{calc => openset}/BinaryHeapOpenSet.java | 31 ++++++++++++++----- .../FibonacciHeapOpenSet.java | 7 +++-- .../bot/pathing/openset/IOpenSet.java | 30 ++++++++++++++++++ .../{calc => openset}/LinkedListOpenSet.java | 4 ++- .../pathing/{calc => util}/FibonacciHeap.java | 2 +- .../{calc => openset}/OpenSetsTest.java | 3 +- 12 files changed, 82 insertions(+), 40 deletions(-) delete mode 100644 src/main/java/baritone/bot/pathing/calc/IOpenSet.java rename src/main/java/baritone/bot/pathing/{calc => openset}/BinaryHeapOpenSet.java (82%) rename src/main/java/baritone/bot/pathing/{calc => openset}/FibonacciHeapOpenSet.java (74%) create mode 100644 src/main/java/baritone/bot/pathing/openset/IOpenSet.java rename src/main/java/baritone/bot/pathing/{calc => openset}/LinkedListOpenSet.java (95%) rename src/main/java/baritone/bot/pathing/{calc => util}/FibonacciHeap.java (99%) rename src/test/java/baritone/bot/pathing/{calc => openset}/OpenSetsTest.java (96%) diff --git a/src/main/java/baritone/bot/GameEventHandler.java b/src/main/java/baritone/bot/GameEventHandler.java index 1e9bbae3..46d382d7 100755 --- a/src/main/java/baritone/bot/GameEventHandler.java +++ b/src/main/java/baritone/bot/GameEventHandler.java @@ -1,9 +1,12 @@ package baritone.bot; import baritone.bot.behavior.Behavior; +import baritone.bot.chunk.ChunkPacker; import baritone.bot.event.IGameEventListener; import baritone.bot.event.events.ChatEvent; import baritone.bot.event.events.ChunkEvent; +import baritone.bot.event.events.type.EventState; +import baritone.bot.utils.Helper; import net.minecraft.client.settings.KeyBinding; import org.lwjgl.input.Keyboard; @@ -13,10 +16,9 @@ import java.util.function.Consumer; * @author Brady * @since 7/31/2018 11:04 PM */ -public final class GameEventHandler implements IGameEventListener { +public final class GameEventHandler implements IGameEventListener, Helper { - GameEventHandler() { - } + GameEventHandler() {} @Override public final void onTick() { @@ -50,6 +52,10 @@ public final class GameEventHandler implements IGameEventListener { @Override public void onChunkEvent(ChunkEvent event) { dispatch(behavior -> onChunkEvent(event)); + + if (event.getState() == EventState.POST && event.getType() == ChunkEvent.Type.POPULATE) { + ChunkPacker.createPackedChunk(mc.world.getChunk(event.getX(), event.getZ())).write(); + } } private void dispatch(Consumer dispatchFunction) { diff --git a/src/main/java/baritone/bot/pathing/calc/AStarPathFinder.java b/src/main/java/baritone/bot/pathing/calc/AStarPathFinder.java index 638e0bb4..6431add4 100644 --- a/src/main/java/baritone/bot/pathing/calc/AStarPathFinder.java +++ b/src/main/java/baritone/bot/pathing/calc/AStarPathFinder.java @@ -3,6 +3,8 @@ package baritone.bot.pathing.calc; //import baritone.Baritone; +import baritone.bot.pathing.openset.BinaryHeapOpenSet; +import baritone.bot.pathing.openset.IOpenSet; import baritone.bot.pathing.goals.Goal; import baritone.bot.pathing.movement.ActionCosts; import baritone.bot.pathing.movement.Movement; diff --git a/src/main/java/baritone/bot/pathing/calc/IOpenSet.java b/src/main/java/baritone/bot/pathing/calc/IOpenSet.java deleted file mode 100644 index 331aa480..00000000 --- a/src/main/java/baritone/bot/pathing/calc/IOpenSet.java +++ /dev/null @@ -1,14 +0,0 @@ -package baritone.bot.pathing.calc; - -/** - * An open set for A* or similar graph search algorithm - * - * @author leijurv - */ -public interface IOpenSet { - boolean isEmpty(); - - void insert(PathNode node); - - PathNode removeLowest(); -} diff --git a/src/main/java/baritone/bot/pathing/calc/PathNode.java b/src/main/java/baritone/bot/pathing/calc/PathNode.java index 1472af67..12a2f0a0 100644 --- a/src/main/java/baritone/bot/pathing/calc/PathNode.java +++ b/src/main/java/baritone/bot/pathing/calc/PathNode.java @@ -11,7 +11,8 @@ import java.util.Objects; * * @author leijurv */ -class PathNode { +public class PathNode { + /** * The position of this node */ diff --git a/src/main/java/baritone/bot/pathing/movement/MovementHelper.java b/src/main/java/baritone/bot/pathing/movement/MovementHelper.java index 8de9b2f1..f535efe1 100644 --- a/src/main/java/baritone/bot/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/bot/pathing/movement/MovementHelper.java @@ -99,15 +99,10 @@ public interface MovementHelper extends ActionCosts { return block.isPassable(Minecraft.getMinecraft().world, pos); } - static boolean avoidWalkingInto(BlockPos pos) { - Block block = BlockStateInterface.get(pos).getBlock(); - if (isLava(block)) { - return true; - } - if (block instanceof BlockCactus) { - return true; - } - return block instanceof BlockFire; + static boolean avoidWalkingInto(Block block) { + return isLava(block) + || block instanceof BlockCactus + || block instanceof BlockFire; } /** diff --git a/src/main/java/baritone/bot/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/bot/pathing/movement/movements/MovementAscend.java index 10ea3e4b..dee137a7 100644 --- a/src/main/java/baritone/bot/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/bot/pathing/movement/movements/MovementAscend.java @@ -29,5 +29,4 @@ public class MovementAscend extends Movement { latestState.setStatus(MovementState.MovementStatus.SUCCESS); return latestState; } - } diff --git a/src/main/java/baritone/bot/pathing/calc/BinaryHeapOpenSet.java b/src/main/java/baritone/bot/pathing/openset/BinaryHeapOpenSet.java similarity index 82% rename from src/main/java/baritone/bot/pathing/calc/BinaryHeapOpenSet.java rename to src/main/java/baritone/bot/pathing/openset/BinaryHeapOpenSet.java index 8510fdc1..37123bd3 100644 --- a/src/main/java/baritone/bot/pathing/calc/BinaryHeapOpenSet.java +++ b/src/main/java/baritone/bot/pathing/openset/BinaryHeapOpenSet.java @@ -1,10 +1,24 @@ -package baritone.bot.pathing.calc; +package baritone.bot.pathing.openset; + +import baritone.bot.pathing.calc.PathNode; import java.util.Arrays; public class BinaryHeapOpenSet implements IOpenSet { + + /** + * The initial capacity of the heap (2^10) + */ private static final int INITIAL_CAPACITY = 1024; + + /** + * The array backing the heap + */ private PathNode[] array; + + /** + * The size of the heap + */ private int size; public BinaryHeapOpenSet() { @@ -16,6 +30,7 @@ public class BinaryHeapOpenSet implements IOpenSet { this.array = new PathNode[size]; } + @Override public void insert(PathNode value) { if (size >= array.length - 1) { array = Arrays.copyOf(array, array.length * 2); @@ -31,16 +46,12 @@ public class BinaryHeapOpenSet implements IOpenSet { } } - /** - * Returns true if the heap has no elements; false otherwise. - */ + @Override public boolean isEmpty() { return size == 0; } - /** - * Removes and returns the minimum element in the heap. - */ + @Override public PathNode removeLowest() { if (size == 0) { throw new IllegalStateException(); @@ -67,6 +78,12 @@ public class BinaryHeapOpenSet implements IOpenSet { return result; } + /** + * Swaps the elements at the specified indices. + * + * @param index1 The first index + * @param index2 The second index + */ protected void swap(int index1, int index2) { PathNode tmp = array[index1]; array[index1] = array[index2]; diff --git a/src/main/java/baritone/bot/pathing/calc/FibonacciHeapOpenSet.java b/src/main/java/baritone/bot/pathing/openset/FibonacciHeapOpenSet.java similarity index 74% rename from src/main/java/baritone/bot/pathing/calc/FibonacciHeapOpenSet.java rename to src/main/java/baritone/bot/pathing/openset/FibonacciHeapOpenSet.java index fbf26b0c..ca4f14e3 100644 --- a/src/main/java/baritone/bot/pathing/calc/FibonacciHeapOpenSet.java +++ b/src/main/java/baritone/bot/pathing/openset/FibonacciHeapOpenSet.java @@ -1,4 +1,7 @@ -package baritone.bot.pathing.calc; +package baritone.bot.pathing.openset; + +import baritone.bot.pathing.util.FibonacciHeap; +import baritone.bot.pathing.calc.PathNode; /** * Wrapper adapter between FibonacciHeap and OpenSet @@ -6,7 +9,7 @@ package baritone.bot.pathing.calc; * @author leijurv */ public class FibonacciHeapOpenSet extends FibonacciHeap implements IOpenSet { - //isEmpty is already defined in FibonacciHeap + @Override public void insert(PathNode node) { super.insert(node, node.combinedCost); diff --git a/src/main/java/baritone/bot/pathing/openset/IOpenSet.java b/src/main/java/baritone/bot/pathing/openset/IOpenSet.java new file mode 100644 index 00000000..192f288b --- /dev/null +++ b/src/main/java/baritone/bot/pathing/openset/IOpenSet.java @@ -0,0 +1,30 @@ +package baritone.bot.pathing.openset; + +import baritone.bot.pathing.calc.PathNode; + +/** + * An open set for A* or similar graph search algorithm + * + * @author leijurv + */ +public interface IOpenSet { + + /** + * Inserts the specified node into the heap + * + * @param node The node + */ + void insert(PathNode node); + + /** + * @return {@code true} if the heap has no elements; {@code false} otherwise. + */ + boolean isEmpty(); + + /** + * Removes and returns the minimum element in the heap. + * + * @return The minimum element in the heap + */ + PathNode removeLowest(); +} diff --git a/src/main/java/baritone/bot/pathing/calc/LinkedListOpenSet.java b/src/main/java/baritone/bot/pathing/openset/LinkedListOpenSet.java similarity index 95% rename from src/main/java/baritone/bot/pathing/calc/LinkedListOpenSet.java rename to src/main/java/baritone/bot/pathing/openset/LinkedListOpenSet.java index 006662e6..e6b95cfe 100644 --- a/src/main/java/baritone/bot/pathing/calc/LinkedListOpenSet.java +++ b/src/main/java/baritone/bot/pathing/openset/LinkedListOpenSet.java @@ -1,4 +1,6 @@ -package baritone.bot.pathing.calc; +package baritone.bot.pathing.openset; + +import baritone.bot.pathing.calc.PathNode; /** * A linked list implementation of an open set. This is the original implementation from MineBot. diff --git a/src/main/java/baritone/bot/pathing/calc/FibonacciHeap.java b/src/main/java/baritone/bot/pathing/util/FibonacciHeap.java similarity index 99% rename from src/main/java/baritone/bot/pathing/calc/FibonacciHeap.java rename to src/main/java/baritone/bot/pathing/util/FibonacciHeap.java index be61cbf7..b9a882a0 100644 --- a/src/main/java/baritone/bot/pathing/calc/FibonacciHeap.java +++ b/src/main/java/baritone/bot/pathing/util/FibonacciHeap.java @@ -1,5 +1,5 @@ //Source: https://github.com/nlfiedler/graphmaker/blob/master/core/src/com/bluemarsh/graphmaker/core/util/FibonacciHeap.java -package baritone.bot.pathing.calc; +package baritone.bot.pathing.util; /* * The contents of this file are subject to the terms of the Common Development * and Distribution License (the License). You may not use this file except in diff --git a/src/test/java/baritone/bot/pathing/calc/OpenSetsTest.java b/src/test/java/baritone/bot/pathing/openset/OpenSetsTest.java similarity index 96% rename from src/test/java/baritone/bot/pathing/calc/OpenSetsTest.java rename to src/test/java/baritone/bot/pathing/openset/OpenSetsTest.java index 3302d71d..f552a73a 100644 --- a/src/test/java/baritone/bot/pathing/calc/OpenSetsTest.java +++ b/src/test/java/baritone/bot/pathing/openset/OpenSetsTest.java @@ -1,5 +1,6 @@ -package baritone.bot.pathing.calc; +package baritone.bot.pathing.openset; +import baritone.bot.pathing.calc.PathNode; import baritone.bot.pathing.goals.GoalBlock; import net.minecraft.util.math.BlockPos; import org.junit.Test;