From cfec67f1f9977943083101ce7025f771d628cd60 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 16 Mar 2019 23:23:20 -0700 Subject: [PATCH 1/4] wording --- src/main/java/baritone/process/FollowProcess.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/process/FollowProcess.java b/src/main/java/baritone/process/FollowProcess.java index 6004ac2fd..12188729d 100644 --- a/src/main/java/baritone/process/FollowProcess.java +++ b/src/main/java/baritone/process/FollowProcess.java @@ -102,7 +102,7 @@ public final class FollowProcess extends BaritoneProcessHelper implements IFollo @Override public String displayName0() { - return "Follow " + cache; + return "Following " + cache; } @Override From bcd097c6cbdaa227d6a7ea85a79ad6a8e7c3955a Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 17 Mar 2019 22:40:11 -0800 Subject: [PATCH 2/4] we can cancel calc even if not safe to cancel pathing --- src/main/java/baritone/behavior/PathingBehavior.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index cca7bdfc7..00ac5a4cb 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -325,6 +325,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, public void softCancelIfSafe() { synchronized (pathPlanLock) { + getInProgress().ifPresent(AbstractNodeCostSearch::cancel); // only cancel ours if (!isSafeToCancel()) { return; } @@ -332,7 +333,6 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, next = null; } cancelRequested = true; - getInProgress().ifPresent(AbstractNodeCostSearch::cancel); // only cancel ours // do everything BUT clear keys } @@ -340,11 +340,11 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, public void secretInternalSegmentCancel() { queuePathEvent(PathEvent.CANCELED); synchronized (pathPlanLock) { + getInProgress().ifPresent(AbstractNodeCostSearch::cancel); if (current != null) { current = null; next = null; baritone.getInputOverrideHandler().clearAllKeys(); - getInProgress().ifPresent(AbstractNodeCostSearch::cancel); baritone.getInputOverrideHandler().getBlockBreakHelper().stopBreakingBlock(); } } From 49658078b9cdd932d597bfc83c078ce444f3b1f9 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 18 Mar 2019 22:38:06 -0700 Subject: [PATCH 3/4] trapdoors cant be passed vertically in either state, thanks plutie --- .../pathing/movement/MovementHelper.java | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 47677a658..12ab8e72f 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -72,7 +72,7 @@ public interface MovementHelper extends ActionCosts, Helper { if (block == Blocks.AIR) { // early return for most common case return true; } - if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.WEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull) { + if (block == Blocks.FIRE || block == Blocks.TRIPWIRE || block == Blocks.WEB || block == Blocks.END_PORTAL || block == Blocks.COCOA || block instanceof BlockSkull || block instanceof BlockTrapDoor) { return false; } if (block instanceof BlockDoor || block instanceof BlockFenceGate) { @@ -84,9 +84,7 @@ public interface MovementHelper extends ActionCosts, Helper { if (block == Blocks.CARPET) { return canWalkOn(bsi, x, y - 1, z); } - boolean snow = block instanceof BlockSnow; - boolean trapdoor = block instanceof BlockTrapDoor; - if (snow || trapdoor) { + if (block instanceof BlockSnow) { // we've already checked doors and fence gates // so the only remaining dynamic isPassables are snow and trapdoor // if they're cached as a top block, we don't know their metadata @@ -94,19 +92,13 @@ public interface MovementHelper extends ActionCosts, Helper { if (!bsi.worldContainsLoadedChunk(x, z)) { return true; } - if (snow) { - // the check in BlockSnow.isPassable is layers < 5 - // while actually, we want < 3 because 3 or greater makes it impassable in a 2 high ceiling - if (state.getValue(BlockSnow.LAYERS) >= 3) { - return false; - } - // ok, it's low enough we could walk through it, but is it supported? - return canWalkOn(bsi, x, y - 1, z); + // the check in BlockSnow.isPassable is layers < 5 + // while actually, we want < 3 because 3 or greater makes it impassable in a 2 high ceiling + if (state.getValue(BlockSnow.LAYERS) >= 3) { + return false; } - if (trapdoor) { - return !state.getValue(BlockTrapDoor.OPEN); // see BlockTrapDoor.isPassable - } - throw new IllegalStateException(); + // ok, it's low enough we could walk through it, but is it supported? + return canWalkOn(bsi, x, y - 1, z); } if (isFlowing(x, y, z, state, bsi)) { return false; // Don't walk through flowing liquids From aada9731a63e604637e39386ef653715d97af6a1 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 19 Mar 2019 18:10:53 -0700 Subject: [PATCH 4/4] more resiliency to invalid cache files --- src/main/java/baritone/cache/CachedChunk.java | 2 +- src/main/java/baritone/cache/CachedRegion.java | 3 ++- src/main/java/baritone/cache/ChunkPacker.java | 8 +++++++- src/main/java/baritone/process/MineProcess.java | 2 +- src/main/java/baritone/utils/ExampleBaritoneControl.java | 7 +++---- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index 08c80141a..bc5e2ac90 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -177,7 +177,7 @@ public final class CachedChunk { if (special != null) { String str = special.get(index); if (str != null) { - return ChunkPacker.stringToBlock(str).getDefaultState(); + return ChunkPacker.stringToBlockRequired(str).getDefaultState(); } } diff --git a/src/main/java/baritone/cache/CachedRegion.java b/src/main/java/baritone/cache/CachedRegion.java index e3a85dfc4..d395f168a 100644 --- a/src/main/java/baritone/cache/CachedRegion.java +++ b/src/main/java/baritone/cache/CachedRegion.java @@ -240,7 +240,7 @@ public final class CachedRegion implements ICachedRegion { for (int z = 0; z < 32; z++) { if (present[x][z]) { for (int i = 0; i < 256; i++) { - overview[x][z][i] = ChunkPacker.stringToBlock(in.readUTF()).getDefaultState(); + overview[x][z][i] = ChunkPacker.stringToBlockRequired(in.readUTF()).getDefaultState(); } } } @@ -255,6 +255,7 @@ public final class CachedRegion implements ICachedRegion { int numSpecialBlockTypes = in.readShort() & 0xffff; for (int i = 0; i < numSpecialBlockTypes; i++) { String blockName = in.readUTF(); + ChunkPacker.stringToBlockRequired(blockName); List locs = new ArrayList<>(); location[x][z].put(blockName, locs); int numLocations = in.readShort() & 0xffff; diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index 66a11fe79..6834549bf 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -115,7 +115,13 @@ public final class ChunkPacker { return name; } - public static Block stringToBlock(String name) { + public static Block stringToBlockRequired(String name) { + Block block = stringToBlockNullable(name); + Objects.requireNonNull(block); + return block; + } + + public static Block stringToBlockNullable(String name) { return resourceCache.computeIfAbsent(name, n -> Block.getBlockFromName(n.contains(":") ? n : "minecraft:" + n)); } diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index af06556b1..f2ebcd552 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -302,7 +302,7 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro @Override public void mineByName(int quantity, String... blocks) { - mine(quantity, blocks == null || blocks.length == 0 ? null : Arrays.stream(blocks).map(ChunkPacker::stringToBlock).toArray(Block[]::new)); + mine(quantity, blocks == null || blocks.length == 0 ? null : Arrays.stream(blocks).map(ChunkPacker::stringToBlockRequired).toArray(Block[]::new)); } @Override diff --git a/src/main/java/baritone/utils/ExampleBaritoneControl.java b/src/main/java/baritone/utils/ExampleBaritoneControl.java index 04d1606b1..6dbdf388f 100644 --- a/src/main/java/baritone/utils/ExampleBaritoneControl.java +++ b/src/main/java/baritone/utils/ExampleBaritoneControl.java @@ -462,14 +462,13 @@ public class ExampleBaritoneControl extends Behavior implements Helper { String[] blockTypes = msg.substring(4).trim().split(" "); try { int quantity = Integer.parseInt(blockTypes[1]); - Block block = ChunkPacker.stringToBlock(blockTypes[0]); - Objects.requireNonNull(block); + Block block = ChunkPacker.stringToBlockRequired(blockTypes[0]); baritone.getMineProcess().mine(quantity, block); logDirect("Will mine " + quantity + " " + blockTypes[0]); return true; } catch (NumberFormatException | ArrayIndexOutOfBoundsException | NullPointerException ex) {} for (String s : blockTypes) { - if (ChunkPacker.stringToBlock(s) == null) { + if (ChunkPacker.stringToBlockNullable(s) == null) { logDirect(s + " isn't a valid block name"); return true; } @@ -552,7 +551,7 @@ public class ExampleBaritoneControl extends Behavior implements Helper { IWaypoint waypoint; if (tag == null) { String mining = waypointType; - Block block = ChunkPacker.stringToBlock(mining); + Block block = ChunkPacker.stringToBlockNullable(mining); //logDirect("Not a valid tag. Tags are: " + Arrays.asList(Waypoint.Tag.values()).toString().toLowerCase()); if (block == null) { waypoint = baritone.getWorldProvider().getCurrentWorld().getWaypoints().getAllWaypoints().stream().filter(w -> w.getName().equalsIgnoreCase(mining)).max(Comparator.comparingLong(IWaypoint::getCreationTimestamp)).orElse(null);