From 1a3a23ba7e95018135166990d81e0af3f1f677ba Mon Sep 17 00:00:00 2001 From: AlexProgrammerDE <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Thu, 28 Nov 2024 10:15:17 +0100 Subject: [PATCH] Initial work on fixes for squeezing --- .../server/pathfinding/execution/MovementAction.java | 1 - .../soulfiremc/server/pathfinding/graph/PathConstraint.java | 5 ++--- .../server/pathfinding/graph/actions/SimpleMovement.java | 6 +++--- .../graph/actions/movement/MovementModifier.java | 5 +++++ 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/server/src/main/java/com/soulfiremc/server/pathfinding/execution/MovementAction.java b/server/src/main/java/com/soulfiremc/server/pathfinding/execution/MovementAction.java index 24796c57b..8e9c90b6b 100644 --- a/server/src/main/java/com/soulfiremc/server/pathfinding/execution/MovementAction.java +++ b/server/src/main/java/com/soulfiremc/server/pathfinding/execution/MovementAction.java @@ -45,7 +45,6 @@ public boolean isCompleted(BotConnection connection) { var blockMeta = level.getBlockState(blockPosition); var targetMiddleBlock = VectorHelper.topMiddleOfBlock(blockPosition.toVector3d(), blockMeta); if (MathHelper.isOutsideTolerance(botPosition.getY(), targetMiddleBlock.getY(), 0.25)) { - System.out.println("Y level is off"); // We want to be on the same Y level return false; } else { diff --git a/server/src/main/java/com/soulfiremc/server/pathfinding/graph/PathConstraint.java b/server/src/main/java/com/soulfiremc/server/pathfinding/graph/PathConstraint.java index f758ff4fb..b9e78639a 100644 --- a/server/src/main/java/com/soulfiremc/server/pathfinding/graph/PathConstraint.java +++ b/server/src/main/java/com/soulfiremc/server/pathfinding/graph/PathConstraint.java @@ -74,9 +74,8 @@ public boolean canBreakBlockType(BlockType blockType) { } public boolean collidesWithAtEdge(SFVec3i block, BlockState blockState, Vector3d position) { - System.out.println("collidesWithAtEdge block: " + block + " blockState: " + blockState + " position: " + position); - if (DO_NOT_SQUEEZING_THROUGH_DIAGONALS && blockState.collisionShape().hasCollisions()) { - return true; + if (DO_NOT_SQUEEZING_THROUGH_DIAGONALS) { + return blockState.collisionShape().hasCollisions(); } return blockState.collidesWith(block.toVector3i(), entity.dimensions().makeBoundingBox(position)); diff --git a/server/src/main/java/com/soulfiremc/server/pathfinding/graph/actions/SimpleMovement.java b/server/src/main/java/com/soulfiremc/server/pathfinding/graph/actions/SimpleMovement.java index 5ddf96339..b0db2e05f 100644 --- a/server/src/main/java/com/soulfiremc/server/pathfinding/graph/actions/SimpleMovement.java +++ b/server/src/main/java/com/soulfiremc/server/pathfinding/graph/actions/SimpleMovement.java @@ -222,12 +222,12 @@ public List> listDiagonalCollisionBlock for (var side : MovementSide.VALUES) { // If these blocks are solid, the bot moves slower because the bot is running around a corner - var corner = direction.side(side).offset(FEET_POSITION_RELATIVE_BLOCK); - var collisionCheck = direction.offset(SFVec3i.ZERO).toVector3d().mul(0.5); + var corner = modifier.offsetIfJump(direction.side(side).offset(FEET_POSITION_RELATIVE_BLOCK)); + var collisionCheck = modifier.offsetIfJump(direction.offset(FEET_POSITION_RELATIVE_BLOCK).toVector3d().mul(0.5)); for (var bodyOffset : BodyPart.VALUES) { // Apply jump shift to target edge and offset for body part list.add(new Triplet<>( - bodyOffset.offset(modifier.offsetIfJump(corner)), + bodyOffset.offset(corner), side, collisionCheck )); diff --git a/server/src/main/java/com/soulfiremc/server/pathfinding/graph/actions/movement/MovementModifier.java b/server/src/main/java/com/soulfiremc/server/pathfinding/graph/actions/movement/MovementModifier.java index a12056ae2..cc218b9c2 100644 --- a/server/src/main/java/com/soulfiremc/server/pathfinding/graph/actions/movement/MovementModifier.java +++ b/server/src/main/java/com/soulfiremc/server/pathfinding/graph/actions/movement/MovementModifier.java @@ -19,6 +19,7 @@ import com.soulfiremc.server.pathfinding.SFVec3i; import lombok.RequiredArgsConstructor; +import org.cloudburstmc.math.vector.Vector3d; @RequiredArgsConstructor public enum MovementModifier { @@ -43,4 +44,8 @@ public SFVec3i offset(SFVec3i vector) { public SFVec3i offsetIfJump(SFVec3i vector) { return this == MovementModifier.JUMP_UP_BLOCK ? vector.add(0, 1, 0) : vector; } + + public Vector3d offsetIfJump(Vector3d vector) { + return this == MovementModifier.JUMP_UP_BLOCK ? vector.add(0, 1, 0) : vector; + } }