diff --git a/pathetic-api/src/main/java/org/patheloper/api/pathing/strategy/strategies/JumpablePathfinderStrategy.java b/pathetic-api/src/main/java/org/patheloper/api/pathing/strategy/strategies/JumpablePathfinderStrategy.java index 29c743c9..c7a21f78 100644 --- a/pathetic-api/src/main/java/org/patheloper/api/pathing/strategy/strategies/JumpablePathfinderStrategy.java +++ b/pathetic-api/src/main/java/org/patheloper/api/pathing/strategy/strategies/JumpablePathfinderStrategy.java @@ -48,8 +48,21 @@ public boolean isValid(@NonNull PathValidationContext pathValidationContext) { return true; } - if ((position.getBlockY() - lastValidPosition.getBlockY()) > jumpHeight) return false; + int heightDiff = position.getBlockY() - lastValidPosition.getBlockY(); + if (isJumpingDown(position, lastValidPosition)) { + heightDiff *= -1; + } + + if (heightDiff > jumpHeight) { + return false; + } return startBlock.isPassable() && position.distance(lastValidPosition) <= maxJumpDistance; } + + private boolean isJumpingDown(PathPosition position, PathPosition lastValidPosition) { + return position.getBlockX() == lastValidPosition.getBlockX() + && position.getBlockZ() == lastValidPosition.getBlockZ() + && position.getBlockY() < lastValidPosition.getBlockY(); + } }