diff --git a/src/main/java/baritone/bot/pathing/calc/Path.java b/src/main/java/baritone/bot/pathing/calc/Path.java index f8223d9d..2fd71cb3 100644 --- a/src/main/java/baritone/bot/pathing/calc/Path.java +++ b/src/main/java/baritone/bot/pathing/calc/Path.java @@ -1,10 +1,11 @@ package baritone.bot.pathing.calc; -import baritone.bot.pathing.movement.Movement; import baritone.bot.pathing.goals.Goal; +import baritone.bot.pathing.movement.Movement; import net.minecraft.util.math.BlockPos; import java.util.*; +import java.util.stream.Collectors; /** * A node based implementation of IPath @@ -87,11 +88,11 @@ class Path implements IPath { @Override public Collection getBlocksToMine() { - return null; + return movements.stream().map(move -> move.positionsToBreak).flatMap(Arrays::stream).collect(Collectors.toCollection(HashSet::new)); } @Override public Collection getBlocksToPlace() { - return null; + return movements.stream().map(move -> move.positionsToPlace).flatMap(Arrays::stream).collect(Collectors.toCollection(HashSet::new)); } } diff --git a/src/main/java/baritone/bot/pathing/movement/ActionCosts.java b/src/main/java/baritone/bot/pathing/movement/ActionCosts.java index 6012c23f..ff407ffb 100644 --- a/src/main/java/baritone/bot/pathing/movement/ActionCosts.java +++ b/src/main/java/baritone/bot/pathing/movement/ActionCosts.java @@ -13,6 +13,10 @@ public interface ActionCosts { double LADDER_DOWN_ONE_COST = 20 / 3; double SNEAK_ONE_BLOCK_COST = 20 / 1.3; double SPRINT_ONE_BLOCK_COST = 20 / 5.612; + /** + * To walk off an edge you need to walk 0.5 to the edge then 0.3 to start falling off + */ + double WALK_OFF_BLOCK_COST = WALK_ONE_BLOCK_COST * 0.8; /** * Doesn't include walking forwards, just the falling diff --git a/src/main/java/baritone/bot/pathing/movement/Movement.java b/src/main/java/baritone/bot/pathing/movement/Movement.java index e5f6eb28..5e9bc3bd 100644 --- a/src/main/java/baritone/bot/pathing/movement/Movement.java +++ b/src/main/java/baritone/bot/pathing/movement/Movement.java @@ -17,14 +17,25 @@ public abstract class Movement implements AbstractGameEventListener, Helper, Mov protected MovementState currentState; protected final BlockPos src; protected final BlockPos dest; + /** + * The positions that need to be broken before this movement can ensue + */ + public final BlockPos[] positionsToBreak; + /** + * The positions where we need to place a block before this movement can ensue + */ + public final BlockPos[] positionsToPlace; - protected Movement(BlockPos src, BlockPos dest) { + + protected Movement(BlockPos src, BlockPos dest, BlockPos[] toBreak, BlockPos[] toPlace) { this.src = src; this.dest = dest; + this.positionsToBreak = toBreak; + this.positionsToPlace = toPlace; } - protected Movement(BlockPos src, BlockPos dest, Vec3d rotationTarget) { - this(src, dest); + protected Movement(BlockPos src, BlockPos dest, BlockPos[] toBreak, BlockPos[] toPlace, Vec3d rotationTarget) { + this(src, dest, toBreak, toPlace); currentState = new MovementState() .setLookDirection(rotationTarget) .setStatus(MovementStatus.WAITING); diff --git a/src/main/java/baritone/bot/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/bot/pathing/movement/movements/MovementAscend.java index bf45602b..126b8931 100644 --- a/src/main/java/baritone/bot/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/bot/pathing/movement/movements/MovementAscend.java @@ -9,7 +9,7 @@ import net.minecraft.util.math.BlockPos; public class MovementAscend extends Movement { public MovementAscend(BlockPos src, BlockPos dest) { - super(src, dest); + super(src, dest, new BlockPos[]{dest, src.up(2), dest.up()}, new BlockPos[]{dest.down()}); } @Override @@ -17,11 +17,6 @@ public class MovementAscend extends Movement { throw new UnsupportedOperationException(); } - //my suggestion: public MovementAscend(BlockPos src, BlockPos dest){ - // super(src, dest, new BlockPos[]{dest, src.up(2), dest.up()}, new BlockPos[]{dest.down()}); - // This basically says that dest, src.up3 and dest.up need to be passable before this movement can start - // and that dest.down needs to be stand-on-able - @Override public MovementState calcState() { MovementState latestState = currentState.setInput(InputOverrideHandler.Input.JUMP, true).setInput(InputOverrideHandler.Input.MOVE_FORWARD, true); diff --git a/src/main/resources/baritone/pathfinding/actions/ActionBridge.java b/src/main/resources/baritone/pathfinding/actions/ActionBridge.java index 4159b4a5..876c5737 100644 --- a/src/main/resources/baritone/pathfinding/actions/ActionBridge.java +++ b/src/main/resources/baritone/pathfinding/actions/ActionBridge.java @@ -5,8 +5,6 @@ import baritone.movement.MovementManager; import baritone.ui.LookManager; import baritone.util.Out; import baritone.util.ToolSet; -import java.util.Objects; -import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.BlockLadder; import net.minecraft.block.BlockVine; @@ -16,8 +14,10 @@ import net.minecraft.init.Blocks; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; +import java.util.Objects; +import java.util.Random; + /** - * * @author leijurv */ public class ActionBridge extends ActionPlaceOrBreak { @@ -76,6 +76,7 @@ public class ActionBridge extends ActionPlaceOrBreak { //Out.log("Can't walk on " + Baritone.get(positionsToPlace[0]).getBlock()); } } + boolean wasTheBridgeBlockAlwaysThere = true;//did we have to place a bridge block or was it always there public Boolean oneInTen = null;//a one in ten chance