if (entity instanceof net.minecraft.world.entity.player.Player player) { net.mcreator.[yourmodname].network.YourModVariables.PlayerVariables vars = player.getCapability(net.mcreator.[yourmodname].network.YourModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new net.mcreator.[yourmodname].network.YourModVariables.PlayerVariables()); float currentBodyYaw = (float) [global_bodyYaw]; if (currentBodyYaw == 0.0f && player.getYRot() != 0.0f) { currentBodyYaw = player.getYRot(); } float headYaw = player.getYRot(); double dx = player.getX() - [global_lastX]; double dz = player.getZ() - [global_lastZ]; int moveGrace = player.getPersistentData().getInt("move_grace"); if (dx * dx + dz * dz > 0.001) { moveGrace = 5; float moveYaw = (float)(Math.atan2(-dx, dz) * (180.0 / Math.PI)); float relativeYaw = net.minecraft.util.Mth.wrapDegrees(moveYaw - headYaw); player.getPersistentData().putFloat("last_rel_yaw", relativeYaw); [global_lastX] = player.getX(); [global_lastZ] = player.getZ(); } else if (moveGrace > 0) { moveGrace--; } player.getPersistentData().putInt("move_grace", moveGrace); boolean isMoving = moveGrace > 0; float idealBodyYaw = headYaw; if (isMoving) { float relYaw = player.getPersistentData().getFloat("last_rel_yaw"); if (Math.abs(relYaw) < 135.0f) { if (relYaw > 50.0f) relYaw = 50.0f; if (relYaw < -50.0f) relYaw = -50.0f; idealBodyYaw = headYaw + relYaw; } } float diffIdeal = net.minecraft.util.Mth.wrapDegrees(idealBodyYaw - currentBodyYaw); boolean isInteracting = player.swinging || player.isUsingItem(); if (isInteracting) { currentBodyYaw += diffIdeal * 0.4f; } else if (isMoving) { currentBodyYaw += diffIdeal * 0.4f; } float diffHeadBody = net.minecraft.util.Mth.wrapDegrees(headYaw - currentBodyYaw); if (diffHeadBody > 50.0f) { currentBodyYaw = headYaw - 50.0f; } else if (diffHeadBody < -50.0f) { currentBodyYaw = headYaw + 50.0f; } [global_bodyYaw] = (double) net.minecraft.util.Mth.wrapDegrees(currentBodyYaw); vars.syncPlayerVariables(player); }