diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.kt index 90d787c2c..05c77a04c 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.kt @@ -243,8 +243,9 @@ abstract class Entity( testDelta.y = STEP_HEIGHT val stepMovementY = collisionsToCheck.computeOffset(aabb + testDelta, -STEP_HEIGHT, Axes.Y) if (stepMovementY < 0 && stepMovementY >= -STEP_HEIGHT) { - delta.y = STEP_HEIGHT + stepMovementY - aabb.offsetAssign(0f, delta.y, 0f) + testDelta.y = STEP_HEIGHT + stepMovementY + aabb.offsetAssign(0f, testDelta.y, 0f) + delta.y += testDelta.y } } val xPriority = delta.x > delta.z @@ -268,6 +269,9 @@ abstract class Entity( velocity.x = 0.0f } } + if (delta.length() > deltaPosition.length() + STEP_HEIGHT) { + return Vec3() // abort all movement if the collision system would move the entity further than wanted + } return delta }