From 47c48f7ee9bd9d737bacae6bcbfed49f0236c072 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ossi=20Erkkil=C3=A4?= Date: Thu, 13 Aug 2026 18:35:13 +0300 Subject: [PATCH] Fix Human movement by restoring the body rotation tick The 25w02a update (ac2bbe5557) adapted HumanEntity to Mojang's new tickHeadTurn(float) signature but dropped the super call in the process. Mob.tickHeadTurn is solely bodyRotationControl.clientTick(), which is the only thing that ever writes yBodyRot, so the Human's yBodyRot was frozen at its spawn value. Since LookControl clamps yHeadRot to within getMaxHeadYRot() of yBodyRot while navigating, and this override copies yHeadRot onto yRot (the vector moveRelative steers by), the movement direction was pinned to a cone around that stale angle and MoveControl's steering was overwritten every tick. Humans walked into walls, moved sideways, and oscillated between two blocks. --- .../spongepowered/common/entity/living/human/HumanEntity.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/spongepowered/common/entity/living/human/HumanEntity.java b/src/main/java/org/spongepowered/common/entity/living/human/HumanEntity.java index 5ce21e78282..4669357f3b1 100644 --- a/src/main/java/org/spongepowered/common/entity/living/human/HumanEntity.java +++ b/src/main/java/org/spongepowered/common/entity/living/human/HumanEntity.java @@ -304,6 +304,8 @@ public void internalSetAbsorptionAmount(float amount) { @Override protected void tickHeadTurn(final float p_110146_1_) { + // Must run first, it is the only thing that updates yBodyRot, which the look control clamps yHeadRot against + super.tickHeadTurn(p_110146_1_); // Make the body rotation follow head rotation this.setYRot(this.getYHeadRot()); }