- 6
- 0
Здравствуйте. Мне необходимо реализовать логику бега игрока параллельно какой-либо оси в зависимости от взгляда игрока (то есть если игрок смотрит в сторону X, то по оси X и т.д.). Сделал я это вот так (метод выполняется каждый тик):
Число 0.2806 получилось делением гугловской скорости бега 5,612 м/с на 20 тиков.
В одиночной игре всё нормально, игрок бежит с нужной скоростью, однако при подключении к любому стороннему серверу игрока флагает античит и игрок бежать не может.
У меня есть подозрение, что это из-за своеобразного моментального возрастания скорости до 0.2806 блоков в тик, ведь в ванильном майнкрафте скорость увеличивается более плавно.
Как реализовать нормальную плавную логику бега? То есть чтобы игрок ускорялся по-ванильному плавно и также замедлялся? У меня нет цели написать какие-то читы, однако обидно понимать, что дальше одиночной игры этот код нигде использоваться не будет.
UPD. Переписал на что-то типа:
, античит всё равно флагает.
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;
}
Последнее редактирование: