Перейти к содержанию

Где ошибка в реализации ESP forge API 1.20.1?


Рекомендуемые сообщения

В теме 2 сообщения

Всем привет! Я пытался реализовать ESP в своём моде с использованием forge API 1.20.1. Но я столкнулся с проблемой: я никак не могу получить верную позицию сущности на экране. Квадрат, который должен распологаться на месте сущности не попадает на неё. Вот мой код:

```java

import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.client.event.RenderGuiEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraft.client.gui.GuiGraphics;
import org.joml.Matrix4f;
import org.joml.Vector4f;

public class ESP {
    private final Minecraft mc;

    public ESP() {
        this.mc = Minecraft.getInstance();
        MinecraftForge.EVENT_BUS.register(this);
    }

    @SubscribeEvent
    public void onRenderGui(RenderGuiEvent.Post event) {
        GuiGraphics guiGraphics = event.getGuiGraphics();

        for (Entity entity : mc.level.entitiesForRendering()) {
            if (entity != mc.player && entity instanceof Player) {
                // Пример координат сущности
                float partialTicks = event.getPartialTick();
                Vector4f screenPos = worldToScreen(entity.getPosition(partialTicks));

                int screenX = (int) screenPos.x;
                int screenY = (int) screenPos.y;

                System.out.println(screenX + " " + screenY);
                
                renderRectangle(guiGraphics, screenX, screenY, 20, 20, 0x80FF0000);

            }
        }
    }

    public void renderRectangle(GuiGraphics guiGraphics, int x, int y, int width, int height, int color) {
        guiGraphics.fill(x, y, x + width, y + height, color);
    }

    public Vector4f worldToScreen(Vec3 worldPos) {
        Minecraft minecraft = Minecraft.getInstance();
        GameRenderer gameRenderer = minecraft.gameRenderer;
        Camera camera = gameRenderer.getMainCamera();

        Matrix4f projectionMatrix = gameRenderer.getProjectionMatrix(minecraft.getWindow().getGuiScale());

        Matrix4f viewMatrix = new Matrix4f();
        viewMatrix.identity();

        Vec3 cameraPos = camera.getPosition();
        viewMatrix.translate((float) -cameraPos.x, (float) -cameraPos.y, (float) -cameraPos.z);

        viewMatrix.rotate((float) Math.toRadians(-camera.getXRot()), new org.joml.Vector3f(1, 0, 0));
        viewMatrix.rotate((float) Math.toRadians(-camera.getYRot()), new org.joml.Vector3f(0, 1, 0));

        Vector4f screenPos = new Vector4f((float) worldPos.x, (float) worldPos.y, (float) worldPos.z, 1.0F);
        screenPos.mul(viewMatrix);
        screenPos.mul(projectionMatrix);

        if (screenPos.w > 0.0F) {
            screenPos.div(screenPos.w);
        }

        float screenX = (screenPos.x + 1.0F) / 2.0F * minecraft.getWindow().getGuiScaledWidth();
        float screenY = (1.0F - screenPos.y) / 2.0F * minecraft.getWindow().getGuiScaledHeight();

        return new Vector4f(screenX, screenY, screenPos.z, screenPos.w);
    }
}

```

В чём ошибка? Почему я получаю неверные экранные координаты?

Ссылка на комментарий
Поделиться на другие сайты

  • Duck1910 закрыто и открыто это тема

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...