Нарисовать картинку на экранных координатах другого игрока

Версия Minecraft
1.12.2

Dem

6
0
Я пытаюсь сделать что-то похожее на чит для просмотра сквозь стены, но для монстра, который будет видеть всех игроков в определенном радиусе с помощью пятен на экране. Я знаю, что каким-то образом можно получить экранные координаты других игроков, но каким именно?
 
1,038
57
229
Ну.. координаты игрока есть, угол камеры куда ты смотришь есть (он так и назывался angle). Осталось посчитать FOV. Чистая математика.
Координаты игроков можно получить через событие RenderPlayer и запомнить их в списке. И каждый раз формировать этот список с нуля.
 
1,038
57
229
Не проще ли узнать координаты отображения игроков на экране и нарисовать поверх картинку
это уж тебе решать что проще.

Есть ещё вариант, ловить событие RenderPlayer и включать флаг Depth=False, а после отрисовки Depth=True. Тогда все игроки будут перед тобой. Но если сделать проверку Can I Seek You (которая тоже где то есть, по моему в EntityPlayer). То если игрок видит игрока - тогда ничего не надо, если не видит, тогда глубину отключаем.
Фишка в том, что если ты где то забудешь её включить, то большая часть мира будет отрисовываться в том порядке в котором она рисуется и плоским. Будет клёвый ужасный глюк будто.
 
Последнее редактирование:

Dem

6
0
Я попробовал получить экранные координаты, но при выполнении этих двух строк:

Matrix4f modelViewMatrix = new Matrix4f(modelView.array());
Matrix4f projectionMatrix = new Matrix4f(projection.array());

У меня крашится игра, в чем может быть проблема и как ее решить?
 

Dem

6
0
Код:
public void render() {

player1 = mc.player;
player2 = player1; //mc.world.getPlayerEntityByName("d1mbI4");
//EntityOtherPlayerMP targetPlayer = (EntityOtherPlayerMP)
//mc.world.getPlayerEntityByName("d1mbI4");
player1.sendMessage(new TextComponentString("RENDERING"));
if (player1 != null && player2 != null) {
Vec3d playerPos = new Vec3d(player1.posX, player1.posY, player1.posZ);
Vec3d targetPos = new Vec3d(player2.posX + 10, player2.posY, player2.posZ);

ScaledResolution res = new ScaledResolution(mc);
int screenWidth = res.getScaledWidth();
int screenHeight = res.getScaledHeight();



FloatBuffer modelView = BufferUtils.createFloatBuffer(16);
FloatBuffer projection = BufferUtils.createFloatBuffer(16);
GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, modelView);
GL11.glGetFloat(GL11.GL_PROJECTION_MATRIX, projection);



Matrix4f modelViewMatrix = new Matrix4f(modelView.array());

Matrix4f projectionMatrix = new Matrix4f(projection.array());

player1.sendMessage(new TextComponentString("RENDERING====================="));


Vector4f rawCoords = new Vector4f((float) targetPos.x, (float) targetPos.y, (float) targetPos.z, 1.0f);
modelViewMatrix.transform(rawCoords);

Vector4f transformedCoords = new Vector4f();
projectionMatrix.transform(rawCoords, transformedCoords);

int targetX = (int) ((transformedCoords.x + 1) * screenWidth / 2);
int targetY = (int) ((1 - transformedCoords.y) * screenHeight / 2);

player1.sendMessage(new TextComponentString("Coordinates: x - " + targetX + " y - " + targetY));

// Рисую стрелку посредством GUIUtils

// ...
}
}
 
1,038
57
229
нужна как минимум ошибка или лог с ошибкой. Чтобы быстрее определить что не так именно с той ошибкой. Поэтому когда пишешь что ошибка, всегда выкладывай её.
Ещё неплохо проект дебажить в таких местах. Ставить брекпоинт и идти прям по строкам. Смотреть после чего отвалилось, смотреть что внутри у переменных при этом.
 
Я пытаюсь сделать что-то похожее на чит для просмотра сквозь стены, но для монстра, который будет видеть всех игроков в определенном радиусе с помощью пятен на экране. Я знаю, что каким-то образом можно получить экранные координаты других игроков, но каким именно?
Для этого не нужны экранные координаты, если я правильно понял что ты имеешь в виду под этим, если хочешь сделать игроков видными через стены для монстров, тебе нужно править их ИИ.
В ИИ моба ты можешь использовать Entity iterator, и искать сущностей рядом с мобом, не зависимо от стен, а дальше дело фантазии
 
Сверху