From 9915450ca948c8d1bac8ede255d1ea5c1929855f Mon Sep 17 00:00:00 2001 From: Oblio Date: Mon, 13 Mar 2023 13:55:30 -0400 Subject: [PATCH 1/4] fixes for 1.19.3 --- build.gradle | 4 +- gradle.properties | 13 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../net/torocraft/flighthud/HudComponent.java | 18 +- .../flighthud/components/PitchIndicator.java | 209 +++++++++--------- src/main/resources/fabric.mod.json | 6 +- 6 files changed, 125 insertions(+), 127 deletions(-) diff --git a/build.gradle b/build.gradle index 006b7d5..dd91845 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '0.12-SNAPSHOT' + id 'fabric-loom' version '1.0-SNAPSHOT' id 'maven-publish' } @@ -34,7 +34,7 @@ processResources { // ensure that the encoding is set to UTF-8, no matter what the system default is // this fixes some edge cases with special characters not displaying correctly // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html -tasks.withType(JavaCompile) { +tasks.withType(JavaCompile).configureEach { options.encoding = "UTF-8" } diff --git a/gradle.properties b/gradle.properties index abcccdb..49ae220 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,21 +1,22 @@ # Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx1G +org.gradle.parallel=true # Fabric Properties # check these on https://fabricmc.net/versions.html # After making changes # gradlew --refresh-dependencies # To remap the mixin locations: -# gradlew migrateMappings --mappings "1.16.1+build.9" +# gradlew migrateMappings --mappings "1.19.3+build.5" -minecraft_version=1.19 -yarn_mappings=1.19+build.1 -loader_version=0.14.7 +minecraft_version=1.19.3 +yarn_mappings=1.19.3+build.5 +loader_version=0.14.13 #Fabric api -fabric_version=0.55.3+1.19 +fabric_version=0.71.0+1.19.3 # Mod Properties -mod_version = 1.19-fabric-1 +mod_version = 1.19.3-fabric-1 maven_group = net.torocraft archives_base_name = flighthud \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8a17ae4..594324a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https://services.gradle.org/distributions/gradle-7.3.1-bin.zip +distributionUrl=https://services.gradle.org/distributions/gradle-7.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/net/torocraft/flighthud/HudComponent.java b/src/main/java/net/torocraft/flighthud/HudComponent.java index 08be596..948f133 100644 --- a/src/main/java/net/torocraft/flighthud/HudComponent.java +++ b/src/main/java/net/torocraft/flighthud/HudComponent.java @@ -3,16 +3,11 @@ 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.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 net.torocraft.flighthud.config.HudConfig; +import org.joml.Matrix4f; public abstract class HudComponent extends DrawableHelper { @@ -27,7 +22,8 @@ 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)); + m.multiply(RotationAxis.POSITIVE_Z.rotationDegrees(rot + 45)); +// m.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(rot + 45)); drawVerticalLine(m, 0, 0, 5, CONFIG.color); drawHorizontalLine(m, 0, 5, 0, CONFIG.color); m.pop(); @@ -131,13 +127,13 @@ private static void fill(Matrix4f matrix, float x1, float y1, float x2, float y2 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()); + BufferRenderer.drawWithGlobalProgram(bufferBuilder.end()); RenderSystem.enableTexture(); RenderSystem.disableBlend(); } diff --git a/src/main/java/net/torocraft/flighthud/components/PitchIndicator.java b/src/main/java/net/torocraft/flighthud/components/PitchIndicator.java index d75ea9e..c52910d 100644 --- a/src/main/java/net/torocraft/flighthud/components/PitchIndicator.java +++ b/src/main/java/net/torocraft/flighthud/components/PitchIndicator.java @@ -2,142 +2,143 @@ import net.minecraft.client.MinecraftClient; 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; public class PitchIndicator extends HudComponent { - private final Dimensions dim; - private final FlightComputer computer; - private final PitchIndicatorData pitchData = new PitchIndicatorData(); + private final Dimensions dim; + private final FlightComputer computer; + private final PitchIndicatorData pitchData = new PitchIndicatorData(); - public PitchIndicator(FlightComputer computer, Dimensions dim) { - this.computer = computer; - this.dim = dim; - } + public PitchIndicator(FlightComputer computer, Dimensions dim) { + this.computer = computer; + this.dim = dim; + } - @Override - public void render(MatrixStack m, float partial, MinecraftClient mc) { - pitchData.update(dim); + @Override + public void render(MatrixStack m, float partial, MinecraftClient mc) { + pitchData.update(dim); - float horizonOffset = computer.pitch * dim.degreesPerPixel; - float yHorizon = dim.yMid + horizonOffset; + float horizonOffset = computer.pitch * dim.degreesPerPixel; + float yHorizon = dim.yMid + horizonOffset; - float a = dim.yMid; - float b = dim.xMid; + float a = dim.yMid; + float b = dim.xMid; - float roll = computer.roll * (CONFIG.pitchLadder_reverseRoll ? -1 : 1); + float roll = computer.roll * (CONFIG.pitchLadder_reverseRoll ? -1 : 1); - if (CONFIG.pitchLadder_showRoll) { - m.push(); - m.translate(b, a, 0); - m.multiply(Vec3f.POSITIVE_Z.getDegreesQuaternion(roll)); - m.translate(-b, -a, 0); - } + if (CONFIG.pitchLadder_showRoll) { + m.push(); + m.translate(b, a, 0); + m.multiply(RotationAxis.POSITIVE_Z.rotationDegrees(roll)); + //m.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(roll)); + m.translate(-b, -a, 0); + } - if (CONFIG.pitchLadder_showLadder) { - drawLadder(mc, m, yHorizon); - } + if (CONFIG.pitchLadder_showLadder) { + drawLadder(mc, m, yHorizon); + } - drawReferenceMark(mc, m, yHorizon, CONFIG.pitchLadder_optimumClimbAngle); - drawReferenceMark(mc, m, yHorizon, CONFIG.pitchLadder_optimumGlideAngle); + drawReferenceMark(mc, m, yHorizon, CONFIG.pitchLadder_optimumClimbAngle); + drawReferenceMark(mc, m, yHorizon, CONFIG.pitchLadder_optimumGlideAngle); - if (CONFIG.pitchLadder_showHorizon) { - pitchData.l1 -= pitchData.margin; - pitchData.r2 += pitchData.margin; - drawDegreeBar(mc, m, 0, yHorizon); - } + if (CONFIG.pitchLadder_showHorizon) { + pitchData.l1 -= pitchData.margin; + pitchData.r2 += pitchData.margin; + drawDegreeBar(mc, m, 0, yHorizon); + } - if (CONFIG.pitchLadder_showRoll) { - m.pop(); + if (CONFIG.pitchLadder_showRoll) { + m.pop(); + } } - } - private void drawLadder(MinecraftClient mc, MatrixStack m, float yHorizon) { - int degreesPerBar = CONFIG.pitchLadder_degreesPerBar; + private void drawLadder(MinecraftClient mc, MatrixStack m, float yHorizon) { + int degreesPerBar = CONFIG.pitchLadder_degreesPerBar; - if (degreesPerBar < 1) { - degreesPerBar = 20; - } + if (degreesPerBar < 1) { + degreesPerBar = 20; + } + + for (int i = degreesPerBar; i <= 90; i = i + degreesPerBar) { + float offset = dim.degreesPerPixel * i; + drawDegreeBar(mc, m, -i, yHorizon + offset); + drawDegreeBar(mc, m, i, yHorizon - offset); + } - for (int i = degreesPerBar; i <= 90; i = i + degreesPerBar) { - float offset = dim.degreesPerPixel * i; - drawDegreeBar(mc, m, -i, yHorizon + offset); - drawDegreeBar(mc, m, i, yHorizon - offset); } - } + private void drawReferenceMark(MinecraftClient mc, MatrixStack m, float yHorizon, float degrees) { + if (degrees == 0) { + return; + } - private void drawReferenceMark(MinecraftClient mc, MatrixStack m, float yHorizon, float degrees) { - if (degrees == 0) { - return; - } + float y = (-degrees * dim.degreesPerPixel) + yHorizon; + + if (y < dim.tFrame || y > dim.bFrame) { + return; + } - float y = (-degrees * dim.degreesPerPixel) + yHorizon; + float width = (pitchData.l2 - pitchData.l1) * 0.45f; + float l1 = pitchData.l2 - width; + float r2 = pitchData.r1 + width; - if (y < dim.tFrame || y > dim.bFrame) { - return; + drawHorizontalLineDashed(m, l1, pitchData.l2, y, 3); + drawHorizontalLineDashed(m, pitchData.r1, r2, y, 3); } - float width = (pitchData.l2 - pitchData.l1) * 0.45f; - float l1 = pitchData.l2 - width; - float r2 = pitchData.r1 + width; + private void drawDegreeBar(MinecraftClient mc, MatrixStack m, float degree, float y) { - drawHorizontalLineDashed(m, l1, pitchData.l2, y, 3); - drawHorizontalLineDashed(m, pitchData.r1, r2, y, 3); - } + if (y < dim.tFrame || y > dim.bFrame) { + return; + } - private void drawDegreeBar(MinecraftClient mc, MatrixStack m, float degree, float y) { + int dashes = degree < 0 ? 4 : 1; - if (y < dim.tFrame || y > dim.bFrame) { - return; - } + drawHorizontalLineDashed(m, pitchData.l1, pitchData.l2, y, dashes); + drawHorizontalLineDashed(m, pitchData.r1, pitchData.r2, y, dashes); + + int sideTickHeight = degree >= 0 ? 5 : -5; + drawVerticalLine(m, pitchData.l1, y, y + sideTickHeight); + drawVerticalLine(m, pitchData.r2, y, y + sideTickHeight); + + int fontVerticalOffset = degree >= 0 ? 0 : 6; + + drawFont(mc, m, String.format("%d", i(Math.abs(degree))), pitchData.r2 + 6, + (float) y - fontVerticalOffset); - int dashes = degree < 0 ? 4 : 1; - - drawHorizontalLineDashed(m, pitchData.l1, pitchData.l2, y, dashes); - drawHorizontalLineDashed(m, pitchData.r1, pitchData.r2, y, dashes); - - int sideTickHeight = degree >= 0 ? 5 : -5; - drawVerticalLine(m, pitchData.l1, y, y + sideTickHeight); - drawVerticalLine(m, pitchData.r2, y, y + sideTickHeight); - - int fontVerticalOffset = degree >= 0 ? 0 : 6; - - drawFont(mc, m, String.format("%d", i(Math.abs(degree))), pitchData.r2 + 6, - (float) y - fontVerticalOffset); - - drawFont(mc, m, String.format("%d", i(Math.abs(degree))), pitchData.l1 - 17, - (float) y - fontVerticalOffset); - } - - private static class PitchIndicatorData { - public float width; - public float mid; - public float margin; - public float sideWidth; - public float l1; - public float l2; - public float r1; - public float r2; - - public void update(Dimensions dim) { - width = i(dim.wScreen / 3); - float left = width; - - mid = i((width / 2) + left); - margin = i(width * 0.3d); - l1 = left + margin; - l2 = mid - 7; - sideWidth = l2 - l1; - r1 = mid + 8; - r2 = r1 + sideWidth; + drawFont(mc, m, String.format("%d", i(Math.abs(degree))), pitchData.l1 - 17, + (float) y - fontVerticalOffset); } - private int i(double d) { - return (int) Math.round(d); + private static class PitchIndicatorData { + public float width; + public float mid; + public float margin; + public float sideWidth; + public float l1; + public float l2; + public float r1; + public float r2; + + public void update(Dimensions dim) { + width = i(dim.wScreen / 3); + float left = width; + + mid = i((width / 2) + left); + margin = i(width * 0.3d); + l1 = left + margin; + l2 = mid - 7; + sideWidth = l2 - l1; + r1 = mid + 8; + r2 = r1 + sideWidth; + } + + private int i(double d) { + return (int) Math.round(d); + } } - } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 1e3c057..1ab5eed 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -24,9 +24,9 @@ "flighthud.mixins.json" ], "depends": { - "fabricloader": ">=0.14.7", - "fabric": "*", - "minecraft": ">=1.19", + "fabricloader": ">=0.14.11", + "fabric-api": "*", + "minecraft": "~1.19.3", "java": ">=17" } } \ No newline at end of file From 41e1517c131371af025c37c4a6f0ac3643da8e53 Mon Sep 17 00:00:00 2001 From: Oblio Date: Thu, 23 Mar 2023 22:18:25 -0400 Subject: [PATCH 2/4] update to 1.19.4 --- build.gradle | 2 +- gradle.properties | 10 +++++----- .../java/net/torocraft/flighthud/HudComponent.java | 2 -- src/main/resources/fabric.mod.json | 4 ++-- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index dd91845..8b5b8f3 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.0-SNAPSHOT' + id 'fabric-loom' version '1.1-SNAPSHOT' id 'maven-publish' } diff --git a/gradle.properties b/gradle.properties index 49ae220..382d63b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,14 +9,14 @@ org.gradle.parallel=true # To remap the mixin locations: # gradlew migrateMappings --mappings "1.19.3+build.5" -minecraft_version=1.19.3 -yarn_mappings=1.19.3+build.5 -loader_version=0.14.13 +minecraft_version=1.19.4 +yarn_mappings=1.19.4+build.1 +loader_version=0.14.18 #Fabric api -fabric_version=0.71.0+1.19.3 +fabric_version=0.76.0+1.19.4 # Mod Properties -mod_version = 1.19.3-fabric-1 +mod_version = 1.19.4-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 948f133..eec57c2 100644 --- a/src/main/java/net/torocraft/flighthud/HudComponent.java +++ b/src/main/java/net/torocraft/flighthud/HudComponent.java @@ -125,7 +125,6 @@ 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::getPositionColorProgram); bufferBuilder.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); @@ -134,7 +133,6 @@ private static void fill(Matrix4f matrix, float x1, float y1, float x2, float y2 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.drawWithGlobalProgram(bufferBuilder.end()); - RenderSystem.enableTexture(); RenderSystem.disableBlend(); } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 1ab5eed..4268f8e 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -24,9 +24,9 @@ "flighthud.mixins.json" ], "depends": { - "fabricloader": ">=0.14.11", + "fabricloader": ">=0.14.18", "fabric-api": "*", - "minecraft": "~1.19.3", + "minecraft": "~1.19.4", "java": ">=17" } } \ No newline at end of file From bc0dd9d04a570a711c0da5191a9aa1e164d9cb5a Mon Sep 17 00:00:00 2001 From: David Allemang Date: Mon, 17 Apr 2023 21:47:02 -0400 Subject: [PATCH 3/4] Support arbitrary camera roll Switch to use whatever camera orientation is used in GameRenderer#renderWorld. Fetches the InverseViewRotationMatrix used just before world rendering occurs. This enables roll support for mods "Cool Elytra Roll" and "Do a Barrel Roll", and implicitly supports any other mod which changes camera orientation. Move "FlightComputer" instance to be public static in FlightHud class, since both InGameHudMixin and GameRendererMixin need to access the same instance. --- .../torocraft/flighthud/FlightComputer.java | 65 ++++++++----------- .../net/torocraft/flighthud/FlightHud.java | 2 + .../net/torocraft/flighthud/HudRenderer.java | 5 +- .../flighthud/config/SettingsConfig.java | 2 - .../flighthud/mixin/GameRendererMixin.java | 40 ++++++++++++ .../flighthud/mixin/InGameHudMixin.java | 8 +-- src/main/resources/flighthud.mixins.json | 3 +- 7 files changed, 79 insertions(+), 46 deletions(-) create mode 100644 src/main/java/net/torocraft/flighthud/mixin/GameRendererMixin.java diff --git a/src/main/java/net/torocraft/flighthud/FlightComputer.java b/src/main/java/net/torocraft/flighthud/FlightComputer.java index de26854..b2e72fd 100644 --- a/src/main/java/net/torocraft/flighthud/FlightComputer.java +++ b/src/main/java/net/torocraft/flighthud/FlightComputer.java @@ -2,13 +2,14 @@ import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; import net.minecraft.entity.EquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; +import org.joml.Matrix3f; public class FlightComputer { private static final float TICKS_PER_SECOND = 20; @@ -28,12 +29,13 @@ public class FlightComputer { public Float distanceFromGround; public Float elytraHealth; - public void update(MinecraftClient client, float partial) { + public void update(MinecraftClient client, Matrix3f normalMatrix) { + heading = computeHeading(client, normalMatrix); + pitch = computePitch(client, normalMatrix); + roll = computeRoll(client, normalMatrix); + velocity = client.player.getVelocity(); - pitch = computePitch(client, partial); speed = computeSpeed(client); - roll = computeRoll(client, partial); - heading = computeHeading(client); altitude = computeAltitude(client); groundLevel = computeGroundLevel(client); distanceFromGround = computeDistanceFromGround(client, altitude, groundLevel); @@ -66,43 +68,36 @@ private float computeFlightHeading(Vec3d velocity, float heading) { return toHeading((float) Math.toDegrees(-Math.atan2(velocity.x, velocity.z))); } - /** - * Roll logic is from: - * https://github.com/Jorbon/cool_elytra/blob/main/src/main/java/edu/jorbonism/cool_elytra/mixin/GameRendererMixin.java - * to enable both mods will sync up when used together. - */ - private float computeRoll(MinecraftClient client, float partial) { + //region Camera Angles + + private float computeRoll(MinecraftClient client, Matrix3f normalMatrix) { if (!FlightHud.CONFIG_SETTINGS.calculateRoll) { - return 0; + return 0.0f; } - float wingPower = FlightHud.CONFIG_SETTINGS.rollTurningForce; - float rollSmoothing = FlightHud.CONFIG_SETTINGS.rollSmoothing; - Vec3d facing = client.player.getRotationVecClient(); - Vec3d velocity = client.player.getVelocity(); - double horizontalFacing2 = facing.horizontalLengthSquared(); - double horizontalSpeed2 = velocity.horizontalLengthSquared(); - - float rollAngle = 0.0f; - - if (horizontalFacing2 > 0.0D && horizontalSpeed2 > 0.0D) { - double dot = (velocity.x * facing.x + velocity.z * facing.z) / Math.sqrt(horizontalFacing2 * horizontalSpeed2); - dot = MathHelper.clamp(dot, -1, 1); - double direction = Math.signum(velocity.x * facing.z - velocity.z * facing.x); - rollAngle = (float) (Math.atan(Math.sqrt(horizontalSpeed2) * Math.acos(dot) * wingPower) * direction - * 57.29577951308); - } + float y = normalMatrix.getRowColumn(0, 1); + float x = normalMatrix.getRowColumn(1, 1); + return (float) Math.toDegrees(Math.atan2(y, x)); + } - rollAngle = (float) ((1.0 - rollSmoothing) * rollAngle + rollSmoothing * previousRollAngle); - previousRollAngle = rollAngle; + private float computePitch(MinecraftClient client, Matrix3f normalMatrix) { + if (client.player == null) { + return 0.0f; + } - return rollAngle; + return -client.player.getPitch(); } - private float computePitch(MinecraftClient client, float parital) { - return client.player.getPitch(parital) * -1; + private float computeHeading(MinecraftClient client, Matrix3f normalMatrix) { + if (client.player == null) { + return 0.0f; + } + + return toHeading(client.player.getYaw()); } + //endregion + private boolean isGround(BlockPos pos, MinecraftClient client) { BlockState block = client.world.getBlockState(pos); return !block.isAir(); @@ -136,10 +131,6 @@ private float computeAltitude(MinecraftClient client) { return (float) client.player.getPos().y - 1; } - private float computeHeading(MinecraftClient client) { - return toHeading(client.player.getYaw()); - } - private float computeSpeed(MinecraftClient client) { float speed = 0; var player = client.player; diff --git a/src/main/java/net/torocraft/flighthud/FlightHud.java b/src/main/java/net/torocraft/flighthud/FlightHud.java index f64076a..70c7d23 100644 --- a/src/main/java/net/torocraft/flighthud/FlightHud.java +++ b/src/main/java/net/torocraft/flighthud/FlightHud.java @@ -38,6 +38,8 @@ public class FlightHud implements ClientModInitializer { private static KeyBinding keyBinding; + public static final FlightComputer computer = new FlightComputer(); + @Override public void onInitializeClient() { CONFIG_LOADER_SETTINGS.load(); diff --git a/src/main/java/net/torocraft/flighthud/HudRenderer.java b/src/main/java/net/torocraft/flighthud/HudRenderer.java index aceaebc..56adb50 100644 --- a/src/main/java/net/torocraft/flighthud/HudRenderer.java +++ b/src/main/java/net/torocraft/flighthud/HudRenderer.java @@ -1,5 +1,6 @@ package net.torocraft.flighthud; +import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; import net.minecraft.client.util.math.MatrixStack; import net.torocraft.flighthud.components.AltitudeIndicator; @@ -11,10 +12,11 @@ import net.torocraft.flighthud.components.SpeedIndicator; import net.torocraft.flighthud.config.SettingsConfig.DisplayMode; +import static net.torocraft.flighthud.FlightHud.computer; + public class HudRenderer extends HudComponent { private final Dimensions dim = new Dimensions(); - private final FlightComputer computer = new FlightComputer(); private static final String FULL = DisplayMode.FULL.toString(); private static final String MIN = DisplayMode.MIN.toString(); @@ -57,7 +59,6 @@ public void render(MatrixStack m, float partial, MinecraftClient client) { m.scale(scale, scale, scale); } - computer.update(client, partial); dim.update(client); for (HudComponent component : components) { diff --git a/src/main/java/net/torocraft/flighthud/config/SettingsConfig.java b/src/main/java/net/torocraft/flighthud/config/SettingsConfig.java index bdb1938..2e21fe2 100644 --- a/src/main/java/net/torocraft/flighthud/config/SettingsConfig.java +++ b/src/main/java/net/torocraft/flighthud/config/SettingsConfig.java @@ -14,8 +14,6 @@ public enum DisplayMode { public String displayModeWhenFlying = DisplayMode.FULL.toString(); public String displayModeWhenNotFlying = DisplayMode.NONE.toString(); public boolean calculateRoll = true; - public float rollTurningForce = 1.25f; - public float rollSmoothing = 0.85f; @Override public void update() { diff --git a/src/main/java/net/torocraft/flighthud/mixin/GameRendererMixin.java b/src/main/java/net/torocraft/flighthud/mixin/GameRendererMixin.java new file mode 100644 index 0000000..e5c7196 --- /dev/null +++ b/src/main/java/net/torocraft/flighthud/mixin/GameRendererMixin.java @@ -0,0 +1,40 @@ +package net.torocraft.flighthud.mixin; + +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.util.math.MatrixStack; +import org.joml.Matrix3f; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import static net.torocraft.flighthud.FlightHud.computer; + +@Mixin(GameRenderer.class) +public class GameRendererMixin { + @Shadow + @Final + MinecraftClient client; + + @Inject( + method = "renderWorld", + at = @At( + value = "INVOKE", + target = "Lcom/mojang/blaze3d/systems/RenderSystem;setInverseViewRotationMatrix(Lorg/joml/Matrix3f;)V", + shift = At.Shift.AFTER + ) + ) + private void renderWorld( + float tickDelta, + long limitTime, + MatrixStack matrices, + CallbackInfo ci + ) { + Matrix3f inverseViewRotationMatrix = RenderSystem.getInverseViewRotationMatrix(); + computer.update(client, inverseViewRotationMatrix.invert()); + } +} diff --git a/src/main/java/net/torocraft/flighthud/mixin/InGameHudMixin.java b/src/main/java/net/torocraft/flighthud/mixin/InGameHudMixin.java index 9b0d1b4..eb01822 100644 --- a/src/main/java/net/torocraft/flighthud/mixin/InGameHudMixin.java +++ b/src/main/java/net/torocraft/flighthud/mixin/InGameHudMixin.java @@ -16,14 +16,14 @@ public class InGameHudMixin { @Unique - private final HudRenderer hud = new HudRenderer(); + private final HudRenderer hudRenderer = new HudRenderer(); @Final @Shadow 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(MatrixStack ms, float tickDelta, CallbackInfo info) { + hudRenderer.render(ms, tickDelta, client); } -} \ No newline at end of file +} diff --git a/src/main/resources/flighthud.mixins.json b/src/main/resources/flighthud.mixins.json index 95dbf8d..51aac4a 100644 --- a/src/main/resources/flighthud.mixins.json +++ b/src/main/resources/flighthud.mixins.json @@ -4,7 +4,8 @@ "compatibilityLevel": "JAVA_17", "mixins": [], "client": [ - "InGameHudMixin" + "InGameHudMixin", + "GameRendererMixin" ], "injectors": { "defaultRequire": 1 From 831329899861c2c111b495460f7342b9f0e8d5a7 Mon Sep 17 00:00:00 2001 From: David Allemang Date: Mon, 17 Apr 2023 22:47:46 -0400 Subject: [PATCH 4/4] version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 382d63b..1ea39ad 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,6 +17,6 @@ loader_version=0.14.18 fabric_version=0.76.0+1.19.4 # Mod Properties -mod_version = 1.19.4-fabric-1 +mod_version = 1.19.4-fabric-2 maven_group = net.torocraft archives_base_name = flighthud \ No newline at end of file