Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос Фикс мувмента 1.21.10

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
3 Ноя 2025
Сообщения
8
Реакции
0
помогите мувмент пофиксить чтобы скорость игрока соотвестовало его fakeYaw, у меня он тупо идёт туда куда смотрит fakeYaw, помогите исправить:

Java:
Expand Collapse Copy
package com.client.mixin.entity;

import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import com.client.Client;
import com.client.event.player.UpdateVelocityEvent;
import com.client.mixin.accessor.EntityAccessor;

import net.minecraft.entity.Entity;
import net.minecraft.util.math.Vec3d;

import static com.client.util.IMinecraft.mc;

@Mixin(Entity.class)
public class EntityMixin {
    @Inject(method = "updateVelocity", at = @At("HEAD"), cancellable = true)
    private void onUpdateVelocity(float speed, Vec3d movementInput, CallbackInfo ci) {
        if ((Object) this == mc.player) {
            ci.cancel();

            Vec3d vec3d = EntityAccessor.movementInputToVelocity(
                movementInput,
                speed,
                mc.player.getYaw()
            );

            UpdateVelocityEvent updateVelocityEvent = new UpdateVelocityEvent(
                movementInput,
                speed,
                mc.player.getYaw(),
                vec3d
            );

            Client.getEventBus().post(updateVelocityEvent);

            mc.player.setVelocity(mc.player.getVelocity().add(updateVelocityEvent.getVelocity()));
        }
    }
}

код movementInputToVelocity:

Java:
Expand Collapse Copy
    protected static Vec3d movementInputToVelocity(Vec3d movementInput, float speed, float yaw) {
        double d = movementInput.lengthSquared();
        if (d < 1.0E-7) {
            return Vec3d.ZERO;
        } else {
            Vec3d vec3d = (d > 1.0 ? movementInput.normalize() : movementInput).multiply(speed);
            float f = MathHelper.sin(yaw * (float) (Math.PI / 180.0));
            float g = MathHelper.cos(yaw * (float) (Math.PI / 180.0));
            return new Vec3d(vec3d.x * g - vec3d.z * f, vec3d.y, vec3d.z * g + vec3d.x * f);
        }
    }

Java:
Expand Collapse Copy
package com.client.module.combat;

import org.lwjgl.glfw.GLFW;

import com.client.event.EventStage;
import com.client.event.player.KeyboardInputEvent;
import com.client.event.player.SendMovementEvent;
import com.client.event.player.UpdateVelocityEvent;
import com.client.module.AbstractModule;
import com.client.module.EnumCategory;
import com.client.module.ModuleInfo;
import static com.client.util.IMinecraft.mc;
import com.google.common.eventbus.Subscribe;

import lombok.Getter;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;

@ModuleInfo(
    name = "test",
    description = "",
    category = EnumCategory.Combat
)
public class Test extends AbstractModule {
    @Getter
    private float fakeYaw = 90.0f, fakePitch = 0.0f;
    @Getter
    private float prevYaw, prevPitch;

    public Test() {
        setKey(GLFW.GLFW_KEY_R);
    }

    @Subscribe
    public void onSendMovement(SendMovementEvent event) {
        if (event.getStage() == EventStage.PRE) {
            prevYaw = mc.player.getYaw();
            prevPitch = mc.player.getPitch();

            mc.player.setYaw(fakeYaw);
            mc.player.setPitch(fakePitch);

            mc.player.setHeadYaw(fakeYaw);
        }

        if (event.getStage() == EventStage.POST) {
            mc.player.setYaw(prevYaw);
            mc.player.setPitch(prevPitch);
        }
    }

    @Subscribe
    public void onUpdateVelocity(UpdateVelocityEvent event) {
        event.setVelocity(fix(fakeYaw, event.getMovementInput(), event.getSpeed()));
    }

    @Subscribe
    public void onKeyboardInput(KeyboardInputEvent event) {
        if (Float.isNaN(fakeYaw)) return;

        float mF = mc.player.input.movementForward;
        float mS = mc.player.input.movementSideways;
        float delta = (prevYaw - fakeYaw) * MathHelper.RADIANS_PER_DEGREE;

        float cos = MathHelper.cos(delta);
        float sin = MathHelper.sin(delta);

        mc.player.input.movementSideways = Math.round(mS * cos - mF * sin);
        mc.player.input.movementForward = Math.round(mF * cos + mS * sin);
    }

    private Vec3d fix(float yaw, Vec3d movementInput, float speed) {
        double d = movementInput.lengthSquared();

        if (d < 1.0E-7)
            return Vec3d.ZERO;

        Vec3d vec3d = (d > 1.0 ? movementInput.normalize() : movementInput).multiply(speed);
        float f = MathHelper.sin(yaw * MathHelper.RADIANS_PER_DEGREE);
        float g = MathHelper.cos(yaw * MathHelper.RADIANS_PER_DEGREE);
        
        return new Vec3d(
            vec3d.x * (double) g - vec3d.z * (double) f,
            vec3d.y,
            vec3d.z * (double) g + vec3d.x * (double) f
        );
    }
}
 
Назад
Сверху Снизу