Software & Apps

Software und Apps sind aus unserem Alltag nicht mehr wegzudenken; von Musik- und Videobearbeitung, Antiviren-Tools, VPN-Clients bis hin zu Office und gewissen Alternativen - hier dreht sich alles um Software & Apps für Deinen PC.

80.680 Beiträge

Ask Me Anything: Themenspecials
Im gutefrage Themenspecial beantworten Verbände, Organisationen und Personen des öffentlichen Lebens Deine Fragen zu aktuellen Themen.
AMA: Spiritualität
27 beantwortete Fragen
AMA: Polizei
42 beantwortete Fragen
AMA: Weltraum & Raumfahrt
172 beantwortete Fragen

Wie code ich eine diagonale Linie in Minecraft Fabric 1.21.5?

Die Frage steht bereits im Titel. Ich habe versucht, das Problem selbst zu lösen, kenne mich jedoch mit Vertex Rendering nicht aus. Gibt es so etwas wie context.drawVerticalLine() oder muss man sich das selbst machen?

public class SkyClient implements ClientModInitializer {
    private static final Identifier EXAMPLE_LAYER = Identifier.of(Sky.MOD_ID, "hud-example-layer");

    public static void drawLine(DrawContext context, int x1, int y1, int x2, int y2, int color) {
        int dx = Math.abs(x2 - x1);
        int dy = Math.abs(y2 - y1);
        int sx = x1 < x2 ? 1 : -1;
        int sy = y1 < y2 ? 1 : -1;
        int err = dx - dy;

        while (true) {
            context.fill(x1, y1, x1 + 1, y1 + 1, color);

            if (x1 == x2 && y1 == y2) break;

            int e2 = 2 * err;
            if (e2 > -dy) {
                err -= dy;
                x1 += sx;
            }
            if (e2 < dx) {
                err += dx;
                y1 += sy;
            }
        }
    }

    @Override
    public void onInitializeClient() {
        HudLayerRegistrationCallback.EVENT.register(layeredDrawer -> layeredDrawer.attachLayerBefore(IdentifiedLayer.CHAT, EXAMPLE_LAYER, SkyClient::render));
    }

    private static void render(DrawContext context, RenderTickCounter tickCounter) {
        MinecraftClient client = MinecraftClient.getInstance();

        Text text = Text.translatable("info_hud");
        context.drawText(MinecraftClient.getInstance().textRenderer, text, 0, 0, 0xFFFFFF, false);
        int rectangleX = 0;
        int rectangleY = 0;
        int rectangleWidth = 100;
        int rectangleHeight = 100;

        context.fill(rectangleX, rectangleY, rectangleX + rectangleWidth, rectangleY + rectangleHeight, 0xFF0000FF);
        context.drawVerticalLine(rectangleX + rectangleWidth / 2, rectangleY, rectangleY + rectangleHeight, 0xFF00FF00);
        context.drawHorizontalLine(rectangleX, rectangleX + rectangleWidth - 1, rectangleX + rectangleWidth / 2, 0xFF00FF00);
        context.drawBorder(rectangleX, rectangleY, rectangleWidth, rectangleHeight, 0xFFFF0000);
        drawLine(context, 0, 100, 150, 200, 0xFFFF0000);
    }
}