Плавная логика бега

Версия Minecraft
1.12.2
API
Forge
Здравствуйте. Мне необходимо реализовать логику бега игрока параллельно какой-либо оси в зависимости от взгляда игрока (то есть если игрок смотрит в сторону X, то по оси X и т.д.). Сделал я это вот так (метод выполняется каждый тик):
Java:
public static void goForward(Minecraft mc) {
        EntityPlayerSP player = mc.player;
        if (player != null) {
            float yaw = player.rotationYaw;

            if (yaw != 180){ //Преобразование угла к диапазону от -180 до 180
                yaw = (yaw + 180) % 360;
                if (yaw < 0){
                    yaw += 360;
                }
                yaw -= 180;
            }

            float speed = SPRINT_SPEED; //0.2806f

            if (yaw >= -45 && yaw < 45) {
                // Направление взгляда близко к северу
                player.motionX = 0.0;
                player.motionY = 0.0;
                player.motionZ = speed;
            } else if (yaw >= 45 && yaw < 135) {
                // Направление взгляда близко к востоку
                player.motionX = -speed;
                player.motionY = 0.0;
                player.motionZ = 0.0;
            } else if (yaw >= -135 && yaw < -45) {
                // Направление взгляда близко к западу
                player.motionX = speed;
                player.motionY = 0.0;
                player.motionZ = 0.0;
            } else if ((yaw >= 135 && yaw <= 180) || (yaw >= -180 && yaw < -135)) {
                // Направление взгляда близко к югу
                player.motionX = 0.0;
                player.motionY = 0.0;
                player.motionZ = -speed;
            }
        }
    }


Число 0.2806 получилось делением гугловской скорости бега 5,612 м/с на 20 тиков.

В одиночной игре всё нормально, игрок бежит с нужной скоростью, однако при подключении к любому стороннему серверу игрока флагает античит и игрок бежать не может.

У меня есть подозрение, что это из-за своеобразного моментального возрастания скорости до 0.2806 блоков в тик, ведь в ванильном майнкрафте скорость увеличивается более плавно.

Как реализовать нормальную плавную логику бега? То есть чтобы игрок ускорялся по-ванильному плавно и также замедлялся? У меня нет цели написать какие-то читы, однако обидно понимать, что дальше одиночной игры этот код нигде использоваться не будет.

UPD. Переписал на что-то типа:

Java:
if (mc.player != null){
   float f = mc.player.rotationYaw * 0.017F;
   mc.player.motionX -= MathHelper.sin(f) * 0.0637D; //числа были взяты экспериментально, чтобы добиться скорости в 5.61 м/с
   mc.player.motionZ += MathHelper.cos(f) * 0.0637D;
}
, античит всё равно флагает.
 
Последнее редактирование:
Сверху