diff --git a/server/player/player.go b/server/player/player.go index 728494a69..bbe1cf5de 100644 --- a/server/player/player.go +++ b/server/player/player.go @@ -2866,7 +2866,9 @@ func (p *Player) checkEntitySteppers() { // checkOnGround checks if the player is currently considered to be on the ground. func (p *Player) checkOnGround(deltaPos mgl64.Vec3) bool { - box := Type.BBox(p).Translate(p.Position()).Extend(mgl64.Vec3{0, -0.05}).Extend(deltaPos.Mul(-1.0)) + // Probe straight down (0.05 plus this tick's descent) instead of along the + // whole movement, so a block the player falls past at its side is not ground. + box := Type.BBox(p).Translate(p.Position()).Extend(mgl64.Vec3{0, -0.05}).Extend(mgl64.Vec3{0, math.Min(deltaPos[1], 0)}) b := box.Grow(1) epsilon := mgl64.Vec3{mgl64.Epsilon, mgl64.Epsilon, mgl64.Epsilon}