diff --git a/api/src/main/java/ru/dragonestia/msb3/api/ai/AI.java b/api/src/main/java/ru/dragonestia/msb3/api/ai/AI.java index f64927c..f05cb13 100644 --- a/api/src/main/java/ru/dragonestia/msb3/api/ai/AI.java +++ b/api/src/main/java/ru/dragonestia/msb3/api/ai/AI.java @@ -130,7 +130,13 @@ public class AI { if (nextTarget == null) nextTarget = destinationData.position(); boolean nextIsRePath = nextTarget.sameBlock(Pos.ZERO); + var prevPos = entity.getPosition(); nodeFollower.moveTowards(currentTarget, nodeFollower.movementSpeed(), nextIsRePath ? currentTarget : nextTarget); + var delta = entity.getPosition().sub(prevPos); + if (delta.isZero()) { + nodeFollower.jump(currentTarget, nextTarget); + } + // TODO: исправить баг, в данном месте, когда Entity не движется вообще. Сделать хорошую проверку на застревание // TODO: присутствует баг, что если как-то помешать Entity следовать до точки, например поставить перед ним блок, то он перестанет идти // TODO: хождение по неполноценным блокам - огромная проблема. Entity попросту застревает в них diff --git a/api/src/main/java/ru/dragonestia/msb3/api/ai/navigator/follower/GroundNodeFollower.java b/api/src/main/java/ru/dragonestia/msb3/api/ai/navigator/follower/GroundNodeFollower.java index 9231202..e20e524 100644 --- a/api/src/main/java/ru/dragonestia/msb3/api/ai/navigator/follower/GroundNodeFollower.java +++ b/api/src/main/java/ru/dragonestia/msb3/api/ai/navigator/follower/GroundNodeFollower.java @@ -52,7 +52,8 @@ public class GroundNodeFollower implements NodeFollower { @Override public boolean isAtPoint(Point point) { - return entity.getPosition().distanceSquared(point) < 0.5 * 0.5; + var d = entity.getPosition().sub(point); + return d.x() * d.x() + d.z() * d.z() < 0.5 * 0.5; } public void jump(float height) {