From 2afdaa1ac94c8acaa749637baaf019223d16bde2 Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 14 Dec 2018 18:50:39 -0600 Subject: [PATCH 01/63] Add individual chunk scanning to IWorldScanner --- .../baritone/api/cache/IWorldScanner.java | 15 +++++++ .../java/baritone/cache/WorldScanner.java | 43 +++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/src/api/java/baritone/api/cache/IWorldScanner.java b/src/api/java/baritone/api/cache/IWorldScanner.java index 6d6f49ef..caa44cbc 100644 --- a/src/api/java/baritone/api/cache/IWorldScanner.java +++ b/src/api/java/baritone/api/cache/IWorldScanner.java @@ -20,6 +20,7 @@ package baritone.api.cache; import baritone.api.utils.IPlayerContext; import net.minecraft.block.Block; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; import java.util.List; @@ -42,4 +43,18 @@ public interface IWorldScanner { * @return The matching block positions */ List scanChunkRadius(IPlayerContext ctx, List blocks, int max, int yLevelThreshold, int maxSearchRadius); + + /** + * Scans a single chunk for the specified blocks. + * + * @param ctx The {@link IPlayerContext} containing player and world info that the + * scan is based upon + * @param blocks The blocks to scan for + * @param pos The position of the target chunk + * @param max The maximum number of blocks to scan before cutoff + * @param yLevelThreshold If a block is found within this Y level, the current result will be + * returned, if the value is negative, then this condition doesn't apply. + * @return The matching block positions + */ + List scanChunk(IPlayerContext ctx, List blocks, ChunkPos pos, int max, int yLevelThreshold); } diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index 1d220188..30b67ded 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -23,10 +23,12 @@ import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.client.multiplayer.ChunkProviderClient; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; import net.minecraft.world.chunk.BlockStateContainer; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.storage.ExtendedBlockStorage; +import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -107,4 +109,45 @@ public enum WorldScanner implements IWorldScanner { searchRadiusSq++; } } + + @Override + public List scanChunk(IPlayerContext ctx, List blocks, ChunkPos pos, int max, int yLevelThreshold) { + if (blocks.isEmpty()) { + return Collections.emptyList(); + } + + ChunkProviderClient chunkProvider = (ChunkProviderClient) ctx.world().getChunkProvider(); + Chunk chunk = chunkProvider.getLoadedChunk(pos.x, pos.z); + int playerY = ctx.playerFeet().getY(); + + if (chunk == null || chunk.isEmpty()) { + return Collections.emptyList(); + } + + LinkedList res = new LinkedList<>(); + ExtendedBlockStorage[] chunkInternalStorageArray = chunk.getBlockStorageArray(); + for (int y0 = 0; y0 < 16; y0++) { + ExtendedBlockStorage extendedblockstorage = chunkInternalStorageArray[y0]; + if (extendedblockstorage == null) { + continue; + } + int yReal = y0 << 4; + BlockStateContainer bsc = extendedblockstorage.getData(); + for (int y = 0; y < 16; y++) { + for (int z = 0; z < 16; z++) { + for (int x = 0; x < 16; x++) { + IBlockState state = bsc.get(x, y, z); + if (blocks.contains(state.getBlock())) { + int yy = yReal | y; + res.add(new BlockPos((pos.x << 4) | x, yy, (pos.z << 4) | z)); + if (res.size() >= max || Math.abs(yy - playerY) < yLevelThreshold) { + return res; + } + } + } + } + } + } + return res; + } } From 66da826eab56381c2de9cb3b80b7a30af34dd778 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 15 Dec 2018 22:25:50 -0800 Subject: [PATCH 02/63] fix toxic cloud --- .../java/baritone/cache/WorldScanner.java | 45 ++++++------------- 1 file changed, 13 insertions(+), 32 deletions(-) diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index 30b67ded..3487a0c1 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -28,6 +28,7 @@ import net.minecraft.world.chunk.BlockStateContainer; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.storage.ExtendedBlockStorage; +import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -71,33 +72,7 @@ public enum WorldScanner implements IWorldScanner { continue; } allUnloaded = false; - ExtendedBlockStorage[] chunkInternalStorageArray = chunk.getBlockStorageArray(); - chunkX = chunkX << 4; - chunkZ = chunkZ << 4; - for (int y0 = 0; y0 < 16; y0++) { - ExtendedBlockStorage extendedblockstorage = chunkInternalStorageArray[y0]; - if (extendedblockstorage == null) { - continue; - } - int yReal = y0 << 4; - BlockStateContainer bsc = extendedblockstorage.getData(); - // the mapping of BlockStateContainer.getIndex from xyz to index is y << 8 | z << 4 | x; - // for better cache locality, iterate in that order - for (int y = 0; y < 16; y++) { - for (int z = 0; z < 16; z++) { - for (int x = 0; x < 16; x++) { - IBlockState state = bsc.get(x, y, z); - if (blocks.contains(state.getBlock())) { - int yy = yReal | y; - res.add(new BlockPos(chunkX | x, yy, chunkZ | z)); - if (Math.abs(yy - playerY) < yLevelThreshold) { - foundWithinY = true; - } - } - } - } - } - } + scanChunkInto(chunkX << 4, chunkZ << 4, chunk, blocks, res, max, yLevelThreshold, playerY); } } if ((allUnloaded && foundChunks) @@ -125,6 +100,11 @@ public enum WorldScanner implements IWorldScanner { } LinkedList res = new LinkedList<>(); + scanChunkInto(pos.x << 4, pos.z << 4, chunk, blocks, res, max, yLevelThreshold, playerY); + return res; + } + + public void scanChunkInto(int chunkX, int chunkZ, Chunk chunk, List search, Collection result, int max, int yLevelThreshold, int playerY) { ExtendedBlockStorage[] chunkInternalStorageArray = chunk.getBlockStorageArray(); for (int y0 = 0; y0 < 16; y0++) { ExtendedBlockStorage extendedblockstorage = chunkInternalStorageArray[y0]; @@ -133,21 +113,22 @@ public enum WorldScanner implements IWorldScanner { } int yReal = y0 << 4; BlockStateContainer bsc = extendedblockstorage.getData(); + // the mapping of BlockStateContainer.getIndex from xyz to index is y << 8 | z << 4 | x; + // for better cache locality, iterate in that order for (int y = 0; y < 16; y++) { for (int z = 0; z < 16; z++) { for (int x = 0; x < 16; x++) { IBlockState state = bsc.get(x, y, z); - if (blocks.contains(state.getBlock())) { + if (search.contains(state.getBlock())) { int yy = yReal | y; - res.add(new BlockPos((pos.x << 4) | x, yy, (pos.z << 4) | z)); - if (res.size() >= max || Math.abs(yy - playerY) < yLevelThreshold) { - return res; + result.add(new BlockPos(chunkX | x, yy, chunkZ | z)); + if (result.size() >= max || Math.abs(yy - playerY) < yLevelThreshold) { + return; } } } } } } - return res; } } From cc04342358b70c5c5e6aab63b31363387073b920 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 16 Dec 2018 16:26:48 -0800 Subject: [PATCH 03/63] epic performance --- src/main/java/baritone/cache/WorldScanner.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index 3487a0c1..efed8af0 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -28,9 +28,9 @@ import net.minecraft.world.chunk.BlockStateContainer; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.storage.ExtendedBlockStorage; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.LinkedList; import java.util.List; public enum WorldScanner implements IWorldScanner { @@ -42,7 +42,7 @@ public enum WorldScanner implements IWorldScanner { if (blocks.contains(null)) { throw new IllegalStateException("Invalid block name should have been caught earlier: " + blocks.toString()); } - LinkedList res = new LinkedList<>(); + ArrayList res = new ArrayList<>(); if (blocks.isEmpty()) { return res; } @@ -99,7 +99,7 @@ public enum WorldScanner implements IWorldScanner { return Collections.emptyList(); } - LinkedList res = new LinkedList<>(); + ArrayList res = new ArrayList<>(); scanChunkInto(pos.x << 4, pos.z << 4, chunk, blocks, res, max, yLevelThreshold, playerY); return res; } From fe4290b2183a9ed87270b112495d6dc64489ecbf Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 16 Dec 2018 20:14:07 -0800 Subject: [PATCH 04/63] little fix --- src/main/java/baritone/process/MineProcess.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 9347dba2..2d5d18be 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -39,7 +39,6 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraft.world.chunk.EmptyChunk; import java.util.*; import java.util.stream.Collectors; @@ -255,7 +254,8 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro .distinct() // remove any that are within loaded chunks that aren't actually what we want - .filter(pos -> ctx.world().getChunk(pos) instanceof EmptyChunk || mining.contains(ctx.getBlock(pos.getX(), pos.getY(), pos.getZ())) || dropped.contains(pos)) + + .filter(pos -> !ctx.bsi().isLoaded(pos.getX(), pos.getZ()) || mining.contains(ctx.getBlock(pos.getX(), pos.getY(), pos.getZ())) || dropped.contains(pos)) // remove any that are implausible to mine (encased in bedrock, or touching lava) .filter(pos -> MineProcess.plausibleToBreak(ctx.bsi(), pos)) From 90d0fb7efbaa9172f9096f6a5a935f025b006801 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 17 Dec 2018 18:27:31 -0800 Subject: [PATCH 05/63] simplify check --- 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 84ab0748..4c9c1263 100644 --- a/src/main/java/baritone/process/FollowProcess.java +++ b/src/main/java/baritone/process/FollowProcess.java @@ -79,7 +79,7 @@ public final class FollowProcess extends BaritoneProcessHelper implements IFollo if (entity.equals(ctx.player())) { return false; } - return ctx.world().loadedEntityList.contains(entity) || ctx.world().playerEntities.contains(entity); + return ctx.world().loadedEntityList.contains(entity); } private void scanWorld() { From a0ab2a8ba7559cc3648a8135c25b18d6de91dfde Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 18 Dec 2018 16:16:32 -0800 Subject: [PATCH 06/63] timing meme --- src/main/java/baritone/pathing/calc/AStarPathFinder.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/pathing/calc/AStarPathFinder.java b/src/main/java/baritone/pathing/calc/AStarPathFinder.java index bbc0738a..52837dd8 100644 --- a/src/main/java/baritone/pathing/calc/AStarPathFinder.java +++ b/src/main/java/baritone/pathing/calc/AStarPathFinder.java @@ -77,12 +77,15 @@ public final class AStarPathFinder extends AbstractNodeCostSearch implements Hel int numMovementsConsidered = 0; int numEmptyChunk = 0; boolean favoring = !favored.isEmpty(); + int timeCheckInterval = 1 << 6; int pathingMaxChunkBorderFetch = Baritone.settings().pathingMaxChunkBorderFetch.get(); // grab all settings beforehand so that changing settings during pathing doesn't cause a crash or unpredictable behavior boolean minimumImprovementRepropagation = Baritone.settings().minimumImprovementRepropagation.get(); while (!openSet.isEmpty() && numEmptyChunk < pathingMaxChunkBorderFetch && !cancelRequested) { - long now = System.nanoTime() / 1000000L; - if (now - failureTimeoutTime >= 0 || (!failing && now - primaryTimeoutTime >= 0)) { - break; + if ((numNodes & (timeCheckInterval - 1)) == 0) { // only call this once every 64 nodes (about half a millisecond) + long now = System.nanoTime() / 1000000L; // since nanoTime is slow on windows (takes many microseconds) + if (now - failureTimeoutTime >= 0 || (!failing && now - primaryTimeoutTime >= 0)) { + break; + } } if (slowPath) { try { From 807d6a0cf4fc5207fdde512730c9e02e3e85edab Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 18 Dec 2018 16:22:54 -0800 Subject: [PATCH 07/63] crucial performance optimization --- .../java/baritone/pathing/calc/openset/BinaryHeapOpenSet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/calc/openset/BinaryHeapOpenSet.java b/src/main/java/baritone/pathing/calc/openset/BinaryHeapOpenSet.java index 6758a30a..33f077b9 100644 --- a/src/main/java/baritone/pathing/calc/openset/BinaryHeapOpenSet.java +++ b/src/main/java/baritone/pathing/calc/openset/BinaryHeapOpenSet.java @@ -59,7 +59,7 @@ public final class BinaryHeapOpenSet implements IOpenSet { @Override public final void insert(PathNode value) { if (size >= array.length - 1) { - array = Arrays.copyOf(array, array.length * 2); + array = Arrays.copyOf(array, array.length << 1); } size++; value.heapPosition = size; From 18f5c129a48e873a4ef2d7ed26f19365aa9fd3fc Mon Sep 17 00:00:00 2001 From: Brady Date: Fri, 14 Dec 2018 17:24:07 -0600 Subject: [PATCH 08/63] Remove dependency for PlayerControllerMP implementation --- .../baritone/api/utils/IPlayerContext.java | 3 +- .../baritone/api/utils/IPlayerController.java | 43 ++++++++++++++ .../utils/player/PrimaryPlayerContext.java | 5 +- .../utils/player/PrimaryPlayerController.java | 58 +++++++++++++++++++ 4 files changed, 105 insertions(+), 4 deletions(-) create mode 100644 src/api/java/baritone/api/utils/IPlayerController.java create mode 100644 src/main/java/baritone/utils/player/PrimaryPlayerController.java diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index cd80a7d9..83040ab5 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -20,7 +20,6 @@ package baritone.api.utils; import baritone.api.cache.IWorldData; import net.minecraft.block.BlockSlab; import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.multiplayer.PlayerControllerMP; import net.minecraft.entity.Entity; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; @@ -37,7 +36,7 @@ public interface IPlayerContext { EntityPlayerSP player(); - PlayerControllerMP playerController(); + IPlayerController playerController(); World world(); diff --git a/src/api/java/baritone/api/utils/IPlayerController.java b/src/api/java/baritone/api/utils/IPlayerController.java new file mode 100644 index 00000000..bf987a06 --- /dev/null +++ b/src/api/java/baritone/api/utils/IPlayerController.java @@ -0,0 +1,43 @@ +/* + * 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.utils; + +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.GameType; + +/** + * @author Brady + * @since 12/14/2018 + */ +public interface IPlayerController { + + boolean clickBlock(BlockPos pos, EnumFacing side); + + boolean onPlayerDamageBlock(BlockPos pos, EnumFacing side); + + void resetBlockRemoving(); + + void setGameType(GameType type); + + GameType getGameType(); + + default double getBlockReachDistance() { + return this.getGameType().isCreative() ? 5.0F : 4.5F; + } +} diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java index 4247e92b..05b1f80a 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java @@ -20,6 +20,7 @@ package baritone.utils.player; import baritone.api.BaritoneAPI; import baritone.api.cache.IWorldData; import baritone.api.utils.IPlayerContext; +import baritone.api.utils.IPlayerController; import baritone.utils.Helper; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.multiplayer.PlayerControllerMP; @@ -42,8 +43,8 @@ public enum PrimaryPlayerContext implements IPlayerContext, Helper { } @Override - public PlayerControllerMP playerController() { - return mc.playerController; + public IPlayerController playerController() { + return PrimaryPlayerController.INSTANCE; } @Override diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/PrimaryPlayerController.java new file mode 100644 index 00000000..750d578c --- /dev/null +++ b/src/main/java/baritone/utils/player/PrimaryPlayerController.java @@ -0,0 +1,58 @@ +/* + * 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.utils.player; + +import baritone.api.utils.IPlayerController; +import baritone.utils.Helper; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.GameType; + +/** + * @author Brady + * @since 12/14/2018 + */ +public enum PrimaryPlayerController implements IPlayerController, Helper { + + INSTANCE; + + @Override + public boolean clickBlock(BlockPos pos, EnumFacing side) { + return mc.playerController.clickBlock(pos, side); + } + + @Override + public boolean onPlayerDamageBlock(BlockPos pos, EnumFacing side) { + return mc.playerController.onPlayerDamageBlock(pos, side); + } + + @Override + public void resetBlockRemoving() { + mc.playerController.resetBlockRemoving(); + } + + @Override + public void setGameType(GameType type) { + mc.playerController.setGameType(type); + } + + @Override + public GameType getGameType() { + return mc.playerController.getCurrentGameType(); + } +} From 764e8d7daa7780e0c02a5f201250c0793203b0dc Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 18 Dec 2018 19:27:45 -0600 Subject: [PATCH 09/63] Add windowClick to IPlayerController --- src/api/java/baritone/api/utils/IPlayerController.java | 5 +++++ .../baritone/utils/player/PrimaryPlayerController.java | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/src/api/java/baritone/api/utils/IPlayerController.java b/src/api/java/baritone/api/utils/IPlayerController.java index bf987a06..8ecc7e11 100644 --- a/src/api/java/baritone/api/utils/IPlayerController.java +++ b/src/api/java/baritone/api/utils/IPlayerController.java @@ -17,6 +17,9 @@ package baritone.api.utils; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ClickType; +import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.world.GameType; @@ -33,6 +36,8 @@ public interface IPlayerController { void resetBlockRemoving(); + ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, EntityPlayer player); + void setGameType(GameType type); GameType getGameType(); diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/PrimaryPlayerController.java index 750d578c..fa4ced9d 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerController.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerController.java @@ -19,6 +19,9 @@ package baritone.utils.player; import baritone.api.utils.IPlayerController; import baritone.utils.Helper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ClickType; +import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.world.GameType; @@ -46,6 +49,11 @@ public enum PrimaryPlayerController implements IPlayerController, Helper { mc.playerController.resetBlockRemoving(); } + @Override + public ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, EntityPlayer player) { + return mc.playerController.windowClick(windowId, slotId, mouseButton, type, player); + } + @Override public void setGameType(GameType type) { mc.playerController.setGameType(type); From 9703de86d31cdda7a9ef2de083426ab3205798dd Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 15 Dec 2018 12:27:19 -0600 Subject: [PATCH 10/63] Fix NullPointerException --- src/main/java/baritone/utils/BlockBreakHelper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/BlockBreakHelper.java b/src/main/java/baritone/utils/BlockBreakHelper.java index d4d03f67..9f5b970d 100644 --- a/src/main/java/baritone/utils/BlockBreakHelper.java +++ b/src/main/java/baritone/utils/BlockBreakHelper.java @@ -55,7 +55,8 @@ public final class BlockBreakHelper implements Helper { } public void stopBreakingBlock() { - if (playerContext.playerController() != null) { + // The player controller will never be null, but the player can be + if (playerContext.player() != null) { playerContext.playerController().resetBlockRemoving(); } lastBlock = null; From 0ef3386ebf8cfb4a317597a23922115cefbd52b1 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 19 Dec 2018 12:47:22 -0800 Subject: [PATCH 11/63] appease codacy --- src/main/java/baritone/behavior/InventoryBehavior.java | 5 +---- src/main/java/baritone/behavior/MemoryBehavior.java | 8 +++----- src/main/java/baritone/cache/ContainerMemory.java | 3 ++- src/main/java/baritone/utils/pathing/Favoring.java | 6 +----- 4 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index b6d7e1bd..a49cbb7d 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -55,10 +55,7 @@ public class InventoryBehavior extends Behavior { } private void swapWithHotBar(int inInventory, int inHotbar) { - if (inInventory < 9) { - inInventory += 36; - } - ctx.playerController().windowClick(ctx.player().inventoryContainer.windowId, inInventory, inHotbar, ClickType.SWAP, ctx.player()); + ctx.playerController().windowClick(ctx.player().inventoryContainer.windowId, inInventory < 9 ? inInventory + 36 : inInventory, inHotbar, ClickType.SWAP, ctx.player()); } private int firstValidThrowaway() { // TODO offhand idk diff --git a/src/main/java/baritone/behavior/MemoryBehavior.java b/src/main/java/baritone/behavior/MemoryBehavior.java index 06627d7e..34b266b3 100644 --- a/src/main/java/baritone/behavior/MemoryBehavior.java +++ b/src/main/java/baritone/behavior/MemoryBehavior.java @@ -116,12 +116,10 @@ public final class MemoryBehavior extends Behavior { System.out.println("Received packet " + packet.getGuiId() + " " + packet.getEntityId() + " " + packet.getSlotCount() + " " + packet.getWindowId()); System.out.println(packet.getWindowTitle()); - if (packet.getWindowTitle() instanceof TextComponentTranslation) { + if (packet.getWindowTitle() instanceof TextComponentTranslation && ((TextComponentTranslation) packet.getWindowTitle()).getKey().equals("container.enderchest")) { // title is not customized (i.e. this isn't just a renamed shulker) - if (((TextComponentTranslation) packet.getWindowTitle()).getKey().equals("container.enderchest")) { - enderChestWindowId = packet.getWindowId(); - return; - } + enderChestWindowId = packet.getWindowId(); + return; } futureInventories.stream() .filter(i -> i.type.equals(packet.getGuiId()) && i.slots == packet.getSlotCount()) diff --git a/src/main/java/baritone/cache/ContainerMemory.java b/src/main/java/baritone/cache/ContainerMemory.java index ae54e157..f2b69e5c 100644 --- a/src/main/java/baritone/cache/ContainerMemory.java +++ b/src/main/java/baritone/cache/ContainerMemory.java @@ -123,7 +123,8 @@ public class ContainerMemory implements IContainerMemory { return out.array(); } - public static PacketBuffer writeItemStacks(List write, PacketBuffer out) { + public static PacketBuffer writeItemStacks(List write, PacketBuffer out2) { + PacketBuffer out = out2; // avoid reassigning an argument LOL out = new PacketBuffer(out.writeInt(write.size())); for (ItemStack stack : write) { out = out.writeItemStack(stack); diff --git a/src/main/java/baritone/utils/pathing/Favoring.java b/src/main/java/baritone/utils/pathing/Favoring.java index de80f442..7ffe49ff 100644 --- a/src/main/java/baritone/utils/pathing/Favoring.java +++ b/src/main/java/baritone/utils/pathing/Favoring.java @@ -23,16 +23,12 @@ import baritone.api.utils.BetterBlockPos; import baritone.api.utils.IPlayerContext; import it.unimi.dsi.fastutil.longs.Long2DoubleOpenHashMap; -import java.util.List; - public final class Favoring { - private List avoidances; private final Long2DoubleOpenHashMap favorings; public Favoring(IPlayerContext ctx, IPath previous) { this(previous); - avoidances = Avoidance.create(ctx); - for (Avoidance avoid : avoidances) { + for (Avoidance avoid : Avoidance.create(ctx)) { avoid.applySpherical(favorings); } System.out.println("Favoring size: " + favorings.size()); From d41aa5f9ae0ab662dc740e11e80f509a8cf12d1e Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 19 Dec 2018 12:59:07 -0800 Subject: [PATCH 12/63] epicly fast --- .../java/baritone/pathing/calc/AStarPathFinder.java | 5 +---- src/main/java/baritone/pathing/calc/PathNode.java | 12 +++++------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/main/java/baritone/pathing/calc/AStarPathFinder.java b/src/main/java/baritone/pathing/calc/AStarPathFinder.java index 52837dd8..59e52129 100644 --- a/src/main/java/baritone/pathing/calc/AStarPathFinder.java +++ b/src/main/java/baritone/pathing/calc/AStarPathFinder.java @@ -55,7 +55,6 @@ public final class AStarPathFinder extends AbstractNodeCostSearch implements Hel startNode.combinedCost = startNode.estimatedCostToGoal; BinaryHeapOpenSet openSet = new BinaryHeapOpenSet(); openSet.insert(startNode); - startNode.isOpen = true; bestSoFar = new PathNode[COEFFICIENTS.length];//keep track of the best node by the metric of (estimatedCostToGoal + cost / COEFFICIENTS[i]) double[] bestHeuristicSoFar = new double[COEFFICIENTS.length]; for (int i = 0; i < bestHeuristicSoFar.length; i++) { @@ -94,7 +93,6 @@ public final class AStarPathFinder extends AbstractNodeCostSearch implements Hel } } PathNode currentNode = openSet.removeLowest(); - currentNode.isOpen = false; mostRecentConsidered = currentNode; numNodes++; if (goal.isInGoal(currentNode.x, currentNode.y, currentNode.z)) { @@ -156,10 +154,9 @@ public final class AStarPathFinder extends AbstractNodeCostSearch implements Hel neighbor.previous = currentNode; neighbor.cost = tentativeCost; neighbor.combinedCost = tentativeCost + neighbor.estimatedCostToGoal; - if (neighbor.isOpen) { + if (neighbor.isOpen()) { openSet.update(neighbor); } else { - neighbor.isOpen = true; openSet.insert(neighbor);//dont double count, dont insert into open set if it's already there } for (int i = 0; i < bestSoFar.length; i++) { diff --git a/src/main/java/baritone/pathing/calc/PathNode.java b/src/main/java/baritone/pathing/calc/PathNode.java index dc2dbf90..2b693338 100644 --- a/src/main/java/baritone/pathing/calc/PathNode.java +++ b/src/main/java/baritone/pathing/calc/PathNode.java @@ -58,12 +58,6 @@ public final class PathNode { */ public PathNode previous; - /** - * Is this a member of the open set in A*? (only used during pathfinding) - * Instead of doing a costly member check in the open set, cache membership in each node individually too. - */ - public boolean isOpen; - /** * Where is this node in the array flattenization of the binary heap? Needed for decrease-key operations. */ @@ -76,12 +70,16 @@ public final class PathNode { if (Double.isNaN(estimatedCostToGoal)) { throw new IllegalStateException(goal + " calculated implausible heuristic"); } - this.isOpen = false; + this.heapPosition = -1; this.x = x; this.y = y; this.z = z; } + public boolean isOpen() { + return heapPosition != -1; + } + /** * TODO: Possibly reimplement hashCode and equals. They are necessary for this class to function but they could be done better * From 77938a77e8dbbc4266a92fbec7d27399c4a1254c Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 19 Dec 2018 14:37:11 -0800 Subject: [PATCH 13/63] add jump penalty --- src/api/java/baritone/api/Settings.java | 5 +++++ .../java/baritone/pathing/movement/CalculationContext.java | 6 ++++++ .../baritone/pathing/movement/movements/MovementAscend.java | 5 ++++- .../pathing/movement/movements/MovementParkour.java | 4 ++-- .../baritone/pathing/movement/movements/MovementPillar.java | 2 +- 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index c2d1e3c0..8528c921 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -68,6 +68,11 @@ public class Settings { */ public Setting blockBreakAdditionalPenalty = new Setting<>(2D); + /** + * Additional penalty for hitting the space bar (ascend, pillar, or parkour) beacuse it uses hunger + */ + public Setting jumpPenalty = new Setting<>(2D); + /** * Allow Baritone to fall arbitrary distances and place a water bucket beneath it. * Reliability: questionable. diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 5db455c0..e81ed6c8 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -61,6 +61,7 @@ public class CalculationContext { private final int maxFallHeightBucket; private final double waterWalkSpeed; private final double breakBlockAdditionalCost; + private final double jumpPenalty; private final BetterWorldBorder worldBorder; public CalculationContext(IBaritone baritone) { @@ -93,6 +94,7 @@ public class CalculationContext { float mult = depth / 3.0F; this.waterWalkSpeed = ActionCosts.WALK_ONE_IN_WATER_COST * (1 - mult) + ActionCosts.WALK_ONE_BLOCK_COST * mult; this.breakBlockAdditionalCost = Baritone.settings().blockBreakAdditionalPenalty.get(); + this.jumpPenalty = Baritone.settings().jumpPenalty.get(); // why cache these things here, why not let the movements just get directly from settings? // because if some movements are calculated one way and others are calculated another way, // then you get a wildly inconsistent path that isn't optimal for either scenario. @@ -212,4 +214,8 @@ public class CalculationContext { public double breakBlockAdditionalCost() { return breakBlockAdditionalCost; } + + public double jumpPenalty() { + return jumpPenalty; + } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 735c94b8..609fb102 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -115,15 +115,18 @@ public class MovementAscend extends Movement { if (jumpingToBottomSlab) { if (jumpingFromBottomSlab) { walk = Math.max(JUMP_ONE_BLOCK_COST, WALK_ONE_BLOCK_COST); // we hit space immediately on entering this action + walk += context.jumpPenalty(); } else { walk = WALK_ONE_BLOCK_COST; // we don't hit space we just walk into the slab } } else { + // jumpingFromBottomSlab must be false if (toPlace.getBlock() == Blocks.SOUL_SAND) { walk = WALK_ONE_OVER_SOUL_SAND_COST; } else { - walk = WALK_ONE_BLOCK_COST; + walk = Math.max(JUMP_ONE_BLOCK_COST, WALK_ONE_BLOCK_COST); } + walk += context.jumpPenalty(); } // cracks knuckles diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index ae87aa06..795693db 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -115,7 +115,7 @@ public class MovementParkour extends Movement { res.x = x + xDiff * i; res.y = y; res.z = z + zDiff * i; - res.cost = costFromJumpDistance(i); + res.cost = costFromJumpDistance(i) + context.jumpPenalty(); return; } } @@ -145,7 +145,7 @@ public class MovementParkour extends Movement { res.x = destX; res.y = y; res.z = destZ; - res.cost = costFromJumpDistance(4) + context.placeBlockCost(); + res.cost = costFromJumpDistance(4) + context.placeBlockCost() + context.jumpPenalty(); return; } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index 0e6b023e..3ca41464 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -112,7 +112,7 @@ public class MovementPillar extends Movement { if (ladder) { return LADDER_UP_ONE_COST + hardness * 5; } else { - return JUMP_ONE_BLOCK_COST + context.placeBlockCost() + hardness; + return JUMP_ONE_BLOCK_COST + context.placeBlockCost() + context.jumpPenalty() + hardness; } } From 57f238de7d6abd5b3e3ab4a39f1b6d1c02dcbfad Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 19 Dec 2018 17:02:09 -0800 Subject: [PATCH 14/63] that was a big screwup --- src/main/java/baritone/process/MineProcess.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 2d5d18be..1a22b9c0 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -255,7 +255,7 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro // remove any that are within loaded chunks that aren't actually what we want - .filter(pos -> !ctx.bsi().isLoaded(pos.getX(), pos.getZ()) || mining.contains(ctx.getBlock(pos.getX(), pos.getY(), pos.getZ())) || dropped.contains(pos)) + .filter(pos -> !ctx.bsi().worldContainsLoadedChunk(pos.getX(), pos.getZ()) || mining.contains(ctx.getBlock(pos.getX(), pos.getY(), pos.getZ())) || dropped.contains(pos)) // remove any that are implausible to mine (encased in bedrock, or touching lava) .filter(pos -> MineProcess.plausibleToBreak(ctx.bsi(), pos)) From 02478ee8878fbb2e7d81baf905d94ec6233127a8 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 19 Dec 2018 21:30:58 -0800 Subject: [PATCH 15/63] wtF --- src/main/java/baritone/cache/WorldScanner.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/cache/WorldScanner.java b/src/main/java/baritone/cache/WorldScanner.java index efed8af0..463dd22f 100644 --- a/src/main/java/baritone/cache/WorldScanner.java +++ b/src/main/java/baritone/cache/WorldScanner.java @@ -122,7 +122,7 @@ public enum WorldScanner implements IWorldScanner { if (search.contains(state.getBlock())) { int yy = yReal | y; result.add(new BlockPos(chunkX | x, yy, chunkZ | z)); - if (result.size() >= max || Math.abs(yy - playerY) < yLevelThreshold) { + if (result.size() >= max && Math.abs(yy - playerY) < yLevelThreshold) { return; } } From ae9ab03e512649f93c55c0ecce934a2b36239ddd Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 19 Dec 2018 22:01:47 -0800 Subject: [PATCH 16/63] walk on water hunger penalty --- src/api/java/baritone/api/Settings.java | 5 +++++ .../java/baritone/pathing/movement/CalculationContext.java | 6 ++++++ .../pathing/movement/movements/MovementDiagonal.java | 2 ++ .../pathing/movement/movements/MovementTraverse.java | 2 ++ 4 files changed, 15 insertions(+) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 8528c921..59d6c217 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -73,6 +73,11 @@ public class Settings { */ public Setting jumpPenalty = new Setting<>(2D); + /** + * Walking on water uses up hunger really quick, so penalize it + */ + public Setting walkOnWaterOnePenalty = new Setting<>(5D); + /** * Allow Baritone to fall arbitrary distances and place a water bucket beneath it. * Reliability: questionable. diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index e81ed6c8..5d6fe81b 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -62,6 +62,7 @@ public class CalculationContext { private final double waterWalkSpeed; private final double breakBlockAdditionalCost; private final double jumpPenalty; + private final double walkOnWaterOnePenalty; private final BetterWorldBorder worldBorder; public CalculationContext(IBaritone baritone) { @@ -95,6 +96,7 @@ public class CalculationContext { this.waterWalkSpeed = ActionCosts.WALK_ONE_IN_WATER_COST * (1 - mult) + ActionCosts.WALK_ONE_BLOCK_COST * mult; this.breakBlockAdditionalCost = Baritone.settings().blockBreakAdditionalPenalty.get(); this.jumpPenalty = Baritone.settings().jumpPenalty.get(); + this.walkOnWaterOnePenalty = Baritone.settings().walkOnWaterOnePenalty.get(); // why cache these things here, why not let the movements just get directly from settings? // because if some movements are calculated one way and others are calculated another way, // then you get a wildly inconsistent path that isn't optimal for either scenario. @@ -218,4 +220,8 @@ public class CalculationContext { public double jumpPenalty() { return jumpPenalty; } + + public double walkOnWaterOnePenalty() { + return walkOnWaterOnePenalty; + } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index f53c5832..2b1e77af 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -80,6 +80,8 @@ public class MovementDiagonal extends Movement { // For either possible soul sand, that affects half of our walking if (destWalkOn.getBlock() == Blocks.SOUL_SAND) { multiplier += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; + } else if (destWalkOn.getBlock() == Blocks.WATER) { + multiplier += context.walkOnWaterOnePenalty() * SQRT_2; } Block fromDown = context.get(x, y - 1, z).getBlock(); if (fromDown == Blocks.LADDER || fromDown == Blocks.VINE) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 59720b91..2edfe78d 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -75,6 +75,8 @@ public class MovementTraverse extends Movement { } else { if (destOn.getBlock() == Blocks.SOUL_SAND) { WC += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; + } else if (destOn.getBlock() == Blocks.WATER) { + WC += context.walkOnWaterOnePenalty(); } if (srcDown == Blocks.SOUL_SAND) { WC += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; From 8a4f48f08d8059190122a9549ab1430e6cfa3ae1 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 20 Dec 2018 21:06:56 -0800 Subject: [PATCH 17/63] diagonal descend option --- src/api/java/baritone/api/Settings.java | 13 ++++++++++--- .../pathing/movement/CalculationContext.java | 6 ++++++ .../movement/movements/MovementDiagonal.java | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 59d6c217..9df80d2f 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -111,6 +111,15 @@ public class Settings { */ public Setting allowJumpAt256 = new Setting<>(false); + /** + * Allow descending diagonally + *

+ * Safer than allowParkour yet still slightly unsafe, can make contact with unchecked adjacent blocks, so it's unsafe in the nether. + *

+ * For a generic "take some risks" mode I'd turn on this one, parkour, and parkour place. + */ + public Setting allowDiagonalDescend = new Setting<>(false); + /** * Blocks that Baritone is allowed to place (as throwaway, for sneak bridging, pillaring, etc.) */ @@ -163,10 +172,8 @@ public class Settings { * metric gets better and better with each block, instead of slightly worse. *

* Finding the optimal path is worth it, so it's the default. - *

- * This value is an expression instead of a literal so that it's exactly equal to SPRINT_ONE_BLOCK_COST defined in ActionCosts.java */ - public Setting costHeuristic = new Setting<>(20 / 5.612); + public Setting costHeuristic = new Setting<>(3.563); // a bunch of obscure internal A* settings that you probably don't want to change /** diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 5d6fe81b..e2485be7 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -57,6 +57,7 @@ public class CalculationContext { private final boolean allowParkourPlace; private final boolean allowJumpAt256; private final boolean assumeWalkOnWater; + private final boolean allowDiagonalDescend; private final int maxFallHeightNoWater; private final int maxFallHeightBucket; private final double waterWalkSpeed; @@ -86,6 +87,7 @@ public class CalculationContext { this.allowParkourPlace = Baritone.settings().allowParkourPlace.get(); this.allowJumpAt256 = Baritone.settings().allowJumpAt256.get(); this.assumeWalkOnWater = Baritone.settings().assumeWalkOnWater.get(); + this.allowDiagonalDescend = Baritone.settings().allowDiagonalDescend.get(); this.maxFallHeightNoWater = Baritone.settings().maxFallHeightNoWater.get(); this.maxFallHeightBucket = Baritone.settings().maxFallHeightBucket.get(); int depth = EnchantmentHelper.getDepthStriderModifier(player); @@ -201,6 +203,10 @@ public class CalculationContext { return assumeWalkOnWater; } + public boolean allowDiagonalDescend() { + return allowDiagonalDescend; + } + public int maxFallHeightNoWater() { return maxFallHeightNoWater; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index 2b1e77af..3145f253 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -72,7 +72,7 @@ public class MovementDiagonal extends Movement { boolean descend = false; if (!MovementHelper.canWalkOn(context.bsi(), destX, y - 1, destZ, destWalkOn)) { descend = true; - if (!MovementHelper.canWalkOn(context.bsi(), destX, y - 2, destZ) || !MovementHelper.canWalkThrough(context.bsi(), destX, y - 1, destZ, destWalkOn)) { + if (!context.allowDiagonalDescend() || !MovementHelper.canWalkOn(context.bsi(), destX, y - 2, destZ) || !MovementHelper.canWalkThrough(context.bsi(), destX, y - 1, destZ, destWalkOn)) { return; } } From b9b25e7e6b6be61da1e76bb0df8f5df0c3de88c4 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 20 Dec 2018 21:22:18 -0800 Subject: [PATCH 18/63] no more stupid wrapper getters --- .../baritone/gradle/util/MappingType.java | 2 +- .../baritone/gradle/util/ReobfWrapper.java | 2 +- .../baritone/behavior/MemoryBehavior.java | 2 +- .../baritone/behavior/PathingBehavior.java | 4 +- .../pathing/calc/AStarPathFinder.java | 2 +- .../pathing/movement/CalculationContext.java | 134 ++++-------------- .../baritone/pathing/movement/Movement.java | 3 +- .../pathing/movement/MovementHelper.java | 8 +- .../movement/movements/MovementAscend.java | 14 +- .../movement/movements/MovementDescend.java | 18 +-- .../movement/movements/MovementDiagonal.java | 12 +- .../movement/movements/MovementDownward.java | 2 +- .../movement/movements/MovementParkour.java | 20 +-- .../movement/movements/MovementPillar.java | 10 +- .../movement/movements/MovementTraverse.java | 27 ++-- .../baritone/pathing/path/PathExecutor.java | 2 +- .../baritone/process/GetToBlockProcess.java | 2 +- .../java/baritone/process/MineProcess.java | 8 +- .../java/baritone/cache/CachedRegionTest.java | 2 +- .../pathing/calc/openset/OpenSetsTest.java | 2 +- .../pathing/goals/GoalGetToBlockTest.java | 2 +- .../pathing/movement/ActionCostsTest.java | 2 +- .../utils/pathing/BetterBlockPosTest.java | 2 +- .../utils/pathing/PathingBlockTypeTest.java | 2 +- 24 files changed, 101 insertions(+), 183 deletions(-) diff --git a/buildSrc/src/main/java/baritone/gradle/util/MappingType.java b/buildSrc/src/main/java/baritone/gradle/util/MappingType.java index 4a6c10ff..a3be9b49 100644 --- a/buildSrc/src/main/java/baritone/gradle/util/MappingType.java +++ b/buildSrc/src/main/java/baritone/gradle/util/MappingType.java @@ -26,4 +26,4 @@ public enum MappingType { SEARGE, NOTCH, CUSTOM // forgegradle -} \ No newline at end of file +} diff --git a/buildSrc/src/main/java/baritone/gradle/util/ReobfWrapper.java b/buildSrc/src/main/java/baritone/gradle/util/ReobfWrapper.java index 92f38a9f..f752cd94 100644 --- a/buildSrc/src/main/java/baritone/gradle/util/ReobfWrapper.java +++ b/buildSrc/src/main/java/baritone/gradle/util/ReobfWrapper.java @@ -60,4 +60,4 @@ public class ReobfWrapper { throw new IllegalStateException(ex); } } -} \ No newline at end of file +} diff --git a/src/main/java/baritone/behavior/MemoryBehavior.java b/src/main/java/baritone/behavior/MemoryBehavior.java index 34b266b3..49986018 100644 --- a/src/main/java/baritone/behavior/MemoryBehavior.java +++ b/src/main/java/baritone/behavior/MemoryBehavior.java @@ -175,7 +175,7 @@ public final class MemoryBehavior extends Behavior { } private BlockPos neighboringConnectedBlock(BlockPos in) { - BlockStateInterface bsi = new CalculationContext(baritone).bsi(); + BlockStateInterface bsi = new CalculationContext(baritone).bsi; Block block = bsi.get0(in).getBlock(); if (block != Blocks.TRAPPED_CHEST && block != Blocks.CHEST) { return null; // other things that have contents, but can be placed adjacent without combining diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 066a47d4..6f0cf32b 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -433,7 +433,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, Optional path = calcResult.getPath(); if (Baritone.settings().cutoffAtLoadBoundary.get()) { path = path.map(p -> { - IPath result = p.cutoffAtLoadedChunks(context.bsi()); + IPath result = p.cutoffAtLoadedChunks(context.bsi); if (result instanceof CutoffPath) { logDebug("Cutting off path at edge of loaded chunks"); @@ -499,7 +499,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, Goal transformed = goal; if (Baritone.settings().simplifyUnloadedYCoord.get() && goal instanceof IGoalRenderPos) { BlockPos pos = ((IGoalRenderPos) goal).getGoalPos(); - if (context.world().getChunk(pos) instanceof EmptyChunk) { + if (context.world.getChunk(pos) instanceof EmptyChunk) { transformed = new GoalXZ(pos.getX(), pos.getZ()); } } diff --git a/src/main/java/baritone/pathing/calc/AStarPathFinder.java b/src/main/java/baritone/pathing/calc/AStarPathFinder.java index 59e52129..6c62925e 100644 --- a/src/main/java/baritone/pathing/calc/AStarPathFinder.java +++ b/src/main/java/baritone/pathing/calc/AStarPathFinder.java @@ -63,7 +63,7 @@ public final class AStarPathFinder extends AbstractNodeCostSearch implements Hel } MutableMoveResult res = new MutableMoveResult(); Favoring favored = favoring; - BetterWorldBorder worldBorder = new BetterWorldBorder(calcContext.world().getWorldBorder()); + BetterWorldBorder worldBorder = new BetterWorldBorder(calcContext.world.getWorldBorder()); long startTime = System.nanoTime() / 1000000L; boolean slowPath = Baritone.settings().slowPath.get(); if (slowPath) { diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index e2485be7..725ab569 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -42,29 +42,29 @@ public class CalculationContext { private static final ItemStack STACK_BUCKET_WATER = new ItemStack(Items.WATER_BUCKET); - private final IBaritone baritone; - private final EntityPlayerSP player; - private final World world; - private final WorldData worldData; - private final BlockStateInterface bsi; - private final ToolSet toolSet; - private final boolean hasWaterBucket; - private final boolean hasThrowaway; - private final boolean canSprint; - private final double placeBlockCost; - private final boolean allowBreak; - private final boolean allowParkour; - private final boolean allowParkourPlace; - private final boolean allowJumpAt256; - private final boolean assumeWalkOnWater; - private final boolean allowDiagonalDescend; - private final int maxFallHeightNoWater; - private final int maxFallHeightBucket; - private final double waterWalkSpeed; - private final double breakBlockAdditionalCost; - private final double jumpPenalty; - private final double walkOnWaterOnePenalty; - private final BetterWorldBorder worldBorder; + public final IBaritone baritone; + public final EntityPlayerSP player; + public final World world; + public final WorldData worldData; + public final BlockStateInterface bsi; + public final ToolSet toolSet; + public final boolean hasWaterBucket; + public final boolean hasThrowaway; + public final boolean canSprint; + public final double placeBlockCost; + public final boolean allowBreak; + public final boolean allowParkour; + public final boolean allowParkourPlace; + public final boolean allowJumpAt256; + public final boolean assumeWalkOnWater; + public final boolean allowDiagonalDescend; + public final int maxFallHeightNoWater; + public final int maxFallHeightBucket; + public final double waterWalkSpeed; + public final double breakBlockAdditionalCost; + public final double jumpPenalty; + public final double walkOnWaterOnePenalty; + public final BetterWorldBorder worldBorder; public CalculationContext(IBaritone baritone) { this(baritone, false); @@ -126,7 +126,7 @@ public class CalculationContext { } public boolean canPlaceThrowawayAt(int x, int y, int z) { - if (!hasThrowaway()) { // only true if allowPlace is true, see constructor + if (!hasThrowaway) { // only true if allowPlace is true, see constructor return false; } if (isPossiblyProtected(x, y, z)) { @@ -136,7 +136,7 @@ public class CalculationContext { } public boolean canBreakAt(int x, int y, int z) { - if (!allowBreak()) { + if (!allowBreak) { return false; } return !isPossiblyProtected(x, y, z); @@ -146,88 +146,4 @@ public class CalculationContext { // TODO more protection logic here; see #220 return false; } - - public World world() { - return world; - } - - public EntityPlayerSP player() { - return player; - } - - public BlockStateInterface bsi() { - return bsi; - } - - public WorldData worldData() { - return worldData; - } - - public ToolSet getToolSet() { - return toolSet; - } - - public boolean hasWaterBucket() { - return hasWaterBucket; - } - - public boolean hasThrowaway() { - return hasThrowaway; - } - - public boolean canSprint() { - return canSprint; - } - - public double placeBlockCost() { - return placeBlockCost; - } - - public boolean allowBreak() { - return allowBreak; - } - - public boolean allowParkour() { - return allowParkour; - } - - public boolean allowParkourPlace() { - return allowParkourPlace; - } - - public boolean allowJumpAt256() { - return allowJumpAt256; - } - - public boolean assumeWalkOnWater() { - return assumeWalkOnWater; - } - - public boolean allowDiagonalDescend() { - return allowDiagonalDescend; - } - - public int maxFallHeightNoWater() { - return maxFallHeightNoWater; - } - - public int maxFallHeightBucket() { - return maxFallHeightBucket; - } - - public double waterWalkSpeed() { - return waterWalkSpeed; - } - - public double breakBlockAdditionalCost() { - return breakBlockAdditionalCost; - } - - public double jumpPenalty() { - return jumpPenalty; - } - - public double walkOnWaterOnePenalty() { - return walkOnWaterOnePenalty; - } } diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index 38cc329b..3754d831 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -26,7 +26,6 @@ import baritone.utils.BlockStateInterface; import net.minecraft.block.BlockLiquid; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.chunk.EmptyChunk; import java.util.ArrayList; import java.util.List; @@ -231,7 +230,7 @@ public abstract class Movement implements IMovement, MovementHelper { } public void checkLoadedChunk(CalculationContext context) { - calculatedWhileLoaded = !(context.world().getChunk(getDest()) instanceof EmptyChunk); + calculatedWhileLoaded = context.bsi.worldContainsLoadedChunk(dest.x, dest.z); } @Override diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index 5f9549b8..d07f05e7 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -340,24 +340,24 @@ public interface MovementHelper extends ActionCosts, Helper { static double getMiningDurationTicks(CalculationContext context, int x, int y, int z, IBlockState state, boolean includeFalling) { Block block = state.getBlock(); - if (!canWalkThrough(context.bsi(), x, y, z, state)) { + if (!canWalkThrough(context.bsi, x, y, z, state)) { if (!context.canBreakAt(x, y, z)) { return COST_INF; } - if (avoidBreaking(context.bsi(), x, y, z, state)) { + if (avoidBreaking(context.bsi, x, y, z, state)) { return COST_INF; } if (block instanceof BlockLiquid) { return COST_INF; } double m = Blocks.CRAFTING_TABLE.equals(block) ? 10 : 1; // TODO see if this is still necessary. it's from MineBot when we wanted to penalize breaking its crafting table - double strVsBlock = context.getToolSet().getStrVsBlock(state); + double strVsBlock = context.toolSet.getStrVsBlock(state); if (strVsBlock <= 0) { return COST_INF; } double result = m / strVsBlock; - result += context.breakBlockAdditionalCost(); + result += context.breakBlockAdditionalCost; if (includeFalling) { IBlockState above = context.get(x, y + 1, z); if (above.getBlock() instanceof BlockFalling) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 609fb102..083780ad 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -59,11 +59,11 @@ public class MovementAscend extends Movement { public static double cost(CalculationContext context, int x, int y, int z, int destX, int destZ) { IBlockState toPlace = context.get(destX, y, destZ); boolean hasToPlace = false; - if (!MovementHelper.canWalkOn(context.bsi(), destX, y, destZ, toPlace)) { + if (!MovementHelper.canWalkOn(context.bsi, destX, y, destZ, toPlace)) { if (!context.canPlaceThrowawayAt(destX, y, destZ)) { return COST_INF; } - if (!MovementHelper.isReplacable(destX, y, destZ, toPlace, context.bsi())) { + if (!MovementHelper.isReplacable(destX, y, destZ, toPlace, context.bsi)) { return COST_INF; } for (int i = 0; i < 5; i++) { @@ -73,7 +73,7 @@ public class MovementAscend extends Movement { if (againstX == x && againstZ == z) { // we might be able to backplace now, but it doesn't matter because it will have been broken by the time we'd need to use it continue; } - if (MovementHelper.canPlaceAgainst(context.bsi(), againstX, againstY, againstZ)) { + if (MovementHelper.canPlaceAgainst(context.bsi, againstX, againstY, againstZ)) { hasToPlace = true; break; } @@ -83,7 +83,7 @@ public class MovementAscend extends Movement { } } IBlockState srcUp2 = context.get(x, y + 2, z); // used lower down anyway - if (context.get(x, y + 3, z).getBlock() instanceof BlockFalling && (MovementHelper.canWalkThrough(context.bsi(), x, y + 1, z) || !(srcUp2.getBlock() instanceof BlockFalling))) {//it would fall on us and possibly suffocate us + if (context.get(x, y + 3, z).getBlock() instanceof BlockFalling && (MovementHelper.canWalkThrough(context.bsi, x, y + 1, z) || !(srcUp2.getBlock() instanceof BlockFalling))) {//it would fall on us and possibly suffocate us // HOWEVER, we assume that we're standing in the start position // that means that src and src.up(1) are both air // maybe they aren't now, but they will be by the time this starts @@ -115,7 +115,7 @@ public class MovementAscend extends Movement { if (jumpingToBottomSlab) { if (jumpingFromBottomSlab) { walk = Math.max(JUMP_ONE_BLOCK_COST, WALK_ONE_BLOCK_COST); // we hit space immediately on entering this action - walk += context.jumpPenalty(); + walk += context.jumpPenalty; } else { walk = WALK_ONE_BLOCK_COST; // we don't hit space we just walk into the slab } @@ -126,7 +126,7 @@ public class MovementAscend extends Movement { } else { walk = Math.max(JUMP_ONE_BLOCK_COST, WALK_ONE_BLOCK_COST); } - walk += context.jumpPenalty(); + walk += context.jumpPenalty; } // cracks knuckles @@ -134,7 +134,7 @@ public class MovementAscend extends Movement { double totalCost = 0; totalCost += walk; if (hasToPlace) { - totalCost += context.placeBlockCost(); + totalCost += context.placeBlockCost; } // start with srcUp2 since we already have its state // includeFalling isn't needed because of the falling check above -- if srcUp3 is falling we will have already exited with COST_INF if we'd actually have to break it diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index fc61a1eb..ba915ac6 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -93,7 +93,7 @@ public class MovementDescend extends Movement { //C, D, etc determine the length of the fall IBlockState below = context.get(destX, y - 2, destZ); - if (!MovementHelper.canWalkOn(context.bsi(), destX, y - 2, destZ, below)) { + if (!MovementHelper.canWalkOn(context.bsi, destX, y - 2, destZ, below)) { dynamicFallCost(context, x, y, z, destX, destZ, totalCost, below, res); return; } @@ -122,7 +122,7 @@ public class MovementDescend extends Movement { // and potentially replace the water we're going to fall into return false; } - if (!MovementHelper.canWalkThrough(context.bsi(), destX, y - 2, destZ, below) && below.getBlock() != Blocks.WATER) { + if (!MovementHelper.canWalkThrough(context.bsi, destX, y - 2, destZ, below) && below.getBlock() != Blocks.WATER) { return false; } double costSoFar = 0; @@ -140,13 +140,13 @@ public class MovementDescend extends Movement { if (ontoBlock.getBlock() == Blocks.WATER && context.getBlock(destX, newY + 1, destZ) != Blocks.WATERLILY) { // lilypads are canWalkThrough, but we can't end a fall that should be broken by water if it's covered by a lilypad // however, don't return impossible in the lilypad scenario, because we could still jump right on it (water that's below a lilypad is canWalkOn so it works) - if (context.assumeWalkOnWater()) { + if (context.assumeWalkOnWater) { return false; // TODO fix } if (MovementHelper.isFlowing(ontoBlock)) { return false; // TODO flowing check required here? } - if (!MovementHelper.canWalkOn(context.bsi(), destX, newY - 1, destZ)) { + if (!MovementHelper.canWalkOn(context.bsi, destX, newY - 1, destZ)) { // we could punch right through the water into something else return false; } @@ -168,23 +168,23 @@ public class MovementDescend extends Movement { effectiveStartHeight = newY; continue; } - if (MovementHelper.canWalkThrough(context.bsi(), destX, newY, destZ, ontoBlock)) { + if (MovementHelper.canWalkThrough(context.bsi, destX, newY, destZ, ontoBlock)) { continue; } - if (!MovementHelper.canWalkOn(context.bsi(), destX, newY, destZ, ontoBlock)) { + if (!MovementHelper.canWalkOn(context.bsi, destX, newY, destZ, ontoBlock)) { return false; } if (MovementHelper.isBottomSlab(ontoBlock)) { return false; // falling onto a half slab is really glitchy, and can cause more fall damage than we'd expect } - if (context.hasWaterBucket() && unprotectedFallHeight <= context.maxFallHeightBucket() + 1) { + if (context.hasWaterBucket && unprotectedFallHeight <= context.maxFallHeightBucket + 1) { res.x = destX; res.y = newY + 1;// this is the block we're falling onto, so dest is +1 res.z = destZ; - res.cost = tentativeCost + context.placeBlockCost(); + res.cost = tentativeCost + context.placeBlockCost; return true; } - if (unprotectedFallHeight <= context.maxFallHeightNoWater() + 1) { + if (unprotectedFallHeight <= context.maxFallHeightNoWater + 1) { // fallHeight = 4 means onto.up() is 3 blocks down, which is the max res.x = destX; res.y = newY + 1; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index 3145f253..f2aeebbb 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -65,14 +65,14 @@ public class MovementDiagonal extends Movement { public static void cost(CalculationContext context, int x, int y, int z, int destX, int destZ, MutableMoveResult res) { IBlockState destInto = context.get(destX, y, destZ); - if (!MovementHelper.canWalkThrough(context.bsi(), destX, y, destZ, destInto) || !MovementHelper.canWalkThrough(context.bsi(), destX, y + 1, destZ)) { + if (!MovementHelper.canWalkThrough(context.bsi, destX, y, destZ, destInto) || !MovementHelper.canWalkThrough(context.bsi, destX, y + 1, destZ)) { return; } IBlockState destWalkOn = context.get(destX, y - 1, destZ); boolean descend = false; - if (!MovementHelper.canWalkOn(context.bsi(), destX, y - 1, destZ, destWalkOn)) { + if (!MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destWalkOn)) { descend = true; - if (!context.allowDiagonalDescend() || !MovementHelper.canWalkOn(context.bsi(), destX, y - 2, destZ) || !MovementHelper.canWalkThrough(context.bsi(), destX, y - 1, destZ, destWalkOn)) { + if (!context.allowDiagonalDescend || !MovementHelper.canWalkOn(context.bsi, destX, y - 2, destZ) || !MovementHelper.canWalkThrough(context.bsi, destX, y - 1, destZ, destWalkOn)) { return; } } @@ -81,7 +81,7 @@ public class MovementDiagonal extends Movement { if (destWalkOn.getBlock() == Blocks.SOUL_SAND) { multiplier += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; } else if (destWalkOn.getBlock() == Blocks.WATER) { - multiplier += context.walkOnWaterOnePenalty() * SQRT_2; + multiplier += context.walkOnWaterOnePenalty * SQRT_2; } Block fromDown = context.get(x, y - 1, z).getBlock(); if (fromDown == Blocks.LADDER || fromDown == Blocks.VINE) { @@ -133,7 +133,7 @@ public class MovementDiagonal extends Movement { // Ignore previous multiplier // Whatever we were walking on (possibly soul sand) doesn't matter as we're actually floating on water // Not even touching the blocks below - multiplier = context.waterWalkSpeed(); + multiplier = context.waterWalkSpeed; water = true; } if (optionA != 0 || optionB != 0) { @@ -144,7 +144,7 @@ public class MovementDiagonal extends Movement { } } else { // only can sprint if not edging around - if (context.canSprint() && !water) { + if (context.canSprint && !water) { // If we aren't edging around anything, and we aren't in water // We can sprint =D // Don't check for soul sand, since we can sprint on that too diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java index 2855bceb..81b257e7 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java @@ -48,7 +48,7 @@ public class MovementDownward extends Movement { } public static double cost(CalculationContext context, int x, int y, int z) { - if (!MovementHelper.canWalkOn(context.bsi(), x, y - 2, z)) { + if (!MovementHelper.canWalkOn(context.bsi, x, y - 2, z)) { return COST_INF; } IBlockState down = context.get(x, y - 1, z); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index 795693db..5bc5b1db 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -60,10 +60,10 @@ public class MovementParkour extends Movement { } public static void cost(CalculationContext context, int x, int y, int z, EnumFacing dir, MutableMoveResult res) { - if (!context.allowParkour()) { + if (!context.allowParkour) { return; } - if (y == 256 && !context.allowJumpAt256()) { + if (y == 256 && !context.allowJumpAt256) { return; } @@ -74,7 +74,7 @@ public class MovementParkour extends Movement { return; } IBlockState adj = context.get(x + xDiff, y - 1, z + zDiff); - if (MovementHelper.canWalkOn(context.bsi(), x + xDiff, y - 1, z + zDiff, adj)) { // don't parkour if we could just traverse (for now) + if (MovementHelper.canWalkOn(context.bsi, x + xDiff, y - 1, z + zDiff, adj)) { // don't parkour if we could just traverse (for now) // second most common case -- we could just traverse not parkour return; } @@ -98,7 +98,7 @@ public class MovementParkour extends Movement { if (standingOn.getBlock() == Blocks.SOUL_SAND) { maxJump = 2; // 1 block gap } else { - if (context.canSprint()) { + if (context.canSprint) { maxJump = 4; } else { maxJump = 3; @@ -111,18 +111,18 @@ public class MovementParkour extends Movement { return; } } - if (MovementHelper.canWalkOn(context.bsi(), x + xDiff * i, y - 1, z + zDiff * i)) { + if (MovementHelper.canWalkOn(context.bsi, x + xDiff * i, y - 1, z + zDiff * i)) { res.x = x + xDiff * i; res.y = y; res.z = z + zDiff * i; - res.cost = costFromJumpDistance(i) + context.jumpPenalty(); + res.cost = costFromJumpDistance(i) + context.jumpPenalty; return; } } if (maxJump != 4) { return; } - if (!context.allowParkourPlace()) { + if (!context.allowParkourPlace) { return; } int destX = x + 4 * xDiff; @@ -131,7 +131,7 @@ public class MovementParkour extends Movement { return; } IBlockState toReplace = context.get(destX, y - 1, destZ); - if (!MovementHelper.isReplacable(destX, y - 1, destZ, toReplace, context.bsi())) { + if (!MovementHelper.isReplacable(destX, y - 1, destZ, toReplace, context.bsi)) { return; } for (int i = 0; i < 5; i++) { @@ -141,11 +141,11 @@ public class MovementParkour extends Movement { if (againstX == x + xDiff * 3 && againstZ == z + zDiff * 3) { // we can't turn around that fast continue; } - if (MovementHelper.canPlaceAgainst(context.bsi(), againstX, againstY, againstZ)) { + if (MovementHelper.canPlaceAgainst(context.bsi, againstX, againstY, againstZ)) { res.x = destX; res.y = y; res.z = destZ; - res.cost = costFromJumpDistance(4) + context.placeBlockCost() + context.jumpPenalty(); + res.cost = costFromJumpDistance(4) + context.placeBlockCost + context.jumpPenalty; return; } } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index 3ca41464..fafba24a 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -58,7 +58,7 @@ public class MovementPillar extends Movement { return COST_INF; // can't pillar up from a bottom slab onto a non ladder } } - if (from instanceof BlockVine && !hasAgainst(context, x, y, z)) { // TODO this vine can't be climbed, but we could place a pillar still since vines are replacable, no? perhaps the pillar jump would be impossible because of the slowdown actually. + if (from == Blocks.VINE && !hasAgainst(context, x, y, z)) { // TODO this vine can't be climbed, but we could place a pillar still since vines are replacable, no? perhaps the pillar jump would be impossible because of the slowdown actually. return COST_INF; } IBlockState toBreak = context.get(x, y + 2, z); @@ -76,7 +76,7 @@ public class MovementPillar extends Movement { if (!ladder && !context.canPlaceThrowawayAt(x, y, z)) { // we need to place a block where we started to jump on it return COST_INF; } - if (from instanceof BlockLiquid || (fromDown.getBlock() instanceof BlockLiquid && context.assumeWalkOnWater())) { + if (from instanceof BlockLiquid || (fromDown.getBlock() instanceof BlockLiquid && context.assumeWalkOnWater)) { // otherwise, if we're standing in water, we cannot pillar // if we're standing on water and assumeWalkOnWater is true, we cannot pillar // if we're standing on water and assumeWalkOnWater is false, we must have ascended to here, or sneak backplaced, so it is possible to pillar again @@ -112,7 +112,7 @@ public class MovementPillar extends Movement { if (ladder) { return LADDER_UP_ONE_COST + hardness * 5; } else { - return JUMP_ONE_BLOCK_COST + context.placeBlockCost() + context.jumpPenalty() + hardness; + return JUMP_ONE_BLOCK_COST + context.placeBlockCost + context.jumpPenalty + hardness; } } @@ -159,8 +159,8 @@ public class MovementPillar extends Movement { } return state; } - boolean ladder = fromDown.getBlock() instanceof BlockLadder || fromDown.getBlock() instanceof BlockVine; - boolean vine = fromDown.getBlock() instanceof BlockVine; + boolean ladder = fromDown.getBlock() == Blocks.LADDER || fromDown.getBlock() == Blocks.VINE; + boolean vine = fromDown.getBlock() == Blocks.VINE; Rotation rotation = RotationUtils.calcRotationFromVec3d(ctx.player().getPositionEyes(1.0F), VecUtils.getBlockPosCenter(positionToPlace), new Rotation(ctx.player().rotationYaw, ctx.player().rotationPitch)); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 2edfe78d..84e42358 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -30,7 +30,10 @@ import baritone.pathing.movement.Movement; import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; -import net.minecraft.block.*; +import net.minecraft.block.Block; +import net.minecraft.block.BlockDoor; +import net.minecraft.block.BlockFenceGate; +import net.minecraft.block.BlockSlab; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.util.EnumFacing; @@ -66,17 +69,17 @@ public class MovementTraverse extends Movement { IBlockState pb1 = context.get(destX, y, destZ); IBlockState destOn = context.get(destX, y - 1, destZ); Block srcDown = context.getBlock(x, y - 1, z); - if (MovementHelper.canWalkOn(context.bsi(), destX, y - 1, destZ, destOn)) {//this is a walk, not a bridge + if (MovementHelper.canWalkOn(context.bsi, destX, y - 1, destZ, destOn)) {//this is a walk, not a bridge double WC = WALK_ONE_BLOCK_COST; boolean water = false; if (MovementHelper.isWater(pb0.getBlock()) || MovementHelper.isWater(pb1.getBlock())) { - WC = context.waterWalkSpeed(); + WC = context.waterWalkSpeed; water = true; } else { if (destOn.getBlock() == Blocks.SOUL_SAND) { WC += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; } else if (destOn.getBlock() == Blocks.WATER) { - WC += context.walkOnWaterOnePenalty(); + WC += context.walkOnWaterOnePenalty; } if (srcDown == Blocks.SOUL_SAND) { WC += (WALK_ONE_OVER_SOUL_SAND_COST - WALK_ONE_BLOCK_COST) / 2; @@ -88,7 +91,7 @@ public class MovementTraverse extends Movement { } double hardness2 = MovementHelper.getMiningDurationTicks(context, destX, y + 1, destZ, pb0, true); // only include falling on the upper block to break if (hardness1 == 0 && hardness2 == 0) { - if (!water && context.canSprint()) { + if (!water && context.canSprint) { // If there's nothing in the way, and this isn't water, and we aren't sneak placing // We can sprint =D // Don't check for soul sand, since we can sprint on that too @@ -105,7 +108,7 @@ public class MovementTraverse extends Movement { if (srcDown == Blocks.LADDER || srcDown == Blocks.VINE) { return COST_INF; } - if (MovementHelper.isReplacable(destX, y - 1, destZ, destOn, context.bsi())) { + if (MovementHelper.isReplacable(destX, y - 1, destZ, destOn, context.bsi)) { boolean throughWater = MovementHelper.isWater(pb0.getBlock()) || MovementHelper.isWater(pb1.getBlock()); if (MovementHelper.isWater(destOn.getBlock()) && throughWater) { // this happens when assume walk on water is true and this is a traverse in water, which isn't allowed @@ -119,7 +122,7 @@ public class MovementTraverse extends Movement { return COST_INF; } double hardness2 = MovementHelper.getMiningDurationTicks(context, destX, y + 1, destZ, pb0, true); // only include falling on the upper block to break - double WC = throughWater ? context.waterWalkSpeed() : WALK_ONE_BLOCK_COST; + double WC = throughWater ? context.waterWalkSpeed : WALK_ONE_BLOCK_COST; for (int i = 0; i < 5; i++) { int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN____SO_EVERY_DIRECTION_EXCEPT_UP[i].getXOffset(); int againstY = y - 1 + HORIZONTALS_BUT_ALSO_DOWN____SO_EVERY_DIRECTION_EXCEPT_UP[i].getYOffset(); @@ -127,8 +130,8 @@ public class MovementTraverse extends Movement { if (againstX == x && againstZ == z) { // this would be a backplace continue; } - if (MovementHelper.canPlaceAgainst(context.bsi(), againstX, againstY, againstZ)) { // found a side place option - return WC + context.placeBlockCost() + hardness1 + hardness2; + if (MovementHelper.canPlaceAgainst(context.bsi, againstX, againstY, againstZ)) { // found a side place option + return WC + context.placeBlockCost + hardness1 + hardness2; } } // now that we've checked all possible directions to side place, we actually need to backplace @@ -139,7 +142,7 @@ public class MovementTraverse extends Movement { return COST_INF; // this is obviously impossible } WC = WC * SNEAK_ONE_BLOCK_COST / WALK_ONE_BLOCK_COST;//since we are sneak backplacing, we are sneaking lol - return WC + context.placeBlockCost() + hardness1 + hardness2; + return WC + context.placeBlockCost + hardness1 + hardness2; } return COST_INF; } @@ -183,7 +186,7 @@ public class MovementTraverse extends Movement { state.setInput(Input.SNEAK, false); Block fd = BlockStateInterface.get(ctx, src.down()).getBlock(); - boolean ladder = fd instanceof BlockLadder || fd instanceof BlockVine; + boolean ladder = fd == Blocks.LADDER || fd == Blocks.VINE; IBlockState pb0 = BlockStateInterface.get(ctx, positionsToBreak[0]); IBlockState pb1 = BlockStateInterface.get(ctx, positionsToBreak[1]); @@ -236,7 +239,7 @@ public class MovementTraverse extends Movement { state.setInput(Input.SPRINT, true); } Block destDown = BlockStateInterface.get(ctx, dest.down()).getBlock(); - if (whereAmI.getY() != dest.getY() && ladder && (destDown instanceof BlockVine || destDown instanceof BlockLadder)) { + if (whereAmI.getY() != dest.getY() && ladder && (destDown == Blocks.VINE || destDown == Blocks.LADDER)) { new MovementPillar(baritone, dest.down(), dest).updateState(state); // i'm sorry return state; } diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 0e3e9bea..ec71ef48 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -374,7 +374,7 @@ public class PathExecutor implements IPathExecutor, Helper { private void sprintIfRequested() { // first and foremost, if allowSprint is off, or if we don't have enough hunger, don't try and sprint - if (!new CalculationContext(behavior.baritone).canSprint()) { + if (!new CalculationContext(behavior.baritone).canSprint) { behavior.baritone.getInputOverrideHandler().setInputForceState(Input.SPRINT, false); ctx.player().setSprinting(false); return; diff --git a/src/main/java/baritone/process/GetToBlockProcess.java b/src/main/java/baritone/process/GetToBlockProcess.java index 48883e13..f3e245da 100644 --- a/src/main/java/baritone/process/GetToBlockProcess.java +++ b/src/main/java/baritone/process/GetToBlockProcess.java @@ -154,4 +154,4 @@ public class GetToBlockProcess extends BaritoneProcessHelper implements IGetToBl } return block == Blocks.CRAFTING_TABLE || block == Blocks.FURNACE || block == Blocks.ENDER_CHEST || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST; } -} \ No newline at end of file +} diff --git a/src/main/java/baritone/process/MineProcess.java b/src/main/java/baritone/process/MineProcess.java index 1a22b9c0..d3883bbb 100644 --- a/src/main/java/baritone/process/MineProcess.java +++ b/src/main/java/baritone/process/MineProcess.java @@ -209,7 +209,7 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro //long b = System.currentTimeMillis(); for (Block m : mining) { if (CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.contains(m)) { - locs.addAll(ctx.worldData().getCachedWorld().getLocationsOf(ChunkPacker.blockToString(m), 1, ctx.getBaritone().getPlayerContext().playerFeet().getX(), ctx.getBaritone().getPlayerContext().playerFeet().getZ(), 2)); + locs.addAll(ctx.worldData.getCachedWorld().getLocationsOf(ChunkPacker.blockToString(m), 1, ctx.getBaritone().getPlayerContext().playerFeet().getX(), ctx.getBaritone().getPlayerContext().playerFeet().getZ(), 2)); } else { uninteresting.add(m); } @@ -248,17 +248,17 @@ public final class MineProcess extends BaritoneProcessHelper implements IMinePro } public static List prune(CalculationContext ctx, List locs2, List mining, int max) { - List dropped = droppedItemsScan(mining, ctx.world()); + List dropped = droppedItemsScan(mining, ctx.world); List locs = locs2 .stream() .distinct() // remove any that are within loaded chunks that aren't actually what we want - .filter(pos -> !ctx.bsi().worldContainsLoadedChunk(pos.getX(), pos.getZ()) || mining.contains(ctx.getBlock(pos.getX(), pos.getY(), pos.getZ())) || dropped.contains(pos)) + .filter(pos -> !ctx.bsi.worldContainsLoadedChunk(pos.getX(), pos.getZ()) || mining.contains(ctx.getBlock(pos.getX(), pos.getY(), pos.getZ())) || dropped.contains(pos)) // remove any that are implausible to mine (encased in bedrock, or touching lava) - .filter(pos -> MineProcess.plausibleToBreak(ctx.bsi(), pos)) + .filter(pos -> MineProcess.plausibleToBreak(ctx.bsi, pos)) .sorted(Comparator.comparingDouble(ctx.getBaritone().getPlayerContext().playerFeet()::distanceSq)) .collect(Collectors.toList()); diff --git a/src/test/java/baritone/cache/CachedRegionTest.java b/src/test/java/baritone/cache/CachedRegionTest.java index 19874990..f33ea1d8 100644 --- a/src/test/java/baritone/cache/CachedRegionTest.java +++ b/src/test/java/baritone/cache/CachedRegionTest.java @@ -44,4 +44,4 @@ public class CachedRegionTest { } } } -} \ No newline at end of file +} diff --git a/src/test/java/baritone/pathing/calc/openset/OpenSetsTest.java b/src/test/java/baritone/pathing/calc/openset/OpenSetsTest.java index 8cc0bec7..a12e0b7a 100644 --- a/src/test/java/baritone/pathing/calc/openset/OpenSetsTest.java +++ b/src/test/java/baritone/pathing/calc/openset/OpenSetsTest.java @@ -167,4 +167,4 @@ public class OpenSetsTest { assertTrue(set.isEmpty()); } } -} \ No newline at end of file +} diff --git a/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java b/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java index 6234e050..fdcef878 100644 --- a/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java +++ b/src/test/java/baritone/pathing/goals/GoalGetToBlockTest.java @@ -47,4 +47,4 @@ public class GoalGetToBlockTest { } assertTrue(acceptableOffsets.toString(), acceptableOffsets.isEmpty()); } -} \ No newline at end of file +} diff --git a/src/test/java/baritone/pathing/movement/ActionCostsTest.java b/src/test/java/baritone/pathing/movement/ActionCostsTest.java index a3108c59..cce61e4b 100644 --- a/src/test/java/baritone/pathing/movement/ActionCostsTest.java +++ b/src/test/java/baritone/pathing/movement/ActionCostsTest.java @@ -48,4 +48,4 @@ public class ActionCostsTest { return fallDistance; } -} \ No newline at end of file +} diff --git a/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java b/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java index a21f0cd4..1cd4cf91 100644 --- a/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java +++ b/src/test/java/baritone/utils/pathing/BetterBlockPosTest.java @@ -136,4 +136,4 @@ public class BetterBlockPosTest { long after2 = System.nanoTime() / 1000000L; System.out.println((after1 - before1) + " " + (after2 - before2)); } -} \ No newline at end of file +} diff --git a/src/test/java/baritone/utils/pathing/PathingBlockTypeTest.java b/src/test/java/baritone/utils/pathing/PathingBlockTypeTest.java index 1582b66f..c30b45d1 100644 --- a/src/test/java/baritone/utils/pathing/PathingBlockTypeTest.java +++ b/src/test/java/baritone/utils/pathing/PathingBlockTypeTest.java @@ -29,4 +29,4 @@ public class PathingBlockTypeTest { assertTrue(type == PathingBlockType.fromBits(bits[0], bits[1])); } } -} \ No newline at end of file +} From 4d7e74365b5bfe3f5865f958cc2893d812b2fad0 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 21 Dec 2018 17:54:16 -0800 Subject: [PATCH 19/63] reformat --- src/api/java/baritone/api/pathing/calc/IPathFinder.java | 1 - src/api/java/baritone/api/pathing/goals/Goal.java | 2 -- .../java/baritone/pathing/calc/AbstractNodeCostSearch.java | 7 +++---- .../java/baritone/utils/player/PrimaryPlayerContext.java | 1 - 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/api/java/baritone/api/pathing/calc/IPathFinder.java b/src/api/java/baritone/api/pathing/calc/IPathFinder.java index 7f73693f..ab04b3f2 100644 --- a/src/api/java/baritone/api/pathing/calc/IPathFinder.java +++ b/src/api/java/baritone/api/pathing/calc/IPathFinder.java @@ -36,7 +36,6 @@ public interface IPathFinder { * * @param primaryTimeout If a path is found, the path finder will stop after this amount of time * @param failureTimeout If a path isn't found, the path finder will continue for this amount of time - * * @return The final path */ PathCalculationResult calculate(long primaryTimeout, long failureTimeout); diff --git a/src/api/java/baritone/api/pathing/goals/Goal.java b/src/api/java/baritone/api/pathing/goals/Goal.java index 1ecf2dfb..acee68db 100644 --- a/src/api/java/baritone/api/pathing/goals/Goal.java +++ b/src/api/java/baritone/api/pathing/goals/Goal.java @@ -33,7 +33,6 @@ public interface Goal { * @param x The goal X position * @param y The goal Y position * @param z The goal Z position - * * @return Whether or not it satisfies this goal */ boolean isInGoal(int x, int y, int z); @@ -44,7 +43,6 @@ public interface Goal { * @param x The goal X position * @param y The goal Y position * @param z The goal Z position - * * @return The estimate number of ticks to satisfy the goal */ double heuristic(int x, int y, int z); diff --git a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java index 490ab7a6..78710204 100644 --- a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java +++ b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java @@ -136,11 +136,10 @@ public abstract class AbstractNodeCostSearch implements IPathFinder { * for the node mapped to the specified pos. If no node is found, * a new node is created. * - * @param x The x position of the node - * @param y The y position of the node - * @param z The z position of the node + * @param x The x position of the node + * @param y The y position of the node + * @param z The z position of the node * @param hashCode The hash code of the node, provided by {@link BetterBlockPos#longHash(int, int, int)} - * * @return The associated node * @see Issue #107 */ diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java index 05b1f80a..f0d7ee01 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java @@ -23,7 +23,6 @@ import baritone.api.utils.IPlayerContext; import baritone.api.utils.IPlayerController; import baritone.utils.Helper; import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.multiplayer.PlayerControllerMP; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; From 64200030d2689c1a732aed3c8a8c7fed16ce803b Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 22 Dec 2018 20:38:44 -0800 Subject: [PATCH 20/63] brady was too optimistic --- src/api/java/baritone/api/utils/Logger.java | 27 --------------------- 1 file changed, 27 deletions(-) delete mode 100644 src/api/java/baritone/api/utils/Logger.java diff --git a/src/api/java/baritone/api/utils/Logger.java b/src/api/java/baritone/api/utils/Logger.java deleted file mode 100644 index c2f6c99a..00000000 --- a/src/api/java/baritone/api/utils/Logger.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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.utils; - -/** - * @author Brady - * @since 9/23/2018 - */ -public class Logger { - - -} From c4eb6be0fe76ce7c1dbc51432191cb01143c2e22 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 23 Dec 2018 23:09:02 -0800 Subject: [PATCH 21/63] dumb --- .../baritone/pathing/movement/movements/MovementAscend.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 083780ad..74a2aae4 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -129,8 +129,6 @@ public class MovementAscend extends Movement { walk += context.jumpPenalty; } - // cracks knuckles - double totalCost = 0; totalCost += walk; if (hasToPlace) { From c324f11a96f55c5bd511fdbbfd6c50016cb46bf7 Mon Sep 17 00:00:00 2001 From: Brady Date: Mon, 24 Dec 2018 12:15:11 -0600 Subject: [PATCH 22/63] Fix bad block breaking that NCP doesn't agree with --- src/api/java/baritone/api/Settings.java | 4 ---- src/api/java/baritone/api/utils/IPlayerController.java | 2 -- src/main/java/baritone/utils/BlockBreakHelper.java | 10 ---------- .../baritone/utils/player/PrimaryPlayerController.java | 5 ----- 4 files changed, 21 deletions(-) diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 9df80d2f..1b4f62e0 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -452,10 +452,6 @@ public class Settings { /** * {@code true}: can mine blocks when in inventory, chat, or tabbed away in ESC menu - *

- * {@code false}: works on cosmic prisons - *

- * LOL */ public Setting leftClickWorkaround = new Setting<>(true); diff --git a/src/api/java/baritone/api/utils/IPlayerController.java b/src/api/java/baritone/api/utils/IPlayerController.java index 8ecc7e11..dd63a41b 100644 --- a/src/api/java/baritone/api/utils/IPlayerController.java +++ b/src/api/java/baritone/api/utils/IPlayerController.java @@ -30,8 +30,6 @@ import net.minecraft.world.GameType; */ public interface IPlayerController { - boolean clickBlock(BlockPos pos, EnumFacing side); - boolean onPlayerDamageBlock(BlockPos pos, EnumFacing side); void resetBlockRemoving(); diff --git a/src/main/java/baritone/utils/BlockBreakHelper.java b/src/main/java/baritone/utils/BlockBreakHelper.java index 9f5b970d..36f31c6d 100644 --- a/src/main/java/baritone/utils/BlockBreakHelper.java +++ b/src/main/java/baritone/utils/BlockBreakHelper.java @@ -31,11 +31,6 @@ import net.minecraft.util.math.RayTraceResult; */ public final class BlockBreakHelper implements Helper { - /** - * The last block that we tried to break, if this value changes - * between attempts, then we re-initialize the breaking process. - */ - private BlockPos lastBlock; private boolean didBreakLastTick; private IPlayerContext playerContext; @@ -45,13 +40,9 @@ public final class BlockBreakHelper implements Helper { } public void tryBreakBlock(BlockPos pos, EnumFacing side) { - if (!pos.equals(lastBlock)) { - playerContext.playerController().clickBlock(pos, side); - } if (playerContext.playerController().onPlayerDamageBlock(pos, side)) { playerContext.player().swingArm(EnumHand.MAIN_HAND); } - lastBlock = pos; } public void stopBreakingBlock() { @@ -59,7 +50,6 @@ public final class BlockBreakHelper implements Helper { if (playerContext.player() != null) { playerContext.playerController().resetBlockRemoving(); } - lastBlock = null; } private boolean fakeBreak() { diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/PrimaryPlayerController.java index fa4ced9d..7b998bb5 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerController.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerController.java @@ -34,11 +34,6 @@ public enum PrimaryPlayerController implements IPlayerController, Helper { INSTANCE; - @Override - public boolean clickBlock(BlockPos pos, EnumFacing side) { - return mc.playerController.clickBlock(pos, side); - } - @Override public boolean onPlayerDamageBlock(BlockPos pos, EnumFacing side) { return mc.playerController.onPlayerDamageBlock(pos, side); From bbb73008ac10f02f3b6b59bd6aef3d079cbe71fa Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 24 Dec 2018 18:41:16 -0800 Subject: [PATCH 23/63] stupid --- .../baritone/pathing/movement/movements/MovementAscend.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 74a2aae4..9973e94b 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -129,8 +129,7 @@ public class MovementAscend extends Movement { walk += context.jumpPenalty; } - double totalCost = 0; - totalCost += walk; + double totalCost = walk; if (hasToPlace) { totalCost += context.placeBlockCost; } From 50d37bb311224455af8994f7ef7c7b3f3fe23bd8 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 25 Dec 2018 20:07:26 -0800 Subject: [PATCH 24/63] lol --- src/main/java/baritone/pathing/movement/Movement.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index 3754d831..b8f7b25e 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -34,7 +34,6 @@ import java.util.Optional; public abstract class Movement implements IMovement, MovementHelper { - protected static final EnumFacing[] HORIZONTALS = {EnumFacing.NORTH, EnumFacing.SOUTH, EnumFacing.EAST, EnumFacing.WEST}; protected static final EnumFacing[] HORIZONTALS_BUT_ALSO_DOWN____SO_EVERY_DIRECTION_EXCEPT_UP = {EnumFacing.NORTH, EnumFacing.SOUTH, EnumFacing.EAST, EnumFacing.WEST, EnumFacing.DOWN}; protected final IBaritone baritone; From bebdede33bcf7be3557063247b2e2aa12774b639 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 26 Dec 2018 18:07:14 -1000 Subject: [PATCH 25/63] unneeded --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 66357bfa..6bffdc24 100644 --- a/README.md +++ b/README.md @@ -25,8 +25,6 @@ Here are some links to help to get started: - [Installation](INSTALL.md) -There's also some useful information down below - # Setup ## Command Line From dffbb8e4c8fa97b0e33bad233e7f1f776d2f990f Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 27 Dec 2018 17:15:13 -0600 Subject: [PATCH 26/63] Overload reachable with IPlayerContext parameter --- src/api/java/baritone/api/utils/RotationUtils.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index 0649ff10..9352b7fe 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -127,6 +127,16 @@ public final class RotationUtils { return new Vec3d((double) (f1 * f2), (double) f3, (double) (f * f2)); } + /** + * @param ctx Context for the viewing entity + * @param pos The target block position + * @return The optional rotation + * @see #reachable(EntityPlayerSP, BlockPos, double) + */ + public static Optional reachable(IPlayerContext ctx, BlockPos pos) { + return reachable(ctx.player(), pos, ctx.playerController().getBlockReachDistance()); + } + /** * Determines if the specified entity is able to reach the center of any of the sides * of the specified block. It first checks if the block center is reachable, and if so, From c2c69f243eb9ac1ce48c1de513ccb7ad50e838ff Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 27 Dec 2018 16:16:12 -1000 Subject: [PATCH 27/63] nothing is trashy in baritone --- src/main/java/baritone/process/FollowProcess.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/baritone/process/FollowProcess.java b/src/main/java/baritone/process/FollowProcess.java index 4c9c1263..3d25c076 100644 --- a/src/main/java/baritone/process/FollowProcess.java +++ b/src/main/java/baritone/process/FollowProcess.java @@ -57,7 +57,6 @@ public final class FollowProcess extends BaritoneProcessHelper implements IFollo } private Goal towards(Entity following) { - // lol this is trashy but it works BlockPos pos; if (Baritone.settings().followOffsetDistance.get() == 0) { pos = new BlockPos(following); From 1da72ba473b8d32b2d478e15de4cd1550b2e6eb3 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 28 Dec 2018 17:17:43 -1000 Subject: [PATCH 28/63] unneeded --- src/main/java/baritone/pathing/path/PathExecutor.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index ec71ef48..8d841e46 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -110,7 +110,6 @@ public class PathExecutor implements IPathExecutor, Helper { return false; } - //System.out.println("Should be at " + whereShouldIBe + " actually am at " + whereAmI); if (!Blocks.AIR.equals(BlockStateInterface.getBlock(ctx, whereAmI.down()))) {//do not skip if standing on air, because our position isn't stable to skip for (int i = 0; i < pathPosition - 1 && i < path.length(); i++) {//this happens for example when you lag out and get teleported back a couple blocks if (whereAmI.equals(path.positions().get(i))) { From 258700ee7bca524b2f8f2975bca5415ba9857961 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 29 Dec 2018 14:50:21 -1000 Subject: [PATCH 29/63] bitshift --- src/main/java/baritone/cache/CachedWorld.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index e9caddfe..fc1e177b 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -215,7 +215,7 @@ public final class CachedWorld implements ICachedWorld, Helper { if (mostRecentlyModified == null) { return new BlockPos(0, 0, 0); } - return new BlockPos(mostRecentlyModified.x * 16 + 8, 0, mostRecentlyModified.z * 16 + 8); + return new BlockPos(mostRecentlyModified.x << 4 + 8, 0, mostRecentlyModified.z << 4 + 8); } private synchronized List allRegions() { From 539b0e64c868fe5dad08c89f2b3ae47a9e4cda9a Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 30 Dec 2018 07:36:10 -1000 Subject: [PATCH 30/63] bitshift 2: electric boogaloo --- src/main/java/baritone/cache/CachedWorld.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index fc1e177b..b604ce48 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -179,8 +179,8 @@ public final class CachedWorld implements ICachedWorld, Helper { if (region == null) { continue; } - int distX = (region.getX() * 512 + 256) - pruneCenter.getX(); - int distZ = (region.getZ() * 512 + 256) - pruneCenter.getZ(); + int distX = (region.getX() << 9 + 256) - pruneCenter.getX(); + int distZ = (region.getZ() << 9 + 256) - pruneCenter.getZ(); double dist = Math.sqrt(distX * distX + distZ * distZ); if (dist > 1024) { logDebug("Deleting cached region " + region.getX() + "," + region.getZ() + " from ram"); From 0e012adb6c6d95cbd3e89790780a2f99ed4ad932 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 31 Dec 2018 08:00:43 -1000 Subject: [PATCH 31/63] unneeded --- src/main/java/baritone/pathing/movement/Movement.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index b8f7b25e..40e523c5 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -125,8 +125,7 @@ public abstract class Movement implements IMovement, MovementHelper { currentState.getTarget().hasToForceRotations())); // TODO: calculate movement inputs from latestState.getGoal().position - // latestState.getTarget().position.ifPresent(null); NULL CONSUMER REALLY SHOULDN'T BE THE FINAL THING YOU SHOULD REALLY REPLACE THIS WITH ALMOST ACTUALLY ANYTHING ELSE JUST PLEASE DON'T LEAVE IT AS IT IS THANK YOU KANYE - + currentState.getInputStates().forEach((input, forced) -> { baritone.getInputOverrideHandler().setInputForceState(input, forced); }); From 816727d65b6a45ec35c2f7fa2b32e94c4a91c3e7 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 1 Jan 2019 22:32:43 -0800 Subject: [PATCH 32/63] not happening --- src/main/java/baritone/pathing/movement/Movement.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index 40e523c5..dcdcdec7 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -124,8 +124,6 @@ public abstract class Movement implements IMovement, MovementHelper { rotation, currentState.getTarget().hasToForceRotations())); - // TODO: calculate movement inputs from latestState.getGoal().position - currentState.getInputStates().forEach((input, forced) -> { baritone.getInputOverrideHandler().setInputForceState(input, forced); }); From 83e6b2fdfe19c066dca39c1b9761af99bd553f71 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 2 Jan 2019 21:08:31 -0800 Subject: [PATCH 33/63] cursed --- buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java index 235b0d31..351ded3a 100644 --- a/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java +++ b/buildSrc/src/main/java/baritone/gradle/task/ProguardTask.java @@ -208,7 +208,7 @@ public class ProguardTask extends BaritoneGradleTask { Objects.requireNonNull(extension); // for some reason cant use Class.forName - Class class_baseExtension = extension.getClass().getSuperclass().getSuperclass().getSuperclass(); + Class class_baseExtension = extension.getClass().getSuperclass().getSuperclass().getSuperclass(); // <-- cursed Field f_replacer = class_baseExtension.getDeclaredField("replacer"); f_replacer.setAccessible(true); Object replacer = f_replacer.get(extension); From 39648c5dc6052e94360812fd6052a4a3675c57ba Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 3 Jan 2019 23:40:43 -0800 Subject: [PATCH 34/63] comment --- src/main/java/baritone/utils/PathingControlManager.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index f5fff546..1dfdbb57 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -64,8 +64,7 @@ public class PathingControlManager implements IPathingControlManager { command = null; for (IBaritoneProcess proc : processes) { proc.onLostControl(); - if (proc.isActive() && !proc.isTemporary()) { // it's okay for a temporary thing (like combat pause) to maintain control even if you say to cancel - // but not for a non temporary thing + if (proc.isActive() && !proc.isTemporary()) { // it's okay only for a temporary thing (like combat pause) to maintain control even if you say to cancel throw new IllegalStateException(proc.displayName()); } } From 7898b24baced3daf7627c5cb32bf8970ff321016 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 4 Jan 2019 23:37:00 -0800 Subject: [PATCH 35/63] mc is weird --- src/main/java/baritone/utils/ToolSet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index 880517a0..0aa02afd 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -180,7 +180,7 @@ public class ToolSet { speed *= 0.09; break; case 2: - speed *= 0.0027; + speed *= 0.0027; // you might think that 0.09*0.3 = 0.027 so that should be next, that would make too much sense. it's 0.0027. break; default: speed *= 0.00081; From 8b6d621d20318b3c69202fc5b4fbcde43f410806 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 5 Jan 2019 23:38:24 -0800 Subject: [PATCH 36/63] crucial performance optimization --- src/main/java/baritone/utils/PathingControlManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index 1dfdbb57..79a36695 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -174,7 +174,7 @@ public class PathingControlManager implements IPathingControlManager { boolean found = false; boolean cancelOthers = false; PathingCommand exec = null; - for (int i = inContention.size() - 1; i >= 0; i--) { // truly a gamer moment + for (int i = inContention.size() - 1; i >= 0; --i) { // truly a gamer moment IBaritoneProcess proc = inContention.get(i); if (found) { if (cancelOthers) { From 76427b8ecb94769da3c5a6261745b5cc7f952732 Mon Sep 17 00:00:00 2001 From: EvilSourcerer <32974335+EvilSourcerer@users.noreply.github.com> Date: Sun, 6 Jan 2019 19:49:58 -0500 Subject: [PATCH 37/63] real gamers use bufferedreader --- src/api/java/baritone/api/utils/SettingsUtil.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index 4d13d027..fc7c3efd 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -23,9 +23,14 @@ import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; import java.awt.*; +import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; -import java.util.*; +import java.io.FileReader; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -37,9 +42,9 @@ public class SettingsUtil { private static final Map, SettingsIO> map; public static void readAndApply(Settings settings) { - try (Scanner scan = new Scanner(settingsFile)) { - while (scan.hasNextLine()) { - String line = scan.nextLine(); + try (BufferedReader scan = new BufferedReader(new FileReader(settingsFile))) { + String line; + while ((line = scan.readLine()) != null) { if (line.isEmpty()) { continue; } From 712a0a39052ae9a088bfb09e8a04104ef0a8fcbe Mon Sep 17 00:00:00 2001 From: babbaj Date: Mon, 7 Jan 2019 01:08:46 -0500 Subject: [PATCH 38/63] refactor SettingsUtil to be more epic --- .../java/baritone/api/utils/SettingsUtil.java | 66 ++++++++++++------- 1 file changed, 41 insertions(+), 25 deletions(-) diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index fc7c3efd..a9e81383 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -18,15 +18,18 @@ package baritone.api.utils; import baritone.api.Settings; -import net.minecraft.client.Minecraft; +import java.io.BufferedWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.function.Consumer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; import java.awt.*; import java.io.BufferedReader; -import java.io.File; -import java.io.FileOutputStream; -import java.io.FileReader; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -35,44 +38,57 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; +import static net.minecraft.client.Minecraft.getMinecraft; + public class SettingsUtil { - private static final File settingsFile = new File(new File(Minecraft.getMinecraft().gameDir, "baritone"), "settings.txt"); + private static final Path settingsFile = getMinecraft().gameDir.toPath().resolve("baritone").resolve("settings.txt"); + private static final Pattern SETTING_PATTERN = Pattern.compile("^(?[^ ]+) +(?[^ ]+)");// 2 words separated by spaces private static final Map, SettingsIO> map; - public static void readAndApply(Settings settings) { - try (BufferedReader scan = new BufferedReader(new FileReader(settingsFile))) { + + private static boolean isComment(String line) { + return line.startsWith("#") || line.startsWith("//"); + } + + private static void forEachLine(Path file, Consumer consumer) throws IOException { + try (BufferedReader scan = Files.newBufferedReader(file)) { String line; while ((line = scan.readLine()) != null) { - if (line.isEmpty()) { - continue; + if (line.isEmpty() || isComment(line)) continue; + + consumer.accept(line); + } + } + } + + public void readAndApply(Settings settings) { + try { + forEachLine(settingsFile, line -> { + Matcher matcher = SETTING_PATTERN.matcher(line); + if (!matcher.matches()) { + System.out.println("Invalid syntax in setting file: " + line); + return; } - if (line.startsWith("#") || line.startsWith("//")) { - continue; - } - int space = line.indexOf(" "); - if (space == -1) { - System.out.println("Skipping invalid line with no space: " + line); - continue; - } - String settingName = line.substring(0, space).trim().toLowerCase(); - String settingValue = line.substring(space).trim(); + + String settingName = matcher.group("setting").toLowerCase(); + String settingValue = matcher.group("value").toLowerCase(); try { parseAndApply(settings, settingName, settingValue); } catch (Exception ex) { - ex.printStackTrace(); System.out.println("Unable to parse line " + line); + ex.printStackTrace(); } - } + }); } catch (Exception ex) { - ex.printStackTrace(); System.out.println("Exception while reading Baritone settings, some settings may be reset to default values!"); + ex.printStackTrace(); } } public static synchronized void save(Settings settings) { - try (FileOutputStream out = new FileOutputStream(settingsFile)) { + try (BufferedWriter out = Files.newBufferedWriter(settingsFile)) { for (Settings.Setting setting : settings.allSettings) { if (setting.get() == null) { System.out.println("NULL SETTING?" + setting.getName()); @@ -88,11 +104,11 @@ public class SettingsUtil { if (io == null) { throw new IllegalStateException("Missing " + setting.getValueClass() + " " + setting + " " + setting.getName()); } - out.write((setting.getName() + " " + io.toString.apply(setting.get()) + "\n").getBytes()); + out.write(setting.getName() + " " + io.toString.apply(setting.get()) + "\n"); } } catch (Exception ex) { + System.out.println("Exception thrown while saving Baritone settings!"); ex.printStackTrace(); - System.out.println("Exception while saving Baritone settings!"); } } From 227b30366907c8c7ea055f5717606aa0a91b9b3f Mon Sep 17 00:00:00 2001 From: babbaj Date: Mon, 7 Jan 2019 01:16:52 -0500 Subject: [PATCH 39/63] value doesnt have to be lowercase --- src/api/java/baritone/api/utils/SettingsUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index a9e81383..f71f7614 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -73,7 +73,7 @@ public class SettingsUtil { } String settingName = matcher.group("setting").toLowerCase(); - String settingValue = matcher.group("value").toLowerCase(); + String settingValue = matcher.group("value"); try { parseAndApply(settings, settingName, settingValue); } catch (Exception ex) { From 84b580b00161cc11d63df3c6f26179e2c444ffcc Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 6 Jan 2019 21:04:50 -0800 Subject: [PATCH 40/63] cursed --- src/main/java/baritone/utils/pathing/PathBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/pathing/PathBase.java b/src/main/java/baritone/utils/pathing/PathBase.java index 3fbc95ca..04fe9872 100644 --- a/src/main/java/baritone/utils/pathing/PathBase.java +++ b/src/main/java/baritone/utils/pathing/PathBase.java @@ -26,7 +26,7 @@ import net.minecraft.util.math.BlockPos; public abstract class PathBase implements IPath { @Override - public PathBase cutoffAtLoadedChunks(Object bsi0) { + public PathBase cutoffAtLoadedChunks(Object bsi0) { // <-- cursed cursed cursed BlockStateInterface bsi = (BlockStateInterface) bsi0; for (int i = 0; i < positions().size(); i++) { BlockPos pos = positions().get(i); From 23dc97ad5e96bcb577228efc89ac98eec2a3dd39 Mon Sep 17 00:00:00 2001 From: babbaj Date: Mon, 7 Jan 2019 01:25:39 -0500 Subject: [PATCH 41/63] oops that should have been static --- src/api/java/baritone/api/utils/SettingsUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index f71f7614..b6623b98 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -63,7 +63,7 @@ public class SettingsUtil { } } - public void readAndApply(Settings settings) { + public static void readAndApply(Settings settings) { try { forEachLine(settingsFile, line -> { Matcher matcher = SETTING_PATTERN.matcher(line); From ee9519d8911464b35203104e96ab74444c3b0907 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 7 Jan 2019 08:53:39 -0800 Subject: [PATCH 42/63] tweaks --- .../java/baritone/api/utils/SettingsUtil.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/api/java/baritone/api/utils/SettingsUtil.java b/src/api/java/baritone/api/utils/SettingsUtil.java index b6623b98..07b4cd98 100644 --- a/src/api/java/baritone/api/utils/SettingsUtil.java +++ b/src/api/java/baritone/api/utils/SettingsUtil.java @@ -18,23 +18,23 @@ package baritone.api.utils; import baritone.api.Settings; -import java.io.BufferedWriter; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.function.Consumer; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; import java.awt.*; import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.function.Consumer; import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -42,12 +42,11 @@ import static net.minecraft.client.Minecraft.getMinecraft; public class SettingsUtil { - private static final Path settingsFile = getMinecraft().gameDir.toPath().resolve("baritone").resolve("settings.txt"); - private static final Pattern SETTING_PATTERN = Pattern.compile("^(?[^ ]+) +(?[^ ]+)");// 2 words separated by spaces + private static final Path SETTINGS_PATH = getMinecraft().gameDir.toPath().resolve("baritone").resolve("settings.txt"); + private static final Pattern SETTING_PATTERN = Pattern.compile("^(?[^ ]+) +(?[^ ]+)"); // 2 words separated by spaces private static final Map, SettingsIO> map; - private static boolean isComment(String line) { return line.startsWith("#") || line.startsWith("//"); } @@ -56,8 +55,9 @@ public class SettingsUtil { try (BufferedReader scan = Files.newBufferedReader(file)) { String line; while ((line = scan.readLine()) != null) { - if (line.isEmpty() || isComment(line)) continue; - + if (line.isEmpty() || isComment(line)) { + continue; + } consumer.accept(line); } } @@ -65,7 +65,7 @@ public class SettingsUtil { public static void readAndApply(Settings settings) { try { - forEachLine(settingsFile, line -> { + forEachLine(SETTINGS_PATH, line -> { Matcher matcher = SETTING_PATTERN.matcher(line); if (!matcher.matches()) { System.out.println("Invalid syntax in setting file: " + line); @@ -88,7 +88,7 @@ public class SettingsUtil { } public static synchronized void save(Settings settings) { - try (BufferedWriter out = Files.newBufferedWriter(settingsFile)) { + try (BufferedWriter out = Files.newBufferedWriter(SETTINGS_PATH)) { for (Settings.Setting setting : settings.allSettings) { if (setting.get() == null) { System.out.println("NULL SETTING?" + setting.getName()); From e971d5d43fb14947e4872faaee52aa05ae24692a Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 8 Jan 2019 14:56:21 -0800 Subject: [PATCH 43/63] prevent favoring from affecting movement cost thresholds --- src/main/java/baritone/pathing/calc/Path.java | 4 +++- src/main/java/baritone/pathing/movement/Movement.java | 2 +- .../baritone/pathing/movement/movements/MovementAscend.java | 2 +- .../baritone/pathing/movement/movements/MovementDescend.java | 2 +- .../baritone/pathing/movement/movements/MovementDiagonal.java | 2 +- .../baritone/pathing/movement/movements/MovementDownward.java | 2 +- .../baritone/pathing/movement/movements/MovementFall.java | 2 +- .../baritone/pathing/movement/movements/MovementParkour.java | 2 +- .../baritone/pathing/movement/movements/MovementPillar.java | 2 +- .../baritone/pathing/movement/movements/MovementTraverse.java | 2 +- 10 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/baritone/pathing/calc/Path.java b/src/main/java/baritone/pathing/calc/Path.java index 0b5b2cc7..37441743 100644 --- a/src/main/java/baritone/pathing/calc/Path.java +++ b/src/main/java/baritone/pathing/calc/Path.java @@ -132,7 +132,9 @@ class Path extends PathBase { Movement move = moves.apply0(context, src); if (move.getDest().equals(dest)) { // have to calculate the cost at calculation time so we can accurately judge whether a cost increase happened between cached calculation and real execution - move.override(cost); + // however, taking into account possible favoring that could skew the node cost, we really want the stricter limit of the two + // so we take the minimum of the path node cost difference, and the calculated cost + move.override(Math.min(move.calculateCost(context), cost)); return move; } } diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index dcdcdec7..2db8bf8d 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -84,7 +84,7 @@ public abstract class Movement implements IMovement, MovementHelper { return cost; } - protected abstract double calculateCost(CalculationContext context); + public abstract double calculateCost(CalculationContext context); @Override public double recalculateCost() { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 9973e94b..2e20dd6e 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -52,7 +52,7 @@ public class MovementAscend extends Movement { } @Override - protected double calculateCost(CalculationContext context) { + public double calculateCost(CalculationContext context) { return cost(context, src.x, src.y, src.z, dest.x, dest.z); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java index ba915ac6..d2d2c282 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDescend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDescend.java @@ -52,7 +52,7 @@ public class MovementDescend extends Movement { } @Override - protected double calculateCost(CalculationContext context) { + public double calculateCost(CalculationContext context) { MutableMoveResult result = new MutableMoveResult(); cost(context, src.x, src.y, src.z, dest.x, dest.z, result); if (result.y != dest.y) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java index f2aeebbb..a47fc263 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDiagonal.java @@ -54,7 +54,7 @@ public class MovementDiagonal extends Movement { } @Override - protected double calculateCost(CalculationContext context) { + public double calculateCost(CalculationContext context) { MutableMoveResult result = new MutableMoveResult(); cost(context, src.x, src.y, src.z, dest.x, dest.z, result); if (result.y != dest.y) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java index 81b257e7..2bec8fcf 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementDownward.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementDownward.java @@ -43,7 +43,7 @@ public class MovementDownward extends Movement { } @Override - protected double calculateCost(CalculationContext context) { + public double calculateCost(CalculationContext context) { return cost(context, src.x, src.y, src.z); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index 90b44c14..6442d7d9 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -54,7 +54,7 @@ public class MovementFall extends Movement { } @Override - protected double calculateCost(CalculationContext context) { + public double calculateCost(CalculationContext context) { MutableMoveResult result = new MutableMoveResult(); MovementDescend.cost(context, src.x, src.y, src.z, dest.x, dest.z, result); if (result.y != dest.y) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index 5bc5b1db..ab98d3d0 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -166,7 +166,7 @@ public class MovementParkour extends Movement { @Override - protected double calculateCost(CalculationContext context) { + public double calculateCost(CalculationContext context) { MutableMoveResult res = new MutableMoveResult(); cost(context, src.x, src.y, src.z, direction, res); if (res.x != dest.x || res.z != dest.z) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java index fafba24a..b236f7e2 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementPillar.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementPillar.java @@ -42,7 +42,7 @@ public class MovementPillar extends Movement { } @Override - protected double calculateCost(CalculationContext context) { + public double calculateCost(CalculationContext context) { return cost(context, src.x, src.y, src.z); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 84e42358..0788ff8c 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -60,7 +60,7 @@ public class MovementTraverse extends Movement { } @Override - protected double calculateCost(CalculationContext context) { + public double calculateCost(CalculationContext context) { return cost(context, src.x, src.y, src.z, dest.x, dest.z); } From bc5982b994eea763495c57e6397a17cc5c55f377 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 8 Jan 2019 20:45:35 -0800 Subject: [PATCH 44/63] fine lol --- src/main/java/baritone/utils/PathingControlManager.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index 79a36695..f28655e6 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -170,12 +170,11 @@ public class PathingControlManager implements IPathingControlManager { public PathingCommand doTheStuff() { - List inContention = processes.stream().filter(IBaritoneProcess::isActive).sorted(Comparator.comparingDouble(IBaritoneProcess::priority)).collect(Collectors.toList()); + List inContention = processes.stream().filter(IBaritoneProcess::isActive).sorted(Comparator.comparingDouble(IBaritoneProcess::priority).reversed()).collect(Collectors.toList()); boolean found = false; boolean cancelOthers = false; PathingCommand exec = null; - for (int i = inContention.size() - 1; i >= 0; --i) { // truly a gamer moment - IBaritoneProcess proc = inContention.get(i); + for (IBaritoneProcess proc : inContention) { if (found) { if (cancelOthers) { proc.onLostControl(); From ae1e229619704b76f29931615621bcd86089a86b Mon Sep 17 00:00:00 2001 From: babbaj Date: Wed, 9 Jan 2019 05:39:37 -0500 Subject: [PATCH 45/63] fix garbage code --- .../baritone/utils/PathingControlManager.java | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index f28655e6..32788433 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -26,10 +26,10 @@ import baritone.api.process.IBaritoneProcess; import baritone.api.process.PathingCommand; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; +import java.util.stream.Stream; import net.minecraft.util.math.BlockPos; import java.util.*; -import java.util.stream.Collectors; public class PathingControlManager implements IPathingControlManager { private final Baritone baritone; @@ -170,30 +170,30 @@ public class PathingControlManager implements IPathingControlManager { public PathingCommand doTheStuff() { - List inContention = processes.stream().filter(IBaritoneProcess::isActive).sorted(Comparator.comparingDouble(IBaritoneProcess::priority).reversed()).collect(Collectors.toList()); - boolean found = false; - boolean cancelOthers = false; - PathingCommand exec = null; - for (IBaritoneProcess proc : inContention) { - if (found) { - if (cancelOthers) { - proc.onLostControl(); + Stream inContention = processes.stream() + .filter(IBaritoneProcess::isActive) + .sorted(Comparator.comparingDouble(IBaritoneProcess::priority).reversed()); + + + Iterator iterator = inContention.iterator(); + while(iterator.hasNext()) { + IBaritoneProcess proc = iterator.next(); + + PathingCommand exec = proc.onTick(Objects.equals(proc, inControlLastTick) && baritone.getPathingBehavior().calcFailedLastTick(), baritone.getPathingBehavior().isSafeToCancel()); + if (exec == null) { + if (proc.isActive()) { + throw new IllegalStateException(proc.displayName() + " returned null PathingCommand"); } + proc.onLostControl(); } else { - exec = proc.onTick(Objects.equals(proc, inControlLastTick) && baritone.getPathingBehavior().calcFailedLastTick(), baritone.getPathingBehavior().isSafeToCancel()); - if (exec == null) { - if (proc.isActive()) { - throw new IllegalStateException(proc.displayName()); - } - proc.onLostControl(); - continue; - } - //System.out.println("Executing command " + exec.commandType + " " + exec.goal + " from " + proc.displayName()); inControlThisTick = proc; - found = true; - cancelOthers = !proc.isTemporary(); + if (!proc.isTemporary()) { + iterator.forEachRemaining(IBaritoneProcess::onLostControl); + } + + return exec; } } - return exec; + return null; } } From a4495ce80abc80951087a7466cb375f49f8ddb5f Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 8 Jan 2019 22:00:33 -0800 Subject: [PATCH 46/63] tweaks --- .../java/baritone/utils/PathingControlManager.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index 32788433..d1cb4f61 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -26,10 +26,10 @@ import baritone.api.process.IBaritoneProcess; import baritone.api.process.PathingCommand; import baritone.behavior.PathingBehavior; import baritone.pathing.path.PathExecutor; -import java.util.stream.Stream; import net.minecraft.util.math.BlockPos; import java.util.*; +import java.util.stream.Stream; public class PathingControlManager implements IPathingControlManager { private final Baritone baritone; @@ -82,7 +82,7 @@ public class PathingControlManager implements IPathingControlManager { public void preTick() { inControlLastTick = inControlThisTick; - command = doTheStuff(); + command = executeProcesses(); if (command == null) { return; } @@ -169,14 +169,14 @@ public class PathingControlManager implements IPathingControlManager { } - public PathingCommand doTheStuff() { + public PathingCommand executeProcesses() { Stream inContention = processes.stream() - .filter(IBaritoneProcess::isActive) - .sorted(Comparator.comparingDouble(IBaritoneProcess::priority).reversed()); + .filter(IBaritoneProcess::isActive) + .sorted(Comparator.comparingDouble(IBaritoneProcess::priority).reversed()); Iterator iterator = inContention.iterator(); - while(iterator.hasNext()) { + while (iterator.hasNext()) { IBaritoneProcess proc = iterator.next(); PathingCommand exec = proc.onTick(Objects.equals(proc, inControlLastTick) && baritone.getPathingBehavior().calcFailedLastTick(), baritone.getPathingBehavior().isSafeToCancel()); @@ -190,7 +190,6 @@ public class PathingControlManager implements IPathingControlManager { if (!proc.isTemporary()) { iterator.forEachRemaining(IBaritoneProcess::onLostControl); } - return exec; } } From fbcae10f961bf289bb826512172cae4fb84bc9db Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 9 Jan 2019 15:13:09 -0800 Subject: [PATCH 47/63] cherry picked fix from builder --- src/main/java/baritone/behavior/PathingBehavior.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 6f0cf32b..8c5fb8a4 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -499,7 +499,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, Goal transformed = goal; if (Baritone.settings().simplifyUnloadedYCoord.get() && goal instanceof IGoalRenderPos) { BlockPos pos = ((IGoalRenderPos) goal).getGoalPos(); - if (context.world.getChunk(pos) instanceof EmptyChunk) { + if (!context.bsi.worldContainsLoadedChunk(pos.getX(), pos.getZ())) { transformed = new GoalXZ(pos.getX(), pos.getZ()); } } From 7d572d748b56362e7702b25206030bfc86f49bae Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 9 Jan 2019 15:13:48 -0800 Subject: [PATCH 48/63] shouldnt be needed actually --- .../java/baritone/pathing/movement/CalculationContext.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 725ab569..55933038 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -43,7 +43,6 @@ public class CalculationContext { private static final ItemStack STACK_BUCKET_WATER = new ItemStack(Items.WATER_BUCKET); public final IBaritone baritone; - public final EntityPlayerSP player; public final World world; public final WorldData worldData; public final BlockStateInterface bsi; @@ -72,7 +71,7 @@ public class CalculationContext { public CalculationContext(IBaritone baritone, boolean forUseOnAnotherThread) { this.baritone = baritone; - this.player = baritone.getPlayerContext().player(); + EntityPlayerSP player = baritone.getPlayerContext().player(); this.world = baritone.getPlayerContext().world(); this.worldData = (WorldData) baritone.getWorldProvider().getCurrentWorld(); this.bsi = new BlockStateInterface(world, worldData, forUseOnAnotherThread); // TODO TODO TODO From 85ea21e83b24ac4d290728a5097114bf97e59878 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 9 Jan 2019 18:22:34 -0800 Subject: [PATCH 49/63] epic movement input --- .../baritone/pathing/path/PathExecutor.java | 3 +- .../baritone/utils/InputOverrideHandler.java | 16 +++++- .../baritone/utils/PlayerMovementInput.java | 57 +++++++++++++++++++ 3 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 src/main/java/baritone/utils/PlayerMovementInput.java diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 8d841e46..cad144aa 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -380,7 +380,8 @@ public class PathExecutor implements IPathExecutor, Helper { } // if the movement requested sprinting, then we're done - if (behavior.baritone.getInputOverrideHandler().isInputForcedDown(mc.gameSettings.keyBindSprint)) { + if (behavior.baritone.getInputOverrideHandler().isInputForcedDown(Input.SPRINT)) { + behavior.baritone.getInputOverrideHandler().setInputForceState(Input.SPRINT, false); if (!ctx.player().isSprinting()) { ctx.player().setSprinting(true); } diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index c6e19c15..654ab10e 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -18,11 +18,14 @@ package baritone.utils; import baritone.Baritone; +import baritone.api.BaritoneAPI; import baritone.api.event.events.TickEvent; import baritone.api.utils.IInputOverrideHandler; import baritone.api.utils.input.Input; import baritone.behavior.Behavior; +import net.minecraft.client.Minecraft; import net.minecraft.client.settings.KeyBinding; +import net.minecraft.util.MovementInputFromOptions; import org.lwjgl.input.Keyboard; import java.util.HashMap; @@ -58,7 +61,13 @@ public final class InputOverrideHandler extends Behavior implements IInputOverri */ @Override public final boolean isInputForcedDown(KeyBinding key) { - return isInputForcedDown(Input.getInputForBind(key)); + Input input = Input.getInputForBind(key); + if (input == null || (input != Input.CLICK_LEFT && input != Input.CLICK_RIGHT)) { + // TODO handle left and right better + // ideally we wouldn't force any keybinds and would do everything directly for real + return false; + } + return isInputForcedDown(input); } /** @@ -114,6 +123,11 @@ public final class InputOverrideHandler extends Behavior implements IInputOverri } boolean stillClick = blockBreakHelper.tick(isInputForcedDown(Input.CLICK_LEFT)); setInputForceState(Input.CLICK_LEFT, stillClick); + if (baritone.getPathingBehavior().isPathing() || baritone != BaritoneAPI.getProvider().getPrimaryBaritone()) { + ctx.player().movementInput = new PlayerMovementInput(this); + } else { + ctx.player().movementInput = new MovementInputFromOptions(Minecraft.getMinecraft().gameSettings); + } } public BlockBreakHelper getBlockBreakHelper() { diff --git a/src/main/java/baritone/utils/PlayerMovementInput.java b/src/main/java/baritone/utils/PlayerMovementInput.java new file mode 100644 index 00000000..4ffbef2b --- /dev/null +++ b/src/main/java/baritone/utils/PlayerMovementInput.java @@ -0,0 +1,57 @@ +/* + * 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.utils; + +import baritone.api.utils.input.Input; +import net.minecraft.util.MovementInput; + +public class PlayerMovementInput extends MovementInput { + private final InputOverrideHandler handler; + + public PlayerMovementInput(InputOverrideHandler handler) { + this.handler = handler; + } + + public void updatePlayerMoveState() { + this.moveStrafe = 0.0F; + this.moveForward = 0.0F; + + jump = handler.isInputForcedDown(Input.JUMP); // oppa + + if (this.forwardKeyDown = handler.isInputForcedDown(Input.MOVE_FORWARD)) { + this.moveForward++; + } + + if (this.backKeyDown = handler.isInputForcedDown(Input.MOVE_BACK)) { + this.moveForward--; + } + + if (this.leftKeyDown = handler.isInputForcedDown(Input.MOVE_LEFT)) { + this.moveStrafe++; + } + + if (this.rightKeyDown = handler.isInputForcedDown(Input.MOVE_RIGHT)) { + this.moveStrafe--; + } + + if (this.sneak = handler.isInputForcedDown(Input.SNEAK)) { + this.moveStrafe *= 0.3D; + this.moveForward *= 0.3D; + } + } +} From 5ca214534dba85e8c87c44be851810cfd34794a9 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 9 Jan 2019 19:11:53 -0800 Subject: [PATCH 50/63] mouse stuff --- .../listener/AbstractGameEventListener.java | 3 -- .../event/listener/IGameEventListener.java | 5 -- .../api/utils/IInputOverrideHandler.java | 4 +- .../launch/mixins/MixinKeyBinding.java | 27 +++++++++- .../launch/mixins/MixinMinecraft.java | 9 ---- .../java/baritone/event/GameEventHandler.java | 5 -- .../java/baritone/utils/BlockBreakHelper.java | 23 +-------- .../baritone/utils/InputOverrideHandler.java | 51 +++++++++---------- 8 files changed, 50 insertions(+), 77 deletions(-) diff --git a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java index c11f926d..135c29a7 100644 --- a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java @@ -36,9 +36,6 @@ public interface AbstractGameEventListener extends IGameEventListener { @Override default void onPlayerUpdate(PlayerUpdateEvent event) {} - @Override - default void onProcessKeyBinds() {} - @Override default void onSendChatMessage(ChatEvent event) {} diff --git a/src/api/java/baritone/api/event/listener/IGameEventListener.java b/src/api/java/baritone/api/event/listener/IGameEventListener.java index 9308ab4c..0572cbe9 100644 --- a/src/api/java/baritone/api/event/listener/IGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/IGameEventListener.java @@ -49,11 +49,6 @@ public interface IGameEventListener { */ void onPlayerUpdate(PlayerUpdateEvent event); - /** - * Run once per game tick from before keybinds are processed. - */ - void onProcessKeyBinds(); - /** * Runs whenever the client player sends a message to the server. * diff --git a/src/api/java/baritone/api/utils/IInputOverrideHandler.java b/src/api/java/baritone/api/utils/IInputOverrideHandler.java index 69dbbbeb..03f6e4dd 100644 --- a/src/api/java/baritone/api/utils/IInputOverrideHandler.java +++ b/src/api/java/baritone/api/utils/IInputOverrideHandler.java @@ -27,9 +27,7 @@ import net.minecraft.client.settings.KeyBinding; */ public interface IInputOverrideHandler extends IBehavior { - default boolean isInputForcedDown(KeyBinding key) { - return isInputForcedDown(Input.getInputForBind(key)); - } + Boolean isInputForcedDown(KeyBinding key); boolean isInputForcedDown(Input input); diff --git a/src/launch/java/baritone/launch/mixins/MixinKeyBinding.java b/src/launch/java/baritone/launch/mixins/MixinKeyBinding.java index 5859d3c5..cf832533 100644 --- a/src/launch/java/baritone/launch/mixins/MixinKeyBinding.java +++ b/src/launch/java/baritone/launch/mixins/MixinKeyBinding.java @@ -18,8 +18,10 @@ package baritone.launch.mixins; import baritone.api.BaritoneAPI; +import baritone.utils.Helper; import net.minecraft.client.settings.KeyBinding; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @@ -31,6 +33,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(KeyBinding.class) public class MixinKeyBinding { + @Shadow + public int pressTime; + @Inject( method = "isKeyDown", at = @At("HEAD"), @@ -38,8 +43,26 @@ public class MixinKeyBinding { ) private void isKeyDown(CallbackInfoReturnable cir) { // only the primary baritone forces keys - if (BaritoneAPI.getProvider().getPrimaryBaritone().getInputOverrideHandler().isInputForcedDown((KeyBinding) (Object) this)) { - cir.setReturnValue(true); + Boolean force = BaritoneAPI.getProvider().getPrimaryBaritone().getInputOverrideHandler().isInputForcedDown((KeyBinding) (Object) this); + if (force != null) { + cir.setReturnValue(force); // :sunglasses: + } + } + + @Inject( + method = "isPressed", + at = @At("HEAD"), + cancellable = true + ) + private void isPressed(CallbackInfoReturnable cir) { + // only the primary baritone forces keys + Boolean force = BaritoneAPI.getProvider().getPrimaryBaritone().getInputOverrideHandler().isInputForcedDown((KeyBinding) (Object) this); + if (force != null && force == false) { // <-- cursed + if (pressTime > 0) { + Helper.HELPER.logDirect("You're trying to press this mouse button but I won't let you"); + pressTime--; + } + cir.setReturnValue(force); // :sunglasses: } } } diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 7e30d9a0..6ee1a79b 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -96,15 +96,6 @@ public class MixinMinecraft { } - @Inject( - method = "processKeyBinds", - at = @At("HEAD") - ) - private void runTickKeyboard(CallbackInfo ci) { - // keyboard input is only the primary baritone - BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onProcessKeyBinds(); - } - @Inject( method = "loadWorld(Lnet/minecraft/client/multiplayer/WorldClient;Ljava/lang/String;)V", at = @At("HEAD") diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index 9f16283e..e85c46de 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -54,11 +54,6 @@ public final class GameEventHandler implements IEventBus, Helper { listeners.forEach(l -> l.onPlayerUpdate(event)); } - @Override - public final void onProcessKeyBinds() { - listeners.forEach(IGameEventListener::onProcessKeyBinds); - } - @Override public final void onSendChatMessage(ChatEvent event) { listeners.forEach(l -> l.onSendChatMessage(event)); diff --git a/src/main/java/baritone/utils/BlockBreakHelper.java b/src/main/java/baritone/utils/BlockBreakHelper.java index 36f31c6d..b410e6b3 100644 --- a/src/main/java/baritone/utils/BlockBreakHelper.java +++ b/src/main/java/baritone/utils/BlockBreakHelper.java @@ -17,8 +17,6 @@ package baritone.utils; -import baritone.Baritone; -import baritone.api.BaritoneAPI; import baritone.api.utils.IPlayerContext; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; @@ -52,26 +50,8 @@ public final class BlockBreakHelper implements Helper { } } - private boolean fakeBreak() { - if (playerContext != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext()) { - // for a non primary player, we need to fake break always, CLICK_LEFT has no effect - return true; - } - if (!Baritone.settings().leftClickWorkaround.get()) { - // if this setting is false, we CLICK_LEFT regardless of gui status - return false; - } - return mc.currentScreen != null; - } - - public boolean tick(boolean isLeftClick) { - if (!fakeBreak()) { - if (didBreakLastTick) { - stopBreakingBlock(); - } - return isLeftClick; - } + public void tick(boolean isLeftClick) { RayTraceResult trace = playerContext.objectMouseOver(); boolean isBlockTrace = trace != null && trace.typeOfHit == RayTraceResult.Type.BLOCK; @@ -82,6 +62,5 @@ public final class BlockBreakHelper implements Helper { stopBreakingBlock(); didBreakLastTick = false; } - return false; // fakeBreak is true so no matter what we aren't forcing CLICK_LEFT } } diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index 654ab10e..93fbe875 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -25,8 +25,8 @@ import baritone.api.utils.input.Input; import baritone.behavior.Behavior; import net.minecraft.client.Minecraft; import net.minecraft.client.settings.KeyBinding; +import net.minecraft.util.MovementInput; import net.minecraft.util.MovementInputFromOptions; -import org.lwjgl.input.Keyboard; import java.util.HashMap; import java.util.Map; @@ -60,14 +60,18 @@ public final class InputOverrideHandler extends Behavior implements IInputOverri * @return Whether or not it is being forced down */ @Override - public final boolean isInputForcedDown(KeyBinding key) { + public final Boolean isInputForcedDown(KeyBinding key) { Input input = Input.getInputForBind(key); - if (input == null || (input != Input.CLICK_LEFT && input != Input.CLICK_RIGHT)) { - // TODO handle left and right better - // ideally we wouldn't force any keybinds and would do everything directly for real + if (input == null || !inControl()) { + return null; + } + if (input == Input.CLICK_LEFT) { return false; } - return isInputForcedDown(input); + if (input == Input.CLICK_RIGHT) { + return isInputForcedDown(Input.CLICK_RIGHT); + } + return null; } /** @@ -100,36 +104,27 @@ public final class InputOverrideHandler extends Behavior implements IInputOverri this.inputForceStateMap.clear(); } - @Override - public final void onProcessKeyBinds() { - // Simulate the key being held down this tick - for (Input input : Input.values()) { - KeyBinding keyBinding = input.getKeyBinding(); - - if (isInputForcedDown(keyBinding) && !keyBinding.isKeyDown()) { - int keyCode = keyBinding.getKeyCode(); - - if (keyCode < Keyboard.KEYBOARD_SIZE) { - KeyBinding.onTick(keyCode < 0 ? keyCode + 100 : keyCode); - } - } - } - } - @Override public final void onTick(TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { return; } - boolean stillClick = blockBreakHelper.tick(isInputForcedDown(Input.CLICK_LEFT)); - setInputForceState(Input.CLICK_LEFT, stillClick); - if (baritone.getPathingBehavior().isPathing() || baritone != BaritoneAPI.getProvider().getPrimaryBaritone()) { - ctx.player().movementInput = new PlayerMovementInput(this); - } else { - ctx.player().movementInput = new MovementInputFromOptions(Minecraft.getMinecraft().gameSettings); + blockBreakHelper.tick(isInputForcedDown(Input.CLICK_LEFT)); + + MovementInput desired = inControl() + ? new PlayerMovementInput(this) + : new MovementInputFromOptions(Minecraft.getMinecraft().gameSettings); + + if (ctx.player().movementInput.getClass() != desired.getClass()) { + ctx.player().movementInput = desired; // only set it if it was previously incorrect + // gotta do it this way, or else it constantly thinks you're beginning a double tap W sprint lol } } + private boolean inControl() { + return baritone.getPathingBehavior().isPathing() || baritone != BaritoneAPI.getProvider().getPrimaryBaritone(); + } + public BlockBreakHelper getBlockBreakHelper() { return blockBreakHelper; } From 200211c186189a894af299c2627f5ab395c626ce Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 10 Jan 2019 13:52:52 -0800 Subject: [PATCH 51/63] dont continue walking if there is no process in charge --- src/main/java/baritone/utils/PathingControlManager.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index d1cb4f61..e748042e 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -82,11 +82,12 @@ public class PathingControlManager implements IPathingControlManager { public void preTick() { inControlLastTick = inControlThisTick; + PathingBehavior p = baritone.getPathingBehavior(); command = executeProcesses(); if (command == null) { + p.cancelSegmentIfSafe(); return; } - PathingBehavior p = baritone.getPathingBehavior(); switch (command.commandType) { case REQUEST_PAUSE: p.requestPause(); From f727e71eaf538f2727ff4d6b2d9fdeab67b37a16 Mon Sep 17 00:00:00 2001 From: Brady Date: Thu, 10 Jan 2019 19:57:09 -0600 Subject: [PATCH 52/63] Expose IPathingControlManager in IBaritone --- src/api/java/baritone/api/IBaritone.java | 3 +++ src/main/java/baritone/Baritone.java | 1 + 2 files changed, 4 insertions(+) diff --git a/src/api/java/baritone/api/IBaritone.java b/src/api/java/baritone/api/IBaritone.java index bbff9f9b..6bdb7d10 100644 --- a/src/api/java/baritone/api/IBaritone.java +++ b/src/api/java/baritone/api/IBaritone.java @@ -21,6 +21,7 @@ import baritone.api.behavior.ILookBehavior; import baritone.api.behavior.IPathingBehavior; import baritone.api.cache.IWorldProvider; import baritone.api.event.listener.IEventBus; +import baritone.api.pathing.calc.IPathingControlManager; import baritone.api.process.ICustomGoalProcess; import baritone.api.process.IFollowProcess; import baritone.api.process.IGetToBlockProcess; @@ -64,6 +65,8 @@ public interface IBaritone { */ IWorldProvider getWorldProvider(); + IPathingControlManager getPathingControlManager(); + IInputOverrideHandler getInputOverrideHandler(); ICustomGoalProcess getCustomGoalProcess(); diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 41fa36c5..c3a8e272 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -129,6 +129,7 @@ public class Baritone implements IBaritone { this.initialized = true; } + @Override public PathingControlManager getPathingControlManager() { return this.pathingControlManager; } From 1ad6a0d5b58ff1f27ab978d684e02728022bf909 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 10 Jan 2019 18:21:02 -0800 Subject: [PATCH 53/63] remove all that crap lol --- .../baritone/pathing/movement/Movement.java | 2 +- .../pathing/movement/MovementState.java | 37 +------------------ 2 files changed, 2 insertions(+), 37 deletions(-) diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index 2db8bf8d..ce78c231 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -127,7 +127,7 @@ public abstract class Movement implements IMovement, MovementHelper { currentState.getInputStates().forEach((input, forced) -> { baritone.getInputOverrideHandler().setInputForceState(input, forced); }); - currentState.getInputStates().replaceAll((input, forced) -> false); + currentState.getInputStates().clear(); // If the current status indicates a completed movement if (currentState.getStatus().isComplete()) { diff --git a/src/main/java/baritone/pathing/movement/MovementState.java b/src/main/java/baritone/pathing/movement/MovementState.java index 4432c503..73539698 100644 --- a/src/main/java/baritone/pathing/movement/MovementState.java +++ b/src/main/java/baritone/pathing/movement/MovementState.java @@ -20,7 +20,6 @@ package baritone.pathing.movement; import baritone.api.pathing.movement.MovementStatus; import baritone.api.utils.Rotation; import baritone.api.utils.input.Input; -import net.minecraft.util.math.Vec3d; import java.util.HashMap; import java.util.Map; @@ -29,7 +28,6 @@ import java.util.Optional; public class MovementState { private MovementStatus status; - private MovementTarget goal = new MovementTarget(); private MovementTarget target = new MovementTarget(); private final Map inputState = new HashMap<>(); @@ -42,15 +40,6 @@ public class MovementState { return status; } - public MovementTarget getGoal() { - return this.goal; - } - - public MovementState setGoal(MovementTarget goal) { - this.goal = goal; - return this; - } - public MovementTarget getTarget() { return this.target; } @@ -65,23 +54,12 @@ public class MovementState { return this; } - public boolean getInput(Input input) { - return this.inputState.getOrDefault(input, false); - } - public Map getInputStates() { return this.inputState; } public static class MovementTarget { - /** - * Necessary movement to achieve - *

- * TODO: Decide desiredMovement type - */ - public Vec3d position; - /** * Yaw and pitch angles that must be matched */ @@ -95,27 +73,14 @@ public class MovementState { private boolean forceRotations; public MovementTarget() { - this(null, null, false); - } - - public MovementTarget(Vec3d position) { - this(position, null, false); + this(null, false); } public MovementTarget(Rotation rotation, boolean forceRotations) { - this(null, rotation, forceRotations); - } - - public MovementTarget(Vec3d position, Rotation rotation, boolean forceRotations) { - this.position = position; this.rotation = rotation; this.forceRotations = forceRotations; } - public final Optional getPosition() { - return Optional.ofNullable(this.position); - } - public final Optional getRotation() { return Optional.ofNullable(this.rotation); } From 5f29bb3e7f4a98d8bdbd2b82e317083d8da4c01d Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 10 Jan 2019 18:55:55 -0800 Subject: [PATCH 54/63] gotta go fast --- src/main/java/baritone/utils/BlockStateInterface.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index be49c97c..5f8cac6a 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -46,6 +46,8 @@ public class BlockStateInterface { private Chunk prev = null; private CachedRegion prevCached = null; + private final boolean useTheRealWorld; + private static final IBlockState AIR = Blocks.AIR.getDefaultState(); public BlockStateInterface(IPlayerContext ctx) { @@ -64,6 +66,7 @@ public class BlockStateInterface { } else { this.loadedChunks = worldLoaded; // this will only be used on the main thread } + this.useTheRealWorld = !Baritone.settings().pathThroughCachedOnly.get(); if (!Minecraft.getMinecraft().isCallingFromMinecraftThread()) { throw new IllegalStateException(); } @@ -94,7 +97,7 @@ public class BlockStateInterface { return AIR; } - if (!Baritone.settings().pathThroughCachedOnly.get()) { + if (useTheRealWorld) { Chunk cached = prev; // there's great cache locality in block state lookups // generally it's within each movement From 09e94eaa8e55f635bae4fcae0b82d69b224e95b2 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 11 Jan 2019 13:02:03 -0800 Subject: [PATCH 55/63] not anymore --- src/main/java/baritone/pathing/movement/CalculationContext.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index 55933038..4c3b299d 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -75,7 +75,6 @@ public class CalculationContext { this.world = baritone.getPlayerContext().world(); this.worldData = (WorldData) baritone.getWorldProvider().getCurrentWorld(); this.bsi = new BlockStateInterface(world, worldData, forUseOnAnotherThread); // TODO TODO TODO - // new CalculationContext() needs to happen, can't add an argument (i'll beat you), can we get the world provider from currentlyTicking? this.toolSet = new ToolSet(player); this.hasThrowaway = Baritone.settings().allowPlace.get() && MovementHelper.throwaway(baritone.getPlayerContext(), false); this.hasWaterBucket = Baritone.settings().allowWaterBucketFall.get() && InventoryPlayer.isHotbar(player.inventory.getSlotFor(STACK_BUCKET_WATER)) && !world.provider.isNether(); From bec7f9be966196e5498fb1b5d1937cb9aa8a18f2 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 11 Jan 2019 13:18:31 -0800 Subject: [PATCH 56/63] this lets proguard optimize out one more double division --- .../baritone/pathing/movement/movements/MovementTraverse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index 0788ff8c..4a87a8a6 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -141,7 +141,7 @@ public class MovementTraverse extends Movement { if (srcDown == Blocks.FLOWING_WATER || srcDown == Blocks.WATER) { return COST_INF; // this is obviously impossible } - WC = WC * SNEAK_ONE_BLOCK_COST / WALK_ONE_BLOCK_COST;//since we are sneak backplacing, we are sneaking lol + WC = WC * (SNEAK_ONE_BLOCK_COST / WALK_ONE_BLOCK_COST);//since we are sneak backplacing, we are sneaking lol return WC + context.placeBlockCost + hardness1 + hardness2; } return COST_INF; From f23630064e3310f9674b25cdced8f9239e2f414d Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sat, 12 Jan 2019 22:33:46 -0800 Subject: [PATCH 57/63] reorder --- src/main/java/baritone/pathing/calc/AStarPathFinder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/calc/AStarPathFinder.java b/src/main/java/baritone/pathing/calc/AStarPathFinder.java index 6c62925e..70c2419e 100644 --- a/src/main/java/baritone/pathing/calc/AStarPathFinder.java +++ b/src/main/java/baritone/pathing/calc/AStarPathFinder.java @@ -125,10 +125,10 @@ public final class AStarPathFinder extends AbstractNodeCostSearch implements Hel if (actionCost <= 0 || Double.isNaN(actionCost)) { throw new IllegalStateException(moves + " calculated implausible cost " + actionCost); } + // check destination after verifying it's not COST_INF -- some movements return a static IMPOSSIBLE object with COST_INF and destination being 0,0,0 to avoid allocating a new result for every failed calculation if (moves.dynamicXZ && !worldBorder.entirelyContains(res.x, res.z)) { // see issue #218 continue; } - // check destination after verifying it's not COST_INF -- some movements return a static IMPOSSIBLE object with COST_INF and destination being 0,0,0 to avoid allocating a new result for every failed calculation if (!moves.dynamicXZ && (res.x != newX || res.z != newZ)) { throw new IllegalStateException(moves + " " + res.x + " " + newX + " " + res.z + " " + newZ); } From f8681d179d82001dd98b42c1f21a525d6b57b577 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 13 Jan 2019 00:00:52 -0800 Subject: [PATCH 58/63] TODO use nanotime when calc starts on dec 31 --- .../java/baritone/pathing/calc/AStarPathFinder.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/pathing/calc/AStarPathFinder.java b/src/main/java/baritone/pathing/calc/AStarPathFinder.java index 70c2419e..b32fc99f 100644 --- a/src/main/java/baritone/pathing/calc/AStarPathFinder.java +++ b/src/main/java/baritone/pathing/calc/AStarPathFinder.java @@ -64,7 +64,7 @@ public final class AStarPathFinder extends AbstractNodeCostSearch implements Hel MutableMoveResult res = new MutableMoveResult(); Favoring favored = favoring; BetterWorldBorder worldBorder = new BetterWorldBorder(calcContext.world.getWorldBorder()); - long startTime = System.nanoTime() / 1000000L; + long startTime = System.currentTimeMillis(); boolean slowPath = Baritone.settings().slowPath.get(); if (slowPath) { logDebug("slowPath is on, path timeout will be " + Baritone.settings().slowPathTimeoutMS.get() + "ms instead of " + primaryTimeout + "ms"); @@ -81,7 +81,7 @@ public final class AStarPathFinder extends AbstractNodeCostSearch implements Hel boolean minimumImprovementRepropagation = Baritone.settings().minimumImprovementRepropagation.get(); while (!openSet.isEmpty() && numEmptyChunk < pathingMaxChunkBorderFetch && !cancelRequested) { if ((numNodes & (timeCheckInterval - 1)) == 0) { // only call this once every 64 nodes (about half a millisecond) - long now = System.nanoTime() / 1000000L; // since nanoTime is slow on windows (takes many microseconds) + long now = System.currentTimeMillis(); // since nanoTime is slow on windows (takes many microseconds) if (now - failureTimeoutTime >= 0 || (!failing && now - primaryTimeoutTime >= 0)) { break; } @@ -96,7 +96,7 @@ public final class AStarPathFinder extends AbstractNodeCostSearch implements Hel mostRecentConsidered = currentNode; numNodes++; if (goal.isInGoal(currentNode.x, currentNode.y, currentNode.z)) { - logDebug("Took " + (System.nanoTime() / 1000000L - startTime) + "ms, " + numMovementsConsidered + " movements considered"); + logDebug("Took " + (System.currentTimeMillis() - startTime) + "ms, " + numMovementsConsidered + " movements considered"); return Optional.of(new Path(startNode, currentNode, numNodes, goal, calcContext)); } for (Moves moves : Moves.values()) { @@ -181,7 +181,7 @@ public final class AStarPathFinder extends AbstractNodeCostSearch implements Hel System.out.println(numMovementsConsidered + " movements considered"); System.out.println("Open set size: " + openSet.size()); System.out.println("PathNode map size: " + mapSize()); - System.out.println((int) (numNodes * 1.0 / ((System.nanoTime() / 1000000L - startTime) / 1000F)) + " nodes per second"); + System.out.println((int) (numNodes * 1.0 / ((System.currentTimeMillis() - startTime) / 1000F)) + " nodes per second"); double bestDist = 0; for (int i = 0; i < bestSoFar.length; i++) { if (bestSoFar[i] == null) { @@ -192,7 +192,7 @@ public final class AStarPathFinder extends AbstractNodeCostSearch implements Hel bestDist = dist; } if (dist > MIN_DIST_PATH * MIN_DIST_PATH) { // square the comparison since distFromStartSq is squared - logDebug("Took " + (System.nanoTime() / 1000000L - startTime) + "ms, A* cost coefficient " + COEFFICIENTS[i] + ", " + numMovementsConsidered + " movements considered"); + logDebug("Took " + (System.currentTimeMillis() - startTime) + "ms, A* cost coefficient " + COEFFICIENTS[i] + ", " + numMovementsConsidered + " movements considered"); if (COEFFICIENTS[i] >= 3) { System.out.println("Warning: cost coefficient is greater than three! Probably means that"); System.out.println("the path I found is pretty terrible (like sneak-bridging for dozens of blocks)"); From ae3fc14b52a1972febed67ac424e6040ef05e6f6 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 14 Jan 2019 19:52:31 -0800 Subject: [PATCH 59/63] refactor name --- src/main/java/baritone/behavior/InventoryBehavior.java | 2 +- src/main/java/baritone/utils/ToolSet.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/behavior/InventoryBehavior.java b/src/main/java/baritone/behavior/InventoryBehavior.java index a49cbb7d..8a1ea943 100644 --- a/src/main/java/baritone/behavior/InventoryBehavior.java +++ b/src/main/java/baritone/behavior/InventoryBehavior.java @@ -78,7 +78,7 @@ public class InventoryBehavior extends Behavior { continue; } if (klass.isInstance(stack.getItem())) { - double speed = ToolSet.calculateStrVsBlock(stack, against.getDefaultState()); // takes into account enchants + double speed = ToolSet.calculateSpeedVsBlock(stack, against.getDefaultState()); // takes into account enchants if (speed > bestSpeed) { bestSpeed = speed; bestInd = i; diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index 0aa02afd..ab8d2e40 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -103,7 +103,7 @@ public class ToolSet { IBlockState blockState = b.getDefaultState(); for (byte i = 0; i < 9; i++) { ItemStack itemStack = player.inventory.getStackInSlot(i); - double v = calculateStrVsBlock(itemStack, blockState); + double v = calculateSpeedVsBlock(itemStack, blockState); if (v > value) { value = v; best = i; @@ -128,7 +128,7 @@ public class ToolSet { */ private double getBestDestructionTime(Block b) { ItemStack stack = player.inventory.getStackInSlot(getBestSlot(b)); - return calculateStrVsBlock(stack, b.getDefaultState()); + return calculateSpeedVsBlock(stack, b.getDefaultState()); } /** @@ -138,7 +138,7 @@ public class ToolSet { * @param state the blockstate to be mined * @return how long it would take in ticks */ - public static double calculateStrVsBlock(ItemStack item, IBlockState state) { + public static double calculateSpeedVsBlock(ItemStack item, IBlockState state) { float hardness = state.getBlockHardness(null, null); if (hardness < 0) { return -1; From 9dfcef6356e421c510463989f35d7fad30757584 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 15 Jan 2019 17:21:50 -0800 Subject: [PATCH 60/63] crucial performance optimization --- src/main/java/baritone/utils/ToolSet.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/baritone/utils/ToolSet.java b/src/main/java/baritone/utils/ToolSet.java index ab8d2e40..fa71a6b0 100644 --- a/src/main/java/baritone/utils/ToolSet.java +++ b/src/main/java/baritone/utils/ToolSet.java @@ -154,11 +154,10 @@ public class ToolSet { speed /= hardness; if (state.getMaterial().isToolNotRequired() || (!item.isEmpty() && item.canHarvestBlock(state))) { - speed /= 30; + return speed / 30; } else { - speed /= 100; + return speed / 100; } - return speed; } /** From 59320d9b85672f079d3b14ea8a1ed00e67d90fcd Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 16 Jan 2019 13:37:39 -0600 Subject: [PATCH 61/63] Auto test class javadoc --- src/main/java/baritone/utils/BaritoneAutoTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index 2e4a5706..b7ae5fbb 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -32,6 +32,15 @@ import net.minecraft.world.GameType; import net.minecraft.world.WorldSettings; import net.minecraft.world.WorldType; +/** + * Responsible for automatically testing Baritone's pathing algorithm by automatically creating a world with a specific + * seed, setting a specified goal, and only allowing a certain amount of ticks to pass before the pathing test is + * considered a failure. In order to test locally, docker may be used, or through an IDE: Create a run config which runs + * in a separate directory from the primary one (./run), and set the enrivonmental variable {@code BARITONE_AUTO_TEST} + * to {@code true}. + * + * @author leijurv, Brady + */ public class BaritoneAutoTest implements AbstractGameEventListener, Helper { public static final BaritoneAutoTest INSTANCE = new BaritoneAutoTest(); From db24822d2f908f839a4e1fc2a1808451d19f1045 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 16 Jan 2019 13:50:15 -0600 Subject: [PATCH 62/63] Fix cursed exception --- src/api/java/baritone/api/utils/PathCalculationResult.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/api/java/baritone/api/utils/PathCalculationResult.java b/src/api/java/baritone/api/utils/PathCalculationResult.java index 20aef9de..a71c31a6 100644 --- a/src/api/java/baritone/api/utils/PathCalculationResult.java +++ b/src/api/java/baritone/api/utils/PathCalculationResult.java @@ -19,6 +19,7 @@ package baritone.api.utils; import baritone.api.pathing.calc.IPath; +import java.util.Objects; import java.util.Optional; public class PathCalculationResult { @@ -31,11 +32,9 @@ public class PathCalculationResult { } public PathCalculationResult(Type type, IPath path) { + Objects.requireNonNull(type); this.path = path; this.type = type; - if (type == null) { - throw new IllegalArgumentException("come on"); - } } public final Optional getPath() { From 2daedecf9233c07d3dcf415b9ecbe2a8559ac3c4 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 16 Jan 2019 17:42:43 -0800 Subject: [PATCH 63/63] maybe fix --- src/main/java/baritone/behavior/MemoryBehavior.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/baritone/behavior/MemoryBehavior.java b/src/main/java/baritone/behavior/MemoryBehavior.java index 49986018..696e107d 100644 --- a/src/main/java/baritone/behavior/MemoryBehavior.java +++ b/src/main/java/baritone/behavior/MemoryBehavior.java @@ -21,6 +21,7 @@ import baritone.Baritone; import baritone.api.event.events.BlockInteractEvent; import baritone.api.event.events.PacketEvent; import baritone.api.event.events.PlayerUpdateEvent; +import baritone.api.event.events.TickEvent; import baritone.api.event.events.type.EventState; import baritone.cache.ContainerMemory; import baritone.cache.Waypoint; @@ -60,6 +61,14 @@ public final class MemoryBehavior extends Behavior { super(baritone); } + @Override + public synchronized void onTick(TickEvent event) { + if (event.getType() == TickEvent.Type.OUT) { + enderChestWindowId = null; + futureInventories.clear(); + } + } + @Override public synchronized void onPlayerUpdate(PlayerUpdateEvent event) { if (event.getState() == EventState.PRE) {