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

Версия Minecraft
1.7.10

jopi

Попрошайка
1,421
30
260
Нужна помощь, как обводить блок как-то так?
(нужно для проверки)
 

Вложения

  • 23321.png
    23321.png
    22.1 KB · Просмотры: 38

timaxa007

Модератор
5,831
409
672
Типа циклами, типа каждый тик игрока проверять область радиус 10 блоков. Искать нужный блок и запичывать в лист этот блок с его координатам. А в рендере рендерить этот блок из листа.
 
Я такое сделал в свое время когда нужен была обводка блоков в креате:
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);
    }
Это все в регистре эвентов, потом просто вызывал отрисовку на определенный блок.
 
регистр эвентов
Пиксель?
Сделал класс в котором регаю все ивенты и потом их по очереди загружаю. А блок инфо – просто информация о блоке:
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;
    }
}
 
1,200
37
237
А можно обойтись без них? Я бы даже перелопатил blockrender только ради того, чтобы не использовать три цикла.

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

timaxa007

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