Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
42 changes: 17 additions & 25 deletions src/main/java/net/torocraft/flighthud/HudComponent.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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();
}

Expand All @@ -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) {
Expand Down Expand Up @@ -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();
}
}
9 changes: 6 additions & 3 deletions src/main/java/net/torocraft/flighthud/HudRenderer.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -42,26 +43,28 @@ 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) {
return;
}

try {

MatrixStack m = context.getMatrices();
m.push();

if (HudComponent.CONFIG.scale != 1d) {
float scale = 1 / (float) HudComponent.CONFIG.scale;
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) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;

Expand All @@ -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);
}

Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -17,16 +18,18 @@ 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;
}

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);
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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);

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand All @@ -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);
}

Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
}
Expand All @@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand All @@ -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);
}

Expand Down Expand Up @@ -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 {
Expand Down
Loading