From 5b5f781095b94154e4cd740187cb683ea50de8dd Mon Sep 17 00:00:00 2001 From: RudideC Date: Sat, 17 Jan 2026 00:24:39 +0100 Subject: [PATCH 1/9] nofog mod you can customise if you want to be able to see through liquids, but only lava and powdered snow work (not water) --- .../org/saturnclient/modules/ModManager.java | 3 +- .../org/saturnclient/modules/mods/NoFog.java | 39 ++++++++++++++++++ .../mods/mixins/BackgroundRendererMixin.java | 33 +++++++++++++++ .../saturnclient/textures/gui/mod/nofog.png | Bin 0 -> 282 bytes src/main/resources/mods.mixins.json | 3 +- 5 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/saturnclient/modules/mods/NoFog.java create mode 100644 src/main/java/org/saturnclient/modules/mods/mixins/BackgroundRendererMixin.java create mode 100644 src/main/resources/assets/saturnclient/textures/gui/mod/nofog.png diff --git a/src/main/java/org/saturnclient/modules/ModManager.java b/src/main/java/org/saturnclient/modules/ModManager.java index 42b2d25..294b5c2 100644 --- a/src/main/java/org/saturnclient/modules/ModManager.java +++ b/src/main/java/org/saturnclient/modules/ModManager.java @@ -17,7 +17,8 @@ public class ModManager { new Coordinates(), new Freelook(), new Keystrokes(), - new Fullbright() + new Fullbright(), + new NoFog() }; public static void init() { diff --git a/src/main/java/org/saturnclient/modules/mods/NoFog.java b/src/main/java/org/saturnclient/modules/mods/NoFog.java new file mode 100644 index 0000000..14c3ace --- /dev/null +++ b/src/main/java/org/saturnclient/modules/mods/NoFog.java @@ -0,0 +1,39 @@ +package org.saturnclient.modules.mods; + +import org.saturnclient.modules.Module; +import org.saturnclient.modules.ModuleDetails; +import org.saturnclient.saturnclient.config.Property; + +public class NoFog extends Module { + private static Property enabled = Property.bool(false); + private static Property liquids = Property.bool(false); + + public NoFog() { + super( + new ModuleDetails("No Fog", "nofog") + .description("Stops fog from rendering") + .tags("Camera") + .version("v0.1.0"), + enabled.named("Enabled"), + liquids.named("See through liquids")); + } + + @Override + public boolean isEnabled() { + return enabled.value; + } + + @Override + public void onEnabled(boolean e) { + enabled.value = e; + } + + // static for the mixin + public static boolean isActive() { + return enabled.value; + } + + public static boolean liquids() { + return liquids.value; + } +} diff --git a/src/main/java/org/saturnclient/modules/mods/mixins/BackgroundRendererMixin.java b/src/main/java/org/saturnclient/modules/mods/mixins/BackgroundRendererMixin.java new file mode 100644 index 0000000..fd354f1 --- /dev/null +++ b/src/main/java/org/saturnclient/modules/mods/mixins/BackgroundRendererMixin.java @@ -0,0 +1,33 @@ +package org.saturnclient.modules.mods.mixins; + +import net.minecraft.client.render.BackgroundRenderer; + +import org.saturnclient.modules.mods.NoFog; +import net.minecraft.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(BackgroundRenderer.class) +public class BackgroundRendererMixin { + + @ModifyVariable(method = "applyFog", at = @At("HEAD"), ordinal = 0, argsOnly = true) + private static float modifyFogStart(float viewDistance) { + if (NoFog.isActive()) { + return Float.MAX_VALUE; + } + return viewDistance; + } + // liquids + @Redirect( + method = "applyFog", + at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;isSpectator()Z") + ) + private static boolean redirectIsSpectator(Entity entity) { + if (NoFog.isActive() && NoFog.liquids()) { + return true; // pretend to be spectator + } + return entity.isSpectator(); + } +} diff --git a/src/main/resources/assets/saturnclient/textures/gui/mod/nofog.png b/src/main/resources/assets/saturnclient/textures/gui/mod/nofog.png new file mode 100644 index 0000000000000000000000000000000000000000..d7dc168035cdec9a615b34d443177d2f2bf4cdc6 GIT binary patch literal 282 zcmV+#0p Date: Mon, 19 Jan 2026 20:54:59 +0100 Subject: [PATCH 2/9] daycounter mod counts days --- .../org/saturnclient/modules/ModManager.java | 3 +- .../saturnclient/modules/mods/DayCounter.java | 60 +++++++++++++++++++ .../mods/mixins/BackgroundRendererMixin.java | 2 +- 3 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/saturnclient/modules/mods/DayCounter.java diff --git a/src/main/java/org/saturnclient/modules/ModManager.java b/src/main/java/org/saturnclient/modules/ModManager.java index 294b5c2..1bb98d8 100644 --- a/src/main/java/org/saturnclient/modules/ModManager.java +++ b/src/main/java/org/saturnclient/modules/ModManager.java @@ -18,7 +18,8 @@ public class ModManager { new Freelook(), new Keystrokes(), new Fullbright(), - new NoFog() + new NoFog(), + new DayCounter() }; public static void init() { diff --git a/src/main/java/org/saturnclient/modules/mods/DayCounter.java b/src/main/java/org/saturnclient/modules/mods/DayCounter.java new file mode 100644 index 0000000..6a347f6 --- /dev/null +++ b/src/main/java/org/saturnclient/modules/mods/DayCounter.java @@ -0,0 +1,60 @@ +package org.saturnclient.modules.mods; + +import org.saturnclient.modules.HudMod; +import org.saturnclient.modules.ModDimensions; +import org.saturnclient.modules.Module; +import org.saturnclient.modules.ModuleDetails; +import org.saturnclient.saturnclient.SaturnClient; +import org.saturnclient.saturnclient.config.Property; +import org.saturnclient.ui2.RenderScope; +import org.saturnclient.ui2.resources.Fonts; + +public class DayCounter extends Module implements HudMod { + private static Property enabled = Property.bool(false); + private static ModDimensions dimensions = new ModDimensions(40, 18); + + public DayCounter() { + super(new ModuleDetails("DayCounter", "day") + .description("Displays the number of days that have passed") + .version("v0.1.0") + .tags("Utility"), + enabled.named("Enabled"), + dimensions.prop() + ); + } + + @Override + public void renderDummy(RenderScope scope) { + renderDay(271, scope); + } + + @Override + public void renderHud(RenderScope scope) { + long day = (SaturnClient.client.world.getTimeOfDay() / 24000L); + renderDay(day, scope); + } + + public void renderDay(long day, RenderScope scope) { + String text = "Day: " + day; + scope.drawText(text, + 0, 0, dimensions.font.value, dimensions.fgColor.value); + dimensions.width = Fonts.getWidth(text, dimensions.font.value); + dimensions.height = 18 * text.split("\n").length; + } + + @Override + public boolean isEnabled() { + return enabled.value; + } + + @Override + public ModDimensions getDimensions() { + return dimensions; + } + + @Override + public void onEnabled(boolean e) { + enabled.value = e; + } +} + diff --git a/src/main/java/org/saturnclient/modules/mods/mixins/BackgroundRendererMixin.java b/src/main/java/org/saturnclient/modules/mods/mixins/BackgroundRendererMixin.java index fd354f1..b34bf23 100644 --- a/src/main/java/org/saturnclient/modules/mods/mixins/BackgroundRendererMixin.java +++ b/src/main/java/org/saturnclient/modules/mods/mixins/BackgroundRendererMixin.java @@ -15,7 +15,7 @@ public class BackgroundRendererMixin { @ModifyVariable(method = "applyFog", at = @At("HEAD"), ordinal = 0, argsOnly = true) private static float modifyFogStart(float viewDistance) { if (NoFog.isActive()) { - return Float.MAX_VALUE; + return Float.MAX_VALUE; // this could be customised } return viewDistance; } From d10f229ffa8bef2b6186f8b4c23e869d0371fb78 Mon Sep 17 00:00:00 2001 From: RudideC Date: Mon, 19 Jan 2026 20:55:07 +0100 Subject: [PATCH 3/9] daycounter image --- .../assets/saturnclient/textures/gui/mod/day.png | Bin 0 -> 294 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/saturnclient/textures/gui/mod/day.png diff --git a/src/main/resources/assets/saturnclient/textures/gui/mod/day.png b/src/main/resources/assets/saturnclient/textures/gui/mod/day.png new file mode 100644 index 0000000000000000000000000000000000000000..5fb33522fdf647e710b98dd9e5166550181eb2e1 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-&H|6fVg?3oVGw3ym^DWND0suu z#WAE}&f8m#d`$)dZVxTxwBPMtSJ0O(B_iy!P)S$z=YCng8NZwsNuM!dl>P8P`N;XA z_xr2Z!3eX!KUQO3paJ@>;J6#8+D@MlVkgh^55-u-J{=J zoWEuMl|O!p3zyE1uj6qYl&H~$DwO`zUc&UaLv?M65^4&Oh7%rBYB7O pi3WS;SE79WhKFBi%OvGiFx7jU->Vw5-xKIZ22WQ%mvv4FO#munb;1Au literal 0 HcmV?d00001 From 9b30ec70160a2b8db0417a6420f61f16ff2289a5 Mon Sep 17 00:00:00 2001 From: RudideC Date: Tue, 20 Jan 2026 14:18:44 +0100 Subject: [PATCH 4/9] small change --- src/main/java/org/saturnclient/modules/mods/DayCounter.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/saturnclient/modules/mods/DayCounter.java b/src/main/java/org/saturnclient/modules/mods/DayCounter.java index 6a347f6..318e928 100644 --- a/src/main/java/org/saturnclient/modules/mods/DayCounter.java +++ b/src/main/java/org/saturnclient/modules/mods/DayCounter.java @@ -12,6 +12,7 @@ import org.saturnclient.ui2.resources.Fonts; public class DayCounter extends Module implements HudMod { private static Property enabled = Property.bool(false); private static ModDimensions dimensions = new ModDimensions(40, 18); + long day = 0; public DayCounter() { super(new ModuleDetails("DayCounter", "day") @@ -30,7 +31,7 @@ public class DayCounter extends Module implements HudMod { @Override public void renderHud(RenderScope scope) { - long day = (SaturnClient.client.world.getTimeOfDay() / 24000L); + day = (SaturnClient.client.world.getTimeOfDay() / 24000L); renderDay(day, scope); } From 47f8dd5e22f74c0ce2b10be6a957b93c0ecf40dd Mon Sep 17 00:00:00 2001 From: RudideC Date: Tue, 20 Jan 2026 14:35:49 +0100 Subject: [PATCH 5/9] testing speedometer --- .../org/saturnclient/modules/ModManager.java | 3 +- .../modules/mods/Speedometer.java | 101 ++++++++++++++++++ 2 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/saturnclient/modules/mods/Speedometer.java diff --git a/src/main/java/org/saturnclient/modules/ModManager.java b/src/main/java/org/saturnclient/modules/ModManager.java index 1bb98d8..358663b 100644 --- a/src/main/java/org/saturnclient/modules/ModManager.java +++ b/src/main/java/org/saturnclient/modules/ModManager.java @@ -19,7 +19,8 @@ public class ModManager { new Keystrokes(), new Fullbright(), new NoFog(), - new DayCounter() + new DayCounter(), + new Speedometer() }; public static void init() { diff --git a/src/main/java/org/saturnclient/modules/mods/Speedometer.java b/src/main/java/org/saturnclient/modules/mods/Speedometer.java new file mode 100644 index 0000000..e66102f --- /dev/null +++ b/src/main/java/org/saturnclient/modules/mods/Speedometer.java @@ -0,0 +1,101 @@ +package org.saturnclient.modules.mods; + +import org.saturnclient.modules.HudMod; +import org.saturnclient.modules.ModDimensions; +import org.saturnclient.modules.Module; +import org.saturnclient.modules.ModuleDetails; +import org.saturnclient.saturnclient.SaturnClient; +import org.saturnclient.saturnclient.config.Property; +import org.saturnclient.ui2.RenderScope; +import org.saturnclient.ui2.resources.Fonts; + +import net.minecraft.util.math.Vec3d; + +public class Speedometer extends Module implements HudMod { + private static Property enabled = Property.bool(false); + private static Property axis = Property.select(0, "Absolute", "X axis", "Y axis"); + private static Property unitText = Property.select(0, "None", "Blocks/s", "blocks/s", "b/s"); + private static Property speedText = Property.bool(true); + private static ModDimensions dimensions = new ModDimensions(40, 18); + double speed = 0.; + + public Speedometer() { + super(new ModuleDetails("Speedometer", "coords") + .description("Displays your current speed") + .version("v0.1.0") + .tags("Utility"), + enabled.named("Enabled"), + axis.named("Speed type"), + unitText.named("Unit text"), + speedText.named("Show speed text"), + dimensions.prop() + ); + } + + @Override + public void renderDummy(RenderScope scope) { + renderSpeed(2.71, scope); + } + + @Override + public void renderHud(RenderScope scope) { + Vec3d velocity = SaturnClient.client.player.getVelocity(); + switch (axis.value) { + case 0: // Absolute + speed = (Math.sqrt(Math.pow(velocity.x, 2) + Math.pow(velocity.y, 2) + Math.pow(velocity.z, 2))); + break; + + case 1: // x axis + speed = (Math.sqrt(Math.pow(velocity.x, 2) + Math.pow(velocity.z, 2))); + break; + + case 2: // y axis + speed = (Math.sqrt(Math.pow(velocity.y, 2))); + break; + } + renderSpeed(speed, scope); + } + + public void renderSpeed(double speed, RenderScope scope) { + String f = String.format("%.2f ", speed); + + switch (unitText.value) { + case 1: + f += "Blocks/s"; + break; + + case 2: + f += "blocks/s"; + break; + case 3: + f += "b/s"; + break; + } + + String text = f; + + if (speedText.value) { + text = "Speed: " + text; + } + + scope.drawText(text, + 0, 0, dimensions.font.value, dimensions.fgColor.value); + dimensions.width = Fonts.getWidth(text, dimensions.font.value); + dimensions.height = 18 * text.split("\n").length; + } + + @Override + public boolean isEnabled() { + return enabled.value; + } + + @Override + public ModDimensions getDimensions() { + return dimensions; + } + + @Override + public void onEnabled(boolean e) { + enabled.value = e; + } +} From 4132a05c8f7c21d85abcb162ab4cadeb82109ae8 Mon Sep 17 00:00:00 2001 From: RudideC Date: Tue, 20 Jan 2026 14:44:29 +0100 Subject: [PATCH 6/9] blocks/tick -> blocks/s --- src/main/java/org/saturnclient/modules/mods/Speedometer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/saturnclient/modules/mods/Speedometer.java b/src/main/java/org/saturnclient/modules/mods/Speedometer.java index e66102f..13ee1c7 100644 --- a/src/main/java/org/saturnclient/modules/mods/Speedometer.java +++ b/src/main/java/org/saturnclient/modules/mods/Speedometer.java @@ -50,10 +50,10 @@ public class Speedometer extends Module implements HudMod { break; case 2: // y axis - speed = (Math.sqrt(Math.pow(velocity.y, 2))); + speed = (Math.abs(velocity.y)); break; } - renderSpeed(speed, scope); + renderSpeed(speed * 20, scope); // blocks/tick to blocks/s } public void renderSpeed(double speed, RenderScope scope) { From dcd82fa58e7ac1da62269fd598e81574a68c23f6 Mon Sep 17 00:00:00 2001 From: RudideC Date: Tue, 20 Jan 2026 14:51:22 +0100 Subject: [PATCH 7/9] default is x axis --- src/main/java/org/saturnclient/modules/mods/Speedometer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/saturnclient/modules/mods/Speedometer.java b/src/main/java/org/saturnclient/modules/mods/Speedometer.java index 13ee1c7..8118ce1 100644 --- a/src/main/java/org/saturnclient/modules/mods/Speedometer.java +++ b/src/main/java/org/saturnclient/modules/mods/Speedometer.java @@ -13,7 +13,7 @@ import net.minecraft.util.math.Vec3d; public class Speedometer extends Module implements HudMod { private static Property enabled = Property.bool(false); - private static Property axis = Property.select(0, "Absolute", "X axis", "Y axis"); + private static Property axis = Property.select(1, "Absolute", "X axis", "Y axis"); private static Property unitText = Property.select(0, "None", "Blocks/s", "blocks/s", "b/s"); private static Property speedText = Property.bool(true); private static ModDimensions dimensions = new ModDimensions(40, 18); From ba1b68d8fa1889252d2bc727469f6c70b1dfb0fe Mon Sep 17 00:00:00 2001 From: RudideC Date: Tue, 20 Jan 2026 14:57:59 +0100 Subject: [PATCH 8/9] speedometer works in vehicles --- .../org/saturnclient/modules/mods/Speedometer.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/saturnclient/modules/mods/Speedometer.java b/src/main/java/org/saturnclient/modules/mods/Speedometer.java index 8118ce1..26d467a 100644 --- a/src/main/java/org/saturnclient/modules/mods/Speedometer.java +++ b/src/main/java/org/saturnclient/modules/mods/Speedometer.java @@ -10,6 +10,7 @@ import org.saturnclient.ui2.RenderScope; import org.saturnclient.ui2.resources.Fonts; import net.minecraft.util.math.Vec3d; +import net.minecraft.entity.Entity; public class Speedometer extends Module implements HudMod { private static Property enabled = Property.bool(false); @@ -18,6 +19,7 @@ public class Speedometer extends Module implements HudMod { private static Property speedText = Property.bool(true); private static ModDimensions dimensions = new ModDimensions(40, 18); double speed = 0.; + Vec3d velocity; public Speedometer() { super(new ModuleDetails("Speedometer", "coords") @@ -39,7 +41,14 @@ public class Speedometer extends Module implements HudMod { @Override public void renderHud(RenderScope scope) { - Vec3d velocity = SaturnClient.client.player.getVelocity(); + Entity vehicle = SaturnClient.client.player.getVehicle(); + + if (vehicle == null) { + velocity = SaturnClient.client.player.getVelocity(); + } else { + velocity = vehicle.getVelocity(); + } + switch (axis.value) { case 0: // Absolute speed = (Math.sqrt(Math.pow(velocity.x, 2) + Math.pow(velocity.y, 2) + Math.pow(velocity.z, 2))); From 31e9a8d56e68647f70ff9e059705d860ef1ab618 Mon Sep 17 00:00:00 2001 From: RudideC Date: Tue, 20 Jan 2026 15:30:57 +0100 Subject: [PATCH 9/9] speedometer module finished logo included --- .../saturnclient/modules/mods/Speedometer.java | 12 ++++++++---- .../saturnclient/textures/gui/mod/speed.png | Bin 0 -> 1032 bytes 2 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 src/main/resources/assets/saturnclient/textures/gui/mod/speed.png diff --git a/src/main/java/org/saturnclient/modules/mods/Speedometer.java b/src/main/java/org/saturnclient/modules/mods/Speedometer.java index 26d467a..ddb17f2 100644 --- a/src/main/java/org/saturnclient/modules/mods/Speedometer.java +++ b/src/main/java/org/saturnclient/modules/mods/Speedometer.java @@ -20,9 +20,10 @@ public class Speedometer extends Module implements HudMod { private static ModDimensions dimensions = new ModDimensions(40, 18); double speed = 0.; Vec3d velocity; + double y = 0.; public Speedometer() { - super(new ModuleDetails("Speedometer", "coords") + super(new ModuleDetails("Speedometer", "speed") .description("Displays your current speed") .version("v0.1.0") .tags("Utility"), @@ -42,16 +43,19 @@ public class Speedometer extends Module implements HudMod { @Override public void renderHud(RenderScope scope) { Entity vehicle = SaturnClient.client.player.getVehicle(); + Entity player = SaturnClient.client.player; if (vehicle == null) { - velocity = SaturnClient.client.player.getVelocity(); + velocity = player.getVelocity(); + y = player.isOnGround() ? 0. : velocity.y; } else { velocity = vehicle.getVelocity(); + y = vehicle.isOnGround() ? 0. : velocity.y; } switch (axis.value) { case 0: // Absolute - speed = (Math.sqrt(Math.pow(velocity.x, 2) + Math.pow(velocity.y, 2) + Math.pow(velocity.z, 2))); + speed = (Math.sqrt(Math.pow(velocity.x, 2) + Math.pow(y, 2) + Math.pow(velocity.z, 2))); break; case 1: // x axis @@ -59,7 +63,7 @@ public class Speedometer extends Module implements HudMod { break; case 2: // y axis - speed = (Math.abs(velocity.y)); + speed = (Math.abs(y)); break; } renderSpeed(speed * 20, scope); // blocks/tick to blocks/s diff --git a/src/main/resources/assets/saturnclient/textures/gui/mod/speed.png b/src/main/resources/assets/saturnclient/textures/gui/mod/speed.png new file mode 100644 index 0000000000000000000000000000000000000000..8ad03eb9be96cda1310cf705ba57b9eec6e02d61 GIT binary patch literal 1032 zcmV+j1o!)iP)-+xSTI(bdF=E7s5#wJ5&>ffsYyuj9Tfl4J6Yv>m0d4~)G-fu?HBkxxIs*%Uf% zj!&Aq5GZet06GDyfR~O_Ux5q27GMrA45)VG_B=$g%^Lg7kv|1i0~N&zV!Dh5xCtx= zs?v=Ag^+YyE*$~x0}~4wKo?*S(CQd9C(1I+OB;wYW&rTr(Q7vL+REoUh@QZ8C$EDq zcqEIt*#vS}!wv##MGl5b=~g;Q5Ph}WhKImNpbzjt@1|v#-w0d|k&n>|d^Ej!XZ6)A z{f~q9xvs<$DYO;o;mGXE8Sdqh0>EkMsY`ipN&qCuC1A?ttZEWi-VLTNF`v%04p<1>RG@FJ--Mod|1+~yGg099izI|>> zAeVCtWW4_TU$6jyv`E-9im?!8aj`W|x~rwHC9K$o=dswgYh_+p5c#@H;CHd#_6g5Q z7>P-W31FUlZSV=V`OeOz2w<0d-Qp9@mGEk!#6j{7!Jj?OW~?;|MHcy-(kd$V_dI8t zvOeYg2;KD-^E}c~HvhOY05-_Sli3`s-sp%)+?*#c8E=7)T!mQUuJ zVNs^Ltl+4740xw!+xzd#aBUMMkgyxba@h=iu6Qq>g41d^l>@aY#w^_iCE5wVASdMm z)MhiWT$jhzS7szi1i%d7oO~<(k3unG#E22&zs66y5_GVucokv*0000