diff --git a/gradle.properties b/gradle.properties index abcccdb..2e22a41 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,14 +8,14 @@ org.gradle.jvmargs=-Xmx1G # To remap the mixin locations: # gradlew migrateMappings --mappings "1.16.1+build.9" -minecraft_version=1.19 -yarn_mappings=1.19+build.1 -loader_version=0.14.7 +minecraft_version=1.20.1 +yarn_mappings=1.20.1+build.9 +loader_version=0.14.21 #Fabric api -fabric_version=0.55.3+1.19 +fabric_version=0.85.0+1.20.1 # Mod Properties -mod_version = 1.19-fabric-1 +mod_version = 1.20.1-fabric-1 maven_group = net.torocraft archives_base_name = flighthud \ No newline at end of file diff --git a/src/main/java/net/torocraft/flighthud/HudComponent.java b/src/main/java/net/torocraft/flighthud/HudComponent.java index 08be596..d6fd3ff 100644 --- a/src/main/java/net/torocraft/flighthud/HudComponent.java +++ b/src/main/java/net/torocraft/flighthud/HudComponent.java @@ -2,21 +2,15 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.BufferRenderer; -import net.minecraft.client.render.GameRenderer; -import net.minecraft.client.render.Tessellator; -import net.minecraft.client.render.VertexFormats; -import net.minecraft.client.render.VertexFormat; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.render.*; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.math.Vec3f; -import net.minecraft.util.math.Matrix4f; +import net.minecraft.util.math.RotationAxis; +import org.joml.Matrix4f; import net.torocraft.flighthud.config.HudConfig; -public abstract class HudComponent extends DrawableHelper { - - public abstract void render(MatrixStack m, float partial, MinecraftClient client); +public abstract class HudComponent { + public abstract void render(DrawContext context, float tickDelta, MinecraftClient client); public static HudConfig CONFIG; @@ -27,9 +21,9 @@ protected int i(double d) { protected void drawPointer(MatrixStack m, float x, float y, float rot) { m.push(); m.translate(x, y, 0); - m.multiply(Vec3f.POSITIVE_Z.getDegreesQuaternion(rot + 45)); - drawVerticalLine(m, 0, 0, 5, CONFIG.color); - drawHorizontalLine(m, 0, 5, 0, CONFIG.color); + m.multiply(RotationAxis.POSITIVE_Z.rotationDegrees(rot + 45)); + drawVerticalLine(m, 0, 0, 5); + drawHorizontalLine(m, 0, 5, 0); m.pop(); } @@ -41,19 +35,19 @@ protected float wrapHeading(float degrees) { return degrees; } - protected void drawFont(MinecraftClient mc, MatrixStack m, String s, float x, float y) { - drawFont(mc, m, s, x, y, CONFIG.color); + protected void drawFont(MinecraftClient mc, MatrixStack m, String s, float x, float y, DrawContext context) { + drawFont(mc, m, s, x, y, CONFIG.color, context); } protected void drawFont(MinecraftClient mc, MatrixStack m, String s, float x, float y, - int color) { - mc.textRenderer.draw(m, s, x, y, CONFIG.color); + int color, DrawContext context) { + context.drawText(mc.textRenderer, s, (int) x, (int) y, CONFIG.color, false); } protected void drawRightAlignedFont(MinecraftClient mc, MatrixStack m, String s, float x, - float y) { + float y, DrawContext context) { int w = mc.textRenderer.getWidth(s); - drawFont(mc, m, s, x - w, y); + drawFont(mc, m, s, x - w, y, context); } protected void drawBox(MatrixStack m, float x, float y, float w, float h) { @@ -129,16 +123,14 @@ private static void fill(Matrix4f matrix, float x1, float y1, float x2, float y2 float b = (float) (color & 255) / 255.0F; BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); RenderSystem.enableBlend(); - RenderSystem.disableTexture(); RenderSystem.defaultBlendFunc(); - RenderSystem.setShader(GameRenderer::getPositionColorShader); + RenderSystem.setShader(GameRenderer::getPositionColorProgram); bufferBuilder.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); bufferBuilder.vertex(matrix, x1, y2, 0.0F).color(r, g, b, alpha).next(); bufferBuilder.vertex(matrix, x2, y2, 0.0F).color(r, g, b, alpha).next(); bufferBuilder.vertex(matrix, x2, y1, 0.0F).color(r, g, b, alpha).next(); bufferBuilder.vertex(matrix, x1, y1, 0.0F).color(r, g, b, alpha).next(); - BufferRenderer.drawWithShader(bufferBuilder.end()); - RenderSystem.enableTexture(); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); RenderSystem.disableBlend(); } } diff --git a/src/main/java/net/torocraft/flighthud/HudRenderer.java b/src/main/java/net/torocraft/flighthud/HudRenderer.java index aceaebc..506d9df 100644 --- a/src/main/java/net/torocraft/flighthud/HudRenderer.java +++ b/src/main/java/net/torocraft/flighthud/HudRenderer.java @@ -1,6 +1,7 @@ package net.torocraft.flighthud; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; import net.torocraft.flighthud.components.AltitudeIndicator; import net.torocraft.flighthud.components.ElytraHealthIndicator; @@ -42,7 +43,7 @@ private void setupConfig(MinecraftClient client) { } @Override - public void render(MatrixStack m, float partial, MinecraftClient client) { + public void render(DrawContext context, float tickDelta, MinecraftClient client) { setupConfig(client); if (HudComponent.CONFIG == null) { @@ -50,6 +51,8 @@ public void render(MatrixStack m, float partial, MinecraftClient client) { } try { + + MatrixStack m = context.getMatrices(); m.push(); if (HudComponent.CONFIG.scale != 1d) { @@ -57,11 +60,11 @@ public void render(MatrixStack m, float partial, MinecraftClient client) { m.scale(scale, scale, scale); } - computer.update(client, partial); + computer.update(client, tickDelta); dim.update(client); for (HudComponent component : components) { - component.render(m, partial, client); + component.render(context, tickDelta, client); } m.pop(); } catch (Exception e) { diff --git a/src/main/java/net/torocraft/flighthud/components/AltitudeIndicator.java b/src/main/java/net/torocraft/flighthud/components/AltitudeIndicator.java index efb8cdf..4353398 100644 --- a/src/main/java/net/torocraft/flighthud/components/AltitudeIndicator.java +++ b/src/main/java/net/torocraft/flighthud/components/AltitudeIndicator.java @@ -1,6 +1,7 @@ package net.torocraft.flighthud.components; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; import net.torocraft.flighthud.Dimensions; import net.torocraft.flighthud.FlightComputer; @@ -16,7 +17,7 @@ public AltitudeIndicator(FlightComputer computer, Dimensions dim) { } @Override - public void render(MatrixStack m, float partial, MinecraftClient mc) { + public void render(DrawContext context, float partial, MinecraftClient mc) { float top = dim.tFrame; float bottom = dim.bFrame; @@ -29,20 +30,22 @@ public void render(MatrixStack m, float partial, MinecraftClient mc) { float yFloor = dim.yMid - floorOffset; float xAltText = right + 5; + MatrixStack m = context.getMatrices(); + if (CONFIG.altitude_showGroundInfo) { drawHeightIndicator(mc, m, left - 1, dim.yMid, bottom - dim.yMid); } if (CONFIG.altitude_showReadout) { - drawFont(mc, m, String.format("%.0f", computer.altitude), xAltText, dim.yMid - 3); + drawFont(mc, m, String.format("%.0f", computer.altitude), xAltText, dim.yMid - 3, context); drawBox(m, xAltText - 2, dim.yMid - 4.5f, 28, 10); } if (CONFIG.altitude_showHeight) { - drawFont(mc, m, "G", xAltText - 10, bottom + 3); + drawFont(mc, m, "G", xAltText - 10, bottom + 3, context); String heightText = computer.distanceFromGround == null ? "??" : String.format("%d", i(computer.distanceFromGround)); - drawFont(mc, m, heightText, xAltText, bottom + 3); + drawFont(mc, m, heightText, xAltText, bottom + 3, context); drawBox(m, xAltText - 2, bottom + 1.5f, 28, 10); } @@ -56,7 +59,7 @@ public void render(MatrixStack m, float partial, MinecraftClient mc) { if (i % 50 == 0) { drawHorizontalLine(m, left, right + 2, y); if (!CONFIG.altitude_showReadout || y > dim.yMid + 7 || y < dim.yMid - 7) { - drawFont(mc, m, String.format("%d", i), xAltText, y - 3); + drawFont(mc, m, String.format("%d", i), xAltText, y - 3, context); } } drawHorizontalLine(m, left, right, y); diff --git a/src/main/java/net/torocraft/flighthud/components/ElytraHealthIndicator.java b/src/main/java/net/torocraft/flighthud/components/ElytraHealthIndicator.java index f1d3722..fa47ada 100644 --- a/src/main/java/net/torocraft/flighthud/components/ElytraHealthIndicator.java +++ b/src/main/java/net/torocraft/flighthud/components/ElytraHealthIndicator.java @@ -1,6 +1,7 @@ package net.torocraft.flighthud.components; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; import net.torocraft.flighthud.Dimensions; import net.torocraft.flighthud.FlightComputer; @@ -17,7 +18,7 @@ public ElytraHealthIndicator(FlightComputer computer, Dimensions dim) { } @Override - public void render(MatrixStack m, float partial, MinecraftClient mc) { + public void render(DrawContext context, float partial, MinecraftClient mc) { if (!CONFIG.elytra_showHealth || computer.elytraHealth == null) { return; } @@ -25,8 +26,10 @@ public void render(MatrixStack m, float partial, MinecraftClient mc) { float x = dim.wScreen * CONFIG.elytra_x; float y = dim.hScreen * CONFIG.elytra_y; + MatrixStack m = context.getMatrices(); + drawBox(m, x - 3.5f, y - 1.5f, 30, 10); - drawFont(mc, m, "E", x - 10, y); - drawFont(mc, m, String.format("%d", i(computer.elytraHealth)) + "%", x, y); + drawFont(mc, m, "E", x - 10, y, context); + drawFont(mc, m, String.format("%d", i(computer.elytraHealth)) + "%", x, y, context); } } \ No newline at end of file diff --git a/src/main/java/net/torocraft/flighthud/components/FlightPathIndicator.java b/src/main/java/net/torocraft/flighthud/components/FlightPathIndicator.java index 985ad0a..aa39d61 100644 --- a/src/main/java/net/torocraft/flighthud/components/FlightPathIndicator.java +++ b/src/main/java/net/torocraft/flighthud/components/FlightPathIndicator.java @@ -1,6 +1,7 @@ package net.torocraft.flighthud.components; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; import net.torocraft.flighthud.Dimensions; import net.torocraft.flighthud.FlightComputer; @@ -16,11 +17,13 @@ public FlightPathIndicator(FlightComputer computer, Dimensions dim) { } @Override - public void render(MatrixStack m, float partial, MinecraftClient client) { + public void render(DrawContext context, float partial, MinecraftClient client) { if (!CONFIG.flightPath_show) { return; } + MatrixStack m = context.getMatrices(); + float deltaPitch = computer.pitch - computer.flightPitch; float deltaHeading = wrapHeading(computer.flightHeading) - wrapHeading(computer.heading); diff --git a/src/main/java/net/torocraft/flighthud/components/HeadingIndicator.java b/src/main/java/net/torocraft/flighthud/components/HeadingIndicator.java index a3acf8b..11ad447 100644 --- a/src/main/java/net/torocraft/flighthud/components/HeadingIndicator.java +++ b/src/main/java/net/torocraft/flighthud/components/HeadingIndicator.java @@ -1,6 +1,7 @@ package net.torocraft.flighthud.components; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; import net.torocraft.flighthud.Dimensions; import net.torocraft.flighthud.FlightComputer; @@ -17,7 +18,7 @@ public HeadingIndicator(FlightComputer computer, Dimensions dim) { } @Override - public void render(MatrixStack m, float partial, MinecraftClient mc) { + public void render(DrawContext context, float partial, MinecraftClient mc) { float left = dim.lFrame; float right = dim.rFrame; float top = dim.tFrame - 10; @@ -26,8 +27,10 @@ public void render(MatrixStack m, float partial, MinecraftClient mc) { float northOffset = computer.heading * dim.degreesPerPixel; float xNorth = dim.xMid - northOffset; + MatrixStack m = context.getMatrices(); + if (CONFIG.heading_showReadout) { - drawFont(mc, m, String.format("%03d", i(wrapHeading(computer.heading))), dim.xMid - 8, yText); + drawFont(mc, m, String.format("%03d", i(wrapHeading(computer.heading))), dim.xMid - 8, yText, context); drawBox(m, dim.xMid - 15, yText - 1.5f, 30, 10); } @@ -40,14 +43,14 @@ public void render(MatrixStack m, float partial, MinecraftClient mc) { if (i % 15 == 0) { if (i % 90 == 0) { - drawFont(mc, m, headingToDirection(i), x - 2, yText + 10); - drawFont(mc, m, headingToAxis(i), x - 8, yText + 20); + drawFont(mc, m, headingToDirection(i), x - 2, yText + 10, context); + drawFont(mc, m, headingToAxis(i), x - 8, yText + 20, context); } else { drawVerticalLine(m, x, top + 3, top + 10); } if (!CONFIG.heading_showReadout || x <= dim.xMid - 26 || x >= dim.xMid + 26) { - drawFont(mc, m, String.format("%03d", i(wrapHeading(i))), x - 8, yText); + drawFont(mc, m, String.format("%03d", i(wrapHeading(i))), x - 8, yText, context); } } else { drawVerticalLine(m, x, top + 6, top + 10); diff --git a/src/main/java/net/torocraft/flighthud/components/LocationIndicator.java b/src/main/java/net/torocraft/flighthud/components/LocationIndicator.java index 9c6075f..3527975 100644 --- a/src/main/java/net/torocraft/flighthud/components/LocationIndicator.java +++ b/src/main/java/net/torocraft/flighthud/components/LocationIndicator.java @@ -1,6 +1,7 @@ package net.torocraft.flighthud.components; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; import net.torocraft.flighthud.Dimensions; import net.torocraft.flighthud.HudComponent; @@ -14,7 +15,7 @@ public LocationIndicator(Dimensions dim) { } @Override - public void render(MatrixStack m, float partial, MinecraftClient mc) { + public void render(DrawContext context, float partial, MinecraftClient mc) { if (!CONFIG.location_showReadout) { return; } @@ -25,6 +26,8 @@ public void render(MatrixStack m, float partial, MinecraftClient mc) { int xLoc = mc.player.getBlockPos().getX(); int zLoc = mc.player.getBlockPos().getZ(); - drawFont(mc, m, String.format("%d / %d", xLoc, zLoc), x, y); + MatrixStack m = context.getMatrices(); + + drawFont(mc, m, String.format("%d / %d", xLoc, zLoc), x, y, context); } } diff --git a/src/main/java/net/torocraft/flighthud/components/PitchIndicator.java b/src/main/java/net/torocraft/flighthud/components/PitchIndicator.java index d75ea9e..9866062 100644 --- a/src/main/java/net/torocraft/flighthud/components/PitchIndicator.java +++ b/src/main/java/net/torocraft/flighthud/components/PitchIndicator.java @@ -1,8 +1,9 @@ package net.torocraft.flighthud.components; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.math.Vec3f; +import net.minecraft.util.math.RotationAxis; import net.torocraft.flighthud.Dimensions; import net.torocraft.flighthud.FlightComputer; import net.torocraft.flighthud.HudComponent; @@ -12,13 +13,15 @@ public class PitchIndicator extends HudComponent { private final FlightComputer computer; private final PitchIndicatorData pitchData = new PitchIndicatorData(); + private DrawContext drawContext; + public PitchIndicator(FlightComputer computer, Dimensions dim) { this.computer = computer; this.dim = dim; } @Override - public void render(MatrixStack m, float partial, MinecraftClient mc) { + public void render(DrawContext context, float partial, MinecraftClient mc) { pitchData.update(dim); float horizonOffset = computer.pitch * dim.degreesPerPixel; @@ -29,10 +32,13 @@ public void render(MatrixStack m, float partial, MinecraftClient mc) { float roll = computer.roll * (CONFIG.pitchLadder_reverseRoll ? -1 : 1); + drawContext = context; + MatrixStack m = drawContext.getMatrices(); + if (CONFIG.pitchLadder_showRoll) { m.push(); m.translate(b, a, 0); - m.multiply(Vec3f.POSITIVE_Z.getDegreesQuaternion(roll)); + m.multiply(RotationAxis.POSITIVE_Z.rotationDegrees(roll)); m.translate(-b, -a, 0); } @@ -106,10 +112,10 @@ private void drawDegreeBar(MinecraftClient mc, MatrixStack m, float degree, floa int fontVerticalOffset = degree >= 0 ? 0 : 6; drawFont(mc, m, String.format("%d", i(Math.abs(degree))), pitchData.r2 + 6, - (float) y - fontVerticalOffset); + y - fontVerticalOffset, drawContext); drawFont(mc, m, String.format("%d", i(Math.abs(degree))), pitchData.l1 - 17, - (float) y - fontVerticalOffset); + y - fontVerticalOffset, drawContext); } private static class PitchIndicatorData { diff --git a/src/main/java/net/torocraft/flighthud/components/SpeedIndicator.java b/src/main/java/net/torocraft/flighthud/components/SpeedIndicator.java index f6e6fab..17eaafe 100644 --- a/src/main/java/net/torocraft/flighthud/components/SpeedIndicator.java +++ b/src/main/java/net/torocraft/flighthud/components/SpeedIndicator.java @@ -1,6 +1,7 @@ package net.torocraft.flighthud.components; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; import net.torocraft.flighthud.Dimensions; import net.torocraft.flighthud.FlightComputer; @@ -16,7 +17,7 @@ public SpeedIndicator(FlightComputer computer, Dimensions dim) { } @Override - public void render(MatrixStack m, float partial, MinecraftClient mc) { + public void render(DrawContext context, float partial, MinecraftClient mc) { float top = dim.tFrame; float bottom = dim.bFrame; @@ -29,8 +30,10 @@ public void render(MatrixStack m, float partial, MinecraftClient mc) { float xSpeedText = left - 5; + MatrixStack m = context.getMatrices(); + if (CONFIG.speed_showReadout) { - drawRightAlignedFont(mc, m, String.format("%.2f", computer.speed), xSpeedText, dim.yMid - 3); + drawRightAlignedFont(mc, m, String.format("%.2f", computer.speed), xSpeedText, dim.yMid - 3, context); drawBox(m, xSpeedText - 29.5f, dim.yMid - 4.5f, 30, 10); } @@ -44,7 +47,7 @@ public void render(MatrixStack m, float partial, MinecraftClient mc) { if (i % 1 == 0) { drawHorizontalLine(m, left - 2, right, y); if (!CONFIG.speed_showReadout || y > dim.yMid + 7 || y < dim.yMid - 7) { - drawRightAlignedFont(mc, m, String.format("%.0f", i), xSpeedText, y - 3); + drawRightAlignedFont(mc, m, String.format("%.0f", i), xSpeedText, y - 3, context); } } drawHorizontalLine(m, left, right, y); diff --git a/src/main/java/net/torocraft/flighthud/mixin/InGameHudMixin.java b/src/main/java/net/torocraft/flighthud/mixin/InGameHudMixin.java index 9b0d1b4..5059547 100644 --- a/src/main/java/net/torocraft/flighthud/mixin/InGameHudMixin.java +++ b/src/main/java/net/torocraft/flighthud/mixin/InGameHudMixin.java @@ -1,8 +1,8 @@ package net.torocraft.flighthud.mixin; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.InGameHud; -import net.minecraft.client.util.math.MatrixStack; import net.torocraft.flighthud.HudRenderer; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -23,7 +23,5 @@ public class InGameHudMixin { private MinecraftClient client; @Inject(method = "render", at = @At("RETURN")) - private void render(MatrixStack ms, float partial, CallbackInfo info) { - hud.render(ms, partial, client); - } + private void render(DrawContext context, float tickDelta, CallbackInfo ci) { hud.render(context, tickDelta, client); } } \ No newline at end of file