diff --git a/src/main/java/baritone/bot/behavior/impl/LookBehaviorUtils.java b/src/main/java/baritone/bot/behavior/impl/LookBehaviorUtils.java index 43a8fbb4..f3c0e1fa 100644 --- a/src/main/java/baritone/bot/behavior/impl/LookBehaviorUtils.java +++ b/src/main/java/baritone/bot/behavior/impl/LookBehaviorUtils.java @@ -21,6 +21,7 @@ import baritone.bot.utils.BlockStateInterface; import baritone.bot.utils.Helper; import baritone.bot.utils.Rotation; import baritone.bot.utils.Utils; +import net.minecraft.block.BlockFire; import net.minecraft.block.state.IBlockState; import net.minecraft.util.math.*; @@ -61,6 +62,7 @@ public final class LookBehaviorUtils implements Helper { return Optional.of(new Rotation(mc.player.rotationYaw, mc.player.rotationPitch + 0.0001f)); } Optional possibleRotation = reachableCenter(pos); + System.out.println("center: " + possibleRotation); if (possibleRotation.isPresent()) return possibleRotation; @@ -99,10 +101,17 @@ public final class LookBehaviorUtils implements Helper { protected static Optional reachableOffset(BlockPos pos, Vec3d offsetPos) { Rotation rotation = Utils.calcRotationFromVec3d(mc.player.getPositionEyes(1.0F), offsetPos); RayTraceResult result = rayTraceTowards(rotation); - if (result != null - && result.typeOfHit == RayTraceResult.Type.BLOCK - && result.getBlockPos().equals(pos)) - return Optional.of(rotation); + System.out.println(result); + if (result != null && result.typeOfHit == RayTraceResult.Type.BLOCK) { + if (result.getBlockPos().equals(pos)) { + return Optional.of(rotation); + } + if (BlockStateInterface.get(pos).getBlock() instanceof BlockFire) { + if (result.getBlockPos().equals(pos.down())) { + return Optional.of(rotation); + } + } + } return Optional.empty(); } diff --git a/src/main/java/baritone/bot/pathing/movement/Movement.java b/src/main/java/baritone/bot/pathing/movement/Movement.java index cb9b3067..ce291de8 100644 --- a/src/main/java/baritone/bot/pathing/movement/Movement.java +++ b/src/main/java/baritone/bot/pathing/movement/Movement.java @@ -111,8 +111,10 @@ public abstract class Movement implements Helper, MovementHelper { if (state.getStatus() == MovementStatus.WAITING) return true; + boolean somethingInTheWay = false; for (BlockPos blockPos : positionsToBreak) { if (!MovementHelper.canWalkThrough(blockPos)) { + somethingInTheWay = true; Optional reachable = LookBehaviorUtils.reachable(blockPos); if (reachable.isPresent()) { state.setTarget(new MovementState.MovementTarget(reachable.get())).setInput(Input.CLICK_LEFT, true); @@ -120,6 +122,12 @@ public abstract class Movement implements Helper, MovementHelper { } } } + if (somethingInTheWay) { + // There's a block or blocks that we can't walk through, but we have no target rotation to reach any + // So don't return true, actually set state to unreachable + state.setStatus(MovementStatus.UNREACHABLE); + return true; + } return true; } diff --git a/src/main/java/baritone/bot/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/bot/pathing/movement/movements/MovementFall.java index 7fe5dac3..462acd25 100644 --- a/src/main/java/baritone/bot/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/bot/pathing/movement/movements/MovementFall.java @@ -50,11 +50,10 @@ public class MovementFall extends Movement { if (!BlockStateInterface.isWater(dest) && src.getY() - dest.getY() > 3) { placeBucketCost = ActionCosts.PLACE_ONE_BLOCK_COST; } - double cost = getTotalHardnessOfBlocksToBreak(context.getToolSet()); - if (cost != 0) { + if (getTotalHardnessOfBlocksToBreak(context.getToolSet()) != 0) { return COST_INF; } - return WALK_OFF_BLOCK_COST + FALL_N_BLOCKS_COST[positionsToBreak.length - 1] + cost + placeBucketCost; + return WALK_OFF_BLOCK_COST + FALL_N_BLOCKS_COST[positionsToBreak.length - 1] + placeBucketCost; } @Override @@ -75,7 +74,7 @@ public class MovementFall extends Movement { state.setStatus(MovementStatus.UNREACHABLE); return state; } - if (playerFeet().getY() - dest.getY() < mc.playerController.getBlockReachDistance()) { + if (player().posY - dest.getY() < mc.playerController.getBlockReachDistance()) { player().inventory.currentItem = player().inventory.getSlotFor(STACK_BUCKET_WATER); targetRotation = LookBehaviorUtils.reachable(dest.down()); } diff --git a/src/main/java/baritone/bot/utils/Utils.java b/src/main/java/baritone/bot/utils/Utils.java index acad8c85..9ef5621f 100755 --- a/src/main/java/baritone/bot/utils/Utils.java +++ b/src/main/java/baritone/bot/utils/Utils.java @@ -17,6 +17,7 @@ package baritone.bot.utils; +import net.minecraft.block.BlockFire; import net.minecraft.block.state.IBlockState; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -79,6 +80,10 @@ public final class Utils { double xDiff = (bbox.minX + bbox.maxX) / 2; double yDiff = (bbox.minY + bbox.maxY) / 2; double zDiff = (bbox.minZ + bbox.maxZ) / 2; + if (b.getBlock() instanceof BlockFire) {//look at bottom of fire when putting it out + yDiff = 0; + } + System.out.println(xDiff + " " + yDiff + " " + zDiff); return new Vec3d( orig.getX() + xDiff, orig.getY() + yDiff,