How can I get lines to be drawn in Minecraft 1.18.2?

111 views Asked by At

I'm trying to draw a line between several coordinates in Minecraft, but the line is not displayed in the game, no matter what I do.

package net.fabricmc.example;

import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.client.render.WorldRenderer;
import net.minecraft.util.math.Vec3d;
import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.text.LiteralText;

import java.util.List;

public class LineManager {

    public static void createLines( List<Vec3d> points, ServerCommandSource source) {
        MinecraftClient.getInstance().execute(() -> renderLines(points, source));
    }

    private static void renderLines(List<Vec3d> points, ServerCommandSource source) {
        MinecraftClient client = MinecraftClient.getInstance();
        if (client.player == null || client.world == null) {
            return;
        }

        MatrixStack matrixStack = new MatrixStack();
        matrixStack.translate(-client.player.getX(), -client.player.getY(), -client.player.getZ());
        VertexConsumerProvider.Immediate vertexConsumers = MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers();

        for (int i = 0; i < points.size() - 1; i++) {
            Vec3d start = points.get(i);
            Vec3d end = points.get(i + 1);

            VertexConsumer vertexConsumer = vertexConsumers.getBuffer(RenderLayer.getLines());
            matrixStack.push();
            WorldRenderer.drawBox(matrixStack, vertexConsumer, (float) start.x, (float) start.y, (float) start.z, (float) end.x, (float) end.y, (float) end.z, 1.0f, 0.0f, 0.0f, 1.0f);
            matrixStack.pop();
            source.sendFeedback(new LiteralText(String.format("Point %d: X=%.3f, Y=%.3f, Z=%.3f", i + 1, start.x, start.y, start.z)), false);
        }

        vertexConsumers.draw();
    }
}

I've already spent many hours, but I still can't get the line to render. I'm using fabric 1.18.2. Of course, I have the display of all particles turned on. I tried running the game with Optifine. Someone tell me in which direction to move or point out my error in the code and misunderstanding of any processes

0

There are 0 answers