forbid movement across world border (in outside direction)

This commit is contained in:
Bixilon 2022-04-26 21:12:48 +02:00
parent 9807128c5b
commit c1b4559667
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4

View File

@ -396,6 +396,8 @@ abstract class Entity(
}
fun move(delta: Vec3d = velocity) {
val positionBefore = position
val wasInBorder = !connection.world.border.isOutside(positionBefore)
if (!hasCollisions) {
forceMove(delta)
return
@ -415,9 +417,21 @@ abstract class Entity(
movement = connection.collisionDetector.sneak(this, movement)
}
val collisionMovement = connection.collisionDetector.collide(null, movement, aabb, true)
var collisionMovement = connection.collisionDetector.collide(null, movement, aabb, true)
val targetPosition = positionBefore + collisionMovement
val inBorder = !connection.world.border.isOutside(targetPosition)
if (wasInBorder && !inBorder) {
val border = connection.world.border
val xDirection = if (collisionMovement.x < 0) -1 else 1
val zDirection = if (collisionMovement.z < 0) -1 else 1
collisionMovement = Vec3d(
xDirection * minOf(abs(collisionMovement.x), border.diameter / 2 - abs(targetPosition.x) - abs(border.center.x), 0.0),
collisionMovement.y,
zDirection * minOf(abs(collisionMovement.z), border.diameter / 2 - abs(targetPosition.z) - abs(border.center.y), 0.0)
)
}
forceMove(collisionMovement)