Обводка блока

Сообщения
557
Лучшие ответы
7
Реакции
25
Версия Minecraft
1.7.10
Нужна помощь, как обводить блок как-то так?
(нужно для проверки)
 

Вложения

Сообщения
557
Лучшие ответы
7
Реакции
25
@timaxa007 Вопрос x2 :DDD
Как выделять автоматом блок с определенным ID в поле видимости допустим 10 блоков
 

timaxa007

Модератор
Сообщения
5,577
Лучшие ответы
361
Реакции
539
Типа циклами, типа каждый тик игрока проверять область радиус 10 блоков. Искать нужный блок и запичывать в лист этот блок с его координатам. А в рендере рендерить этот блок из листа.
 
Сообщения
557
Лучшие ответы
7
Реакции
25
@timaxa007 есть какие-нибудь примеры? пожалуйста >:^)
 
Сообщения
140
Лучшие ответы
3
Реакции
25
Я такое сделал в свое время когда нужен была обводка блоков в креате:
Java:
private void drawOres(float px, float py, float pz) {
        int bx, by, bz;

        GL11.glDisable(GL11.GL_TEXTURE_2D);
        GL11.glDisable(GL11.GL_DEPTH_TEST);
        GL11.glDisable(GL11.GL_CULL_FACE);
        GL11.glDepthMask(false);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
        GL11.glLineWidth(1f);
        Tessellator tes = Tessellator.instance;

        List<BlockInfo> temp = new ArrayList();
        temp.addAll(this.ores);

        for (BlockInfo b : temp) {
            bx = b.x;
            by = b.y;
            bz = b.z;
            float f = 0.0f;
            float f1 = 1.0f;

            tes.startDrawing(GL11.GL_LINES);
            tes.setColorRGBA_I(b.color, 255);
            tes.setBrightness(200);

            tes.addVertex(bx - px + f, by - py + f1, bz - pz + f);
            tes.addVertex(bx - px + f1, by - py + f1, bz - pz + f);
            tes.addVertex(bx - px + f1, by - py + f1, bz - pz + f);
            tes.addVertex(bx - px + f1, by - py + f1, bz - pz + f1);
            tes.addVertex(bx - px + f1, by - py + f1, bz - pz + f1);
            tes.addVertex(bx - px + f, by - py + f1, bz - pz + f1);
            tes.addVertex(bx - px + f, by - py + f1, bz - pz + f1);
            tes.addVertex(bx - px + f, by - py + f1, bz - pz + f);

            tes.addVertex(bx - px + f1, by - py + f, bz - pz + f);
            tes.addVertex(bx - px + f1, by - py + f, bz - pz + f1);
            tes.addVertex(bx - px + f1, by - py + f, bz - pz + f1);
            tes.addVertex(bx - px + f, by - py + f, bz - pz + f1);
            tes.addVertex(bx - px + f, by - py + f, bz - pz + f1);
            tes.addVertex(bx - px + f, by - py + f, bz - pz + f);
            tes.addVertex(bx - px + f, by - py + f, bz - pz + f);
            tes.addVertex(bx - px + f1, by - py + f, bz - pz + f);

            tes.addVertex(bx - px + f1, by - py + f, bz - pz + f1);
            tes.addVertex(bx - px + f1, by - py + f1, bz - pz + f1);
            tes.addVertex(bx - px + f1, by - py + f, bz - pz + f);
            tes.addVertex(bx - px + f1, by - py + f1, bz - pz + f);
            tes.addVertex(bx - px + f, by - py + f, bz - pz + f1);
            tes.addVertex(bx - px + f, by - py + f1, bz - pz + f1);
            tes.addVertex(bx - px + f, by - py + f, bz - pz + f);
            tes.addVertex(bx - px + f, by - py + f1, bz - pz + f);
            tes.draw();
        }

        GL11.glDepthMask(true);
        GL11.glDisable(GL11.GL_BLEND);
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glEnable(GL11.GL_DEPTH_TEST);
        GL11.glEnable(GL11.GL_CULL_FACE);
    }
Это все в регистре эвентов, потом просто вызывал отрисовку на определенный блок.
 
Сообщения
775
Лучшие ответы
14
Реакции
47
Пиксель, какой такой регистр эвентов?

Java:
 bx = b.x;
 by = b.y;
 bz = b.z;
це шо?
BlockInfo я как понял это блок?
 
Сообщения
140
Лучшие ответы
3
Реакции
25
регистр эвентов
Пиксель?
Сделал класс в котором регаю все ивенты и потом их по очереди загружаю. А блок инфо – просто информация о блоке:
Java:
public class BlockInfo {
    public int x, y, z;
    public int color;

    public BlockInfo(int bx, int by, int bz, int c) {
        this.x = bx;
        this.y = by;
        this.z = bz;
        this.color = c;
    }
}
 
Сообщения
816
Лучшие ответы
21
Реакции
115
А можно обойтись без них? Я бы даже перелопатил blockrender только ради того, чтобы не использовать три цикла.

Кстати о нем, если же блок собственный, то ему в render можно поставить обводку без теста глубины, правда, тогда будут подсвечиваться все блоки. Хм.. еще не знаю, обрезается ли отрисовка полностью скрытых другими блоков.
 

timaxa007

Модератор
Сообщения
5,577
Лучшие ответы
361
Реакции
539
А можно обойтись без них?
Не думаю. В любом случаи придётся использовать циклы. Но какие будут циклы зависят от реализации. Можно просто при загрузке чанка проверять весь чанк, если будут нужные блоки то добавлять в лист и в рендере проверишь расстояние от блока до игрока, если нужное расстояние, то рендерить. Но всё зависит от реализации.
 
Сверху