Преобразование xyz в xy или квадрат на игроках

Версия Minecraft
1.16.5
API
Forge
Хочу чтобы у меня появился квадрат над игроком, для этого мне нужно преобразовать координаты игрока (xyz) в квадратичные координаты (xy).
Есть вот такой метод преобразования:

Java:
private Vector2f project(Matrix4f projectionMatrix, Vector3d position) {
        Minecraft mc = Minecraft.getInstance();
        MainWindow resolution = mc.getWindow();
        float width = resolution.getGuiScaledWidth();
        float height = resolution.getGuiScaledHeight();

        // Представление координат игрока (xyz) в гомогенных координатах (xyzw)
        Vector4f position4f = new Vector4f((float) position.x, (float) position.y, (float) position.z, 1.0f);

        // Применяем матрицу проекции к position4f, чтобы выполнить проекцию точки на экран
        position4f.transform(projectionMatrix);

        // Координаты xy после проекции
        float xDevice = position4f.x() / position4f.w();
        float yDevice = position4f.y() / position4f.w();

        // Координаты xy на основе xy устройства и размера окна игры
        float screenX = (xDevice + 1.0f) * 0.5f * width;
        float screenY = (1.0f - yDevice) * 0.5f * height;

        return new Vector2f(screenX, screenY);
    }

Основной код:
Java:
@SubscribeEvent
    public void onRenderGameOverlay(RenderGameOverlayEvent event) {
        drawRect(0, 0);
        Minecraft mc = Minecraft.getInstance();
        Matrix4f matrix = event.getMatrixStack().last().pose();
        if (mc.level == null || mc.player == null)
            return;

        // Ширина и высота окна
        float width = mc.getWindow().getGuiScaledWidth();
        float height = mc.getWindow().getGuiScaledHeight();

        for (PlayerEntity entity : mc.level.players()) {
            // Координаты камеры (позиция камеры относительно игрока)
            double cameraX = mc.gameRenderer.getMainCamera().getPosition().x();
            double cameraY = mc.gameRenderer.getMainCamera().getPosition().y();
            double cameraZ = mc.gameRenderer.getMainCamera().getPosition().z();

            // Координаты игрока относительно камеры
            double renderX = entity.getX() - cameraX;
            double renderY = entity.getY() - cameraY;
            double renderZ = entity.getZ() - cameraZ;

            // Координаты игрока на экране (xy)
            Vector2f projectedPos = project(matrix, new Vector3d(renderX, renderY, renderX));

            // Отрисовка прямоугольника
            drawRect(projectedPos.x, projectedPos.y);
        }
    }

drawRect(0, 0) в начале был вызван для проверки:
1692731657541.png
В итоге красный квадрат появился (тот самый drawRect в начале), а квадрат на игроке "ВЫБОР РЕЖИМА" не появился (также тестировал на игроках, а не npc (ну вдруг есть разница), не помогло (ну это логично))

P.S если что он появляется, но в другом месте:
1692731943292.png

Если кто-то знает, помогите пожалуйста

P.S. у друга в чите были трейсера, я попросил дать их, и прикол что на фордже они летят в разные стороны:
1692733081583.png

View bobbing (покачивание экрана) выключено если что
 
Последнее редактирование:
Оффтоп: А это не читоделие. я хочу сделать линию как в watch dogs 2, слева и справа от проводов в блок, просто друг уже делал такое на мобах

По теме:
Нашёл Матрица проекции - Более сложная матрица, которая создает проекцию трехмерного объекта на плоскость двумерного экрана монитора. То, что мне и нужно
трехмерный объект (XYZ)
плоскость двумерного экрана монитора (XY)

Помогла ещё эта статья: https://forums.minecraftforge.net/topic/88562-116solved-3d-to-2d-conversion/
Там человек дописал компенсацию покачивания экрана (view bobbing) и объяснение
 
Сверху