Повороты

Версия Minecraft
1.20.1
API
Forge
1,347
107
231
Здравствуйте дорогие форумчане!

Недавно начал разбираться в рендере кастомных моделей в игре, однако повороты мне не особо даются. Подозреваю, что где-то ошибаюсь в кватернионе, однако не совсем понимаю где.
В BlockEntitytRenderer:
stack.pushPose();
stack.translate(0.5f, 1.25f, 0.5f);
            
//Вектор к игроку
Vector3f vec = new Vector3f();
vec.x = (float) Minecraft.getInstance().player.position().x - blockEntity.getBlockPos().getX() + 0.5f;
vec.y = (float) Minecraft.getInstance().player.position().y - blockEntity.getBlockPos().getY() + 1.25f;
vec.z = (float) Minecraft.getInstance().player.position().z - blockEntity.getBlockPos().getZ() + 0.5f;
vec = vec.normalize();
            
//Вычисление углов в радианах, поворот на соотв. углы
float xAngle = (float) Math.acos(vec.x) ;
float yAngle = (float) Math.acos(vec.y);
float zAngle = (float) Math.acos(vec.z);
            
stack.mulPose(Axis.XP.rotation(xAngle)); // Axis.XP.rotation возвращает (new Quaternionf()).rotationX(xAngle).
stack.mulPose(Axis.YP.rotation(yAngle)); // Также, но по Y
stack.mulPose(Axis.ZP.rotation(zAngle)); // Также, но по Z
            
//Рендер
renderEye(stack, buffer, 15728880, packedOverlay);
stack.popPose();

Код должен вращать мою модельку по направлению к игроку, как можно догадаться. Заранее большое спасибо!
 
1,347
107
231
он всегда повернут к камере
Мне нужен именно вектор к игроку, а не направление к его камере. Пока что сделал какой-то костыль, но повороты несколько дёрганные:

В BlockEntitytRenderer:
            stack.pushPose();
            stack.translate(0.5f, 1.15f, 0.5f);

            Vector3f player = new Vector3f(
                    (float) Minecraft.getInstance().player.position().x,
                    (float) Minecraft.getInstance().player.position().y,
                    (float) Minecraft.getInstance().player.position().z
            );
            Vector3f block = new Vector3f(
                    blockEntity.getBlockPos().getX() + 0.5f,
                    blockEntity.getBlockPos().getY() + 1.25f,
                    blockEntity.getBlockPos().getZ() + 0.5f
            );
            stack.mulPose((new Quaternionf()).lookAlong(player.sub(block).normalize(),
                    new Vector3f(0, 1, 0)).invert());

            renderEye(EYE_ON_LOCATION, stack, buffer, 15728880, packedOverlay);
            stack.popPose();
 
1,347
107
231
На 1.20 повороты, таки, на кватерионах сделали?
Ещё с 1.17-1.18 так, вроде.
Тогда рендер луча стража смотри (или лучи кристаллов края, просто вместо игрока - дракон)
Кристаллы края:
Выглядит интересно, но странно. Посмотрим, что получится.
Стражи:
Костыльно. И, вроде бы, делает то же, что и я. Только не через методы Quaternionf.
 
Сверху