From 88547269161178a3af03805175278e9d8ee17e85 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Sun, 8 Mar 2026 13:34:45 +0100 Subject: [PATCH] Refactor mixins --- common | 2 +- .../impl/modules/ArmorDisplayFabric.java | 2 +- .../impl/modules/AutoSprintFabric.java | 2 +- .../impl/modules/CoordinatesFabric.java | 2 +- .../impl/modules/CrosshairFabric.java | 2 +- .../impl/modules/DayCounterFabric.java | 2 +- .../saturnclient/impl/modules/FpsFabric.java | 2 +- .../impl/modules/FreelookFabric.java | 2 +- .../impl/modules/HealthDisplayFabric.java | 2 +- .../impl/modules/KeystrokesFabric.java | 2 +- .../impl/modules/NametagsFabric.java | 2 +- .../saturnclient/impl/modules/PingFabric.java | 8 +- .../impl/modules/SpeedometerFabric.java | 2 +- .../impl/modules/StatusEffectsFabric.java | 2 +- .../impl/provider/FabricModuleProvider.java | 37 --------- .../modules/HealthRenderState.java | 2 +- .../mixins/BackgroundRendererMixin.java | 19 ++--- .../modules/mixins/CameraMixin.java | 26 ++++--- .../modules/mixins/EntityMixin.java | 72 +++++++++--------- .../modules/mixins/GameRendererMixin.java | 14 ++-- .../mixins/LightmapTextureManagerMixin.java | 13 ++-- .../mixins/LivingEntityRenderStateMixin.java | 30 +++++--- .../mixins/LivingEntityRendererMixin.java | 31 ++++---- .../modules/mixins/NametagsMixin.java | 76 ++++++++++++++++--- .../modules/mixins/RenderMixin.java | 2 +- .../saturnclient/modules/mixins/TpsMixin.java | 4 +- .../saturnclient/SaturnClient.java | 3 +- 27 files changed, 193 insertions(+), 170 deletions(-) delete mode 100644 versions/1.21.4/src/main/java/org/saturnclient/impl/provider/FabricModuleProvider.java diff --git a/common b/common index da6576e..56d9be1 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit da6576e4edb9985fd9d862862c2346abf0b6e783 +Subproject commit 56d9be1e5a40b2fb76d5087ee05d5b65a960b73e diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/ArmorDisplayFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/ArmorDisplayFabric.java index 7c5a86d..3566afe 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/ArmorDisplayFabric.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/ArmorDisplayFabric.java @@ -1,7 +1,7 @@ package org.saturnclient.impl.modules; import org.saturnclient.common.ref.game.ItemStackRef; -import org.saturnclient.feature.interfaces.ArmorDisplayInterface; +import org.saturnclient.feature.features.featuresinterfaces.ArmorDisplayInterface; import net.minecraft.client.MinecraftClient; import net.minecraft.entity.EquipmentSlot; diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/AutoSprintFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/AutoSprintFabric.java index d8c55bb..0e34775 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/AutoSprintFabric.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/AutoSprintFabric.java @@ -1,6 +1,6 @@ package org.saturnclient.impl.modules; -import org.saturnclient.feature.interfaces.AutoSprintInterface; +import org.saturnclient.feature.features.featuresinterfaces.AutoSprintInterface; import net.minecraft.client.MinecraftClient; diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/CoordinatesFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/CoordinatesFabric.java index 4ab766e..cc5512b 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/CoordinatesFabric.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/CoordinatesFabric.java @@ -1,6 +1,6 @@ package org.saturnclient.impl.modules; -import org.saturnclient.feature.interfaces.CoordinatesInterface; +import org.saturnclient.feature.features.featuresinterfaces.CoordinatesInterface; import net.minecraft.client.MinecraftClient; import net.minecraft.util.math.Vec3d; diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/CrosshairFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/CrosshairFabric.java index 448a1bb..e21bda1 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/CrosshairFabric.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/CrosshairFabric.java @@ -1,6 +1,6 @@ package org.saturnclient.impl.modules; -import org.saturnclient.feature.interfaces.CrosshairInterface; +import org.saturnclient.feature.features.featuresinterfaces.CrosshairInterface; import net.minecraft.client.MinecraftClient; import net.minecraft.entity.Entity; diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/DayCounterFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/DayCounterFabric.java index 747cacb..7a58756 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/DayCounterFabric.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/DayCounterFabric.java @@ -1,6 +1,6 @@ package org.saturnclient.impl.modules; -import org.saturnclient.feature.interfaces.DayCounterInterface; +import org.saturnclient.feature.features.featuresinterfaces.DayCounterInterface; import net.minecraft.client.MinecraftClient; diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/FpsFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/FpsFabric.java index f1e2524..d3c7910 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/FpsFabric.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/FpsFabric.java @@ -1,6 +1,6 @@ package org.saturnclient.impl.modules; -import org.saturnclient.feature.interfaces.FpsInterface; +import org.saturnclient.feature.features.featuresinterfaces.FpsInterface; import net.minecraft.client.MinecraftClient; diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/FreelookFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/FreelookFabric.java index c866f4d..bf27d1e 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/FreelookFabric.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/FreelookFabric.java @@ -1,6 +1,6 @@ package org.saturnclient.impl.modules; -import org.saturnclient.feature.interfaces.FreelookInterface; +import org.saturnclient.feature.features.featuresinterfaces.FreelookInterface; import net.minecraft.client.MinecraftClient; import net.minecraft.client.option.Perspective; diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/HealthDisplayFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/HealthDisplayFabric.java index eb9a0d3..ee12a7f 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/HealthDisplayFabric.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/HealthDisplayFabric.java @@ -1,6 +1,6 @@ package org.saturnclient.impl.modules; -import org.saturnclient.feature.interfaces.HealthDisplayInterface; +import org.saturnclient.feature.features.featuresinterfaces.HealthDisplayInterface; import net.minecraft.client.MinecraftClient; diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/KeystrokesFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/KeystrokesFabric.java index b0a8b42..92c5564 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/KeystrokesFabric.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/KeystrokesFabric.java @@ -1,6 +1,6 @@ package org.saturnclient.impl.modules; -import org.saturnclient.feature.interfaces.KeystrokesInterface; +import org.saturnclient.feature.features.featuresinterfaces.KeystrokesInterface; import net.minecraft.client.MinecraftClient; diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/NametagsFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/NametagsFabric.java index 067831f..37e1ba2 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/NametagsFabric.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/NametagsFabric.java @@ -1,6 +1,6 @@ package org.saturnclient.impl.modules; -import org.saturnclient.feature.interfaces.NametagsInterface; +import org.saturnclient.feature.features.featuresinterfaces.NametagsInterface; import org.saturnclient.modules.HealthRenderState; import net.minecraft.client.render.entity.state.LivingEntityRenderState; diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/PingFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/PingFabric.java index e707fea..6d822f0 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/PingFabric.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/PingFabric.java @@ -1,6 +1,6 @@ package org.saturnclient.impl.modules; -import org.saturnclient.feature.interfaces.PingInterface; +import org.saturnclient.feature.features.featuresinterfaces.PingInterface; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayNetworkHandler; @@ -11,9 +11,11 @@ public class PingFabric implements PingInterface { @Override public int getPing() { - if (mc.player == null || mc.getNetworkHandler() == null) return 0; + if (mc.player == null || mc.getNetworkHandler() == null) + return 0; ClientPlayNetworkHandler handler = mc.getNetworkHandler(); - if (handler.getPlayerListEntry(mc.player.getUuid()) == null) return 0; + if (handler.getPlayerListEntry(mc.player.getUuid()) == null) + return 0; return handler.getPlayerListEntry(mc.player.getUuid()).getLatency(); } } \ No newline at end of file diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/SpeedometerFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/SpeedometerFabric.java index 9fcb83e..df10686 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/SpeedometerFabric.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/SpeedometerFabric.java @@ -1,6 +1,6 @@ package org.saturnclient.impl.modules; -import org.saturnclient.feature.interfaces.SpeedometerInterface; +import org.saturnclient.feature.features.featuresinterfaces.SpeedometerInterface; import net.minecraft.client.MinecraftClient; import net.minecraft.entity.Entity; diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/StatusEffectsFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/StatusEffectsFabric.java index c8c40ce..ee73fb5 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/StatusEffectsFabric.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/StatusEffectsFabric.java @@ -5,7 +5,7 @@ import java.util.stream.Collectors; import java.util.Arrays; import org.saturnclient.common.ref.asset.SpriteRef; -import org.saturnclient.feature.interfaces.StatusEffectsInterface; +import org.saturnclient.feature.features.featuresinterfaces.StatusEffectsInterface; import net.minecraft.client.MinecraftClient; import net.minecraft.client.texture.StatusEffectSpriteManager; diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/provider/FabricModuleProvider.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/provider/FabricModuleProvider.java deleted file mode 100644 index 4c02706..0000000 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/provider/FabricModuleProvider.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.saturnclient.impl.provider; - -import org.saturnclient.feature.Feature; -import org.saturnclient.feature.FeatureManager.ModuleProvider; -import org.saturnclient.feature.features.*; -import org.saturnclient.impl.modules.*; - -public class FabricModuleProvider implements ModuleProvider { - - public static final Feature[] MODS = { - new ArmorDisplay(new ArmorDisplayFabric()), - new AutoSprint(new AutoSprintFabric()), - new Coordinates(new CoordinatesFabric()), - new Crosshair(new CrosshairFabric()), - new DayCounter(new DayCounterFabric()), - new Fps(new FpsFabric()), - new Freelook(new FreelookFabric()), - new HealthDisplay(new HealthDisplayFabric()), - new Keystrokes(new KeystrokesFabric()), - - new Clock(), - - new Fullbright(), - new Nametags(new NametagsFabric()), - new NoFog(), - new Ping(new PingFabric()), - new Speedometer(new SpeedometerFabric()), - new StatusEffects(new StatusEffectsFabric()), - new Tps(), - new Zoom() - }; - - @Override - public Feature[] getMods() { - return MODS; - } -} \ No newline at end of file diff --git a/versions/1.21.4/src/main/java/org/saturnclient/modules/HealthRenderState.java b/versions/1.21.4/src/main/java/org/saturnclient/modules/HealthRenderState.java index bb03145..b3f505c 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/modules/HealthRenderState.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/modules/HealthRenderState.java @@ -1,6 +1,6 @@ package org.saturnclient.modules; -import org.saturnclient.feature.interfaces.NametagsInterface.EntityType; +import org.saturnclient.common.module.EntityModule.EntityType; public interface HealthRenderState { float saturn$getHealth(); diff --git a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/BackgroundRendererMixin.java b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/BackgroundRendererMixin.java index 4952100..1caea0c 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/BackgroundRendererMixin.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/BackgroundRendererMixin.java @@ -3,7 +3,7 @@ package org.saturnclient.modules.mixins; import net.minecraft.client.render.BackgroundRenderer; import net.minecraft.entity.Entity; -import org.saturnclient.feature.features.NoFog; +import org.saturnclient.feature.features.NoFogFeature; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; @@ -11,22 +11,19 @@ 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; // this could be customised + if (NoFogFeature.isActive()) { + return Float.MAX_VALUE; } return viewDistance; } - // liquids - @Redirect( - method = "applyFog", - at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;isSpectator()Z") - ) + + @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 + if (NoFogFeature.isActive() && NoFogFeature.liquids()) { + return true; // pretend to be spectator to bypass liquid fog } return entity.isSpectator(); } diff --git a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/CameraMixin.java b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/CameraMixin.java index caa09e3..f2309f1 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/CameraMixin.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/CameraMixin.java @@ -6,7 +6,7 @@ import net.minecraft.client.render.Camera; import net.minecraft.entity.Entity; import net.minecraft.world.BlockView; -import org.saturnclient.feature.features.Freelook; +import org.saturnclient.feature.features.FreelookFeature; import org.saturnclient.modules.CameraOverriddenEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -17,28 +17,32 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Camera.class) public abstract class CameraMixin { + @Unique - boolean firstTime = true; + private boolean firstTime = true; @Shadow protected abstract void setRotation(float yaw, float pitch); @Inject(method = "update", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/Camera;setRotation(FF)V", ordinal = 1, shift = At.Shift.AFTER)) - public void lockRotation(BlockView focusedBlock, Entity cameraEntity, boolean isThirdPerson, boolean isFrontFacing, float tickDelta, CallbackInfo ci) { - if (Freelook.isFreeLooking && cameraEntity instanceof ClientPlayerEntity) { - CameraOverriddenEntity cameraOverriddenEntity = (CameraOverriddenEntity) cameraEntity; + public void lockRotation(BlockView focusedBlock, Entity cameraEntity, + boolean isThirdPerson, boolean isFrontFacing, + float tickDelta, CallbackInfo ci) { + + if (FreelookFeature.isFreeLooking && cameraEntity instanceof ClientPlayerEntity) { + CameraOverriddenEntity overridden = (CameraOverriddenEntity) cameraEntity; if (firstTime && MinecraftClient.getInstance().player != null) { - cameraOverriddenEntity.freelook$setCameraPitch(MinecraftClient.getInstance().player.getPitch()); - cameraOverriddenEntity.freelook$setCameraYaw(MinecraftClient.getInstance().player.getYaw()); + overridden.freelook$setCameraPitch(MinecraftClient.getInstance().player.getPitch()); + overridden.freelook$setCameraYaw(MinecraftClient.getInstance().player.getYaw()); firstTime = false; } - this.setRotation(cameraOverriddenEntity.freelook$getCameraYaw(), cameraOverriddenEntity.freelook$getCameraPitch()); + this.setRotation(overridden.freelook$getCameraYaw(), overridden.freelook$getCameraPitch()); } - if (!Freelook.isFreeLooking && cameraEntity instanceof ClientPlayerEntity) { + + if (!FreelookFeature.isFreeLooking && cameraEntity instanceof ClientPlayerEntity) { firstTime = true; } } - -} \ No newline at end of file +} diff --git a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/EntityMixin.java b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/EntityMixin.java index ca7a7fc..934ce78 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/EntityMixin.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/EntityMixin.java @@ -1,11 +1,10 @@ package org.saturnclient.modules.mixins; - import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.entity.Entity; import net.minecraft.util.math.MathHelper; -import org.saturnclient.feature.features.Freelook; +import org.saturnclient.feature.features.FreelookFeature; import org.saturnclient.modules.CameraOverriddenEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -15,48 +14,45 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Entity.class) public class EntityMixin implements CameraOverriddenEntity { - @Unique - private float cameraPitch; - @Unique - private float cameraYaw; - - @Inject(method = "changeLookDirection", at = @At("HEAD"), cancellable = true) - public void changeCameraLookDirection(double xDelta, double yDelta, CallbackInfo ci) { - //noinspection ConstantValue// IntelliJ is incorrect here, this code block is reachable - if (Freelook.isFreeLooking && (Object) this instanceof ClientPlayerEntity) { - double pitchDelta = (yDelta * 0.15); - double yawDelta = (xDelta * 0.15); - - this.cameraPitch = MathHelper.clamp(this.cameraPitch + (float) pitchDelta, -90.0f, 90.0f); - this.cameraYaw += (float) yawDelta; + @Unique + private float cameraPitch; + @Unique + private float cameraYaw; + @Inject(method = "changeLookDirection", at = @At("HEAD"), cancellable = true) + public void changeCameraLookDirection(double xDelta, double yDelta, CallbackInfo ci) { + // noinspection ConstantValue — reachable at runtime despite IDE warning + if (FreelookFeature.isFreeLooking && (Object) this instanceof ClientPlayerEntity) { + this.cameraPitch = MathHelper.clamp( + this.cameraPitch + (float) (yDelta * 0.15), + -90.0f, 90.0f); + this.cameraYaw += (float) (xDelta * 0.15); ci.cancel(); - } } - @Override - @Unique - public float freelook$getCameraPitch() { - return this.cameraPitch; - } + @Override + @Unique + public float freelook$getCameraPitch() { + return cameraPitch; + } - @Override - @Unique - public float freelook$getCameraYaw() { - return this.cameraYaw; - } + @Override + @Unique + public float freelook$getCameraYaw() { + return cameraYaw; + } - @Override - @Unique - public void freelook$setCameraPitch(float pitch) { - this.cameraPitch = pitch; - } + @Override + @Unique + public void freelook$setCameraPitch(float p) { + cameraPitch = p; + } - @Override - @Unique - public void freelook$setCameraYaw(float yaw) { - this.cameraYaw = yaw; - } -} \ No newline at end of file + @Override + @Unique + public void freelook$setCameraYaw(float y) { + cameraYaw = y; + } +} diff --git a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/GameRendererMixin.java b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/GameRendererMixin.java index d1040d5..b8de0ea 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/GameRendererMixin.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/GameRendererMixin.java @@ -1,22 +1,20 @@ package org.saturnclient.modules.mixins; -import org.saturnclient.feature.features.Zoom; +import net.minecraft.client.render.GameRenderer; + +import org.saturnclient.feature.features.ZoomFeature; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import net.minecraft.client.render.GameRenderer; - @Mixin(GameRenderer.class) public class GameRendererMixin { - + @Inject(method = "getFov", at = @At("RETURN"), cancellable = true) private void onGetFov(CallbackInfoReturnable cir) { - if (Zoom.isZooming && Zoom.shouldZoom()) { - float originalFov = cir.getReturnValue(); - float zoomedFov = originalFov / Zoom.getZoomLevel(); - cir.setReturnValue(zoomedFov); + if (ZoomFeature.shouldZoom()) { + cir.setReturnValue(cir.getReturnValue() / ZoomFeature.getZoomLevel()); } } } diff --git a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/LightmapTextureManagerMixin.java b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/LightmapTextureManagerMixin.java index 16d8c7f..cd65016 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/LightmapTextureManagerMixin.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/LightmapTextureManagerMixin.java @@ -4,20 +4,17 @@ package org.saturnclient.modules.mixins; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import net.minecraft.client.render.LightmapTextureManager; -import org.saturnclient.feature.features.Fullbright; +import org.saturnclient.feature.features.FullbrightFeature; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @Mixin(LightmapTextureManager.class) public class LightmapTextureManagerMixin { - - @ModifyExpressionValue( - method = "update", - at = @At(value = "INVOKE", target = "Ljava/lang/Math;max(FF)F", ordinal = 0) - ) + + @ModifyExpressionValue(method = "update", at = @At(value = "INVOKE", target = "Ljava/lang/Math;max(FF)F", ordinal = 0)) private float modifyGamma(float original) { - if (Fullbright.shouldOverrideBrightness()) { - return Fullbright.getBrightnessValue(); + if (FullbrightFeature.shouldOverrideBrightness()) { + return FullbrightFeature.getBrightnessValue(); } return original; } diff --git a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/LivingEntityRenderStateMixin.java b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/LivingEntityRenderStateMixin.java index 1c22369..db799b0 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/LivingEntityRenderStateMixin.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/LivingEntityRenderStateMixin.java @@ -2,25 +2,33 @@ package org.saturnclient.modules.mixins; import net.minecraft.client.render.entity.state.LivingEntityRenderState; -import org.saturnclient.feature.interfaces.NametagsInterface.EntityType; +import org.saturnclient.common.module.EntityModule; +import org.saturnclient.modules.HealthRenderState; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; +/** + * Adds health / entity-type fields to {@link LivingEntityRenderState} so + * that {@link NametagsMixin} can read them without touching the live entity. + * + * The fields are populated each frame by {@link LivingEntityRendererMixin}. + */ @Mixin(LivingEntityRenderState.class) -public class LivingEntityRenderStateMixin implements org.saturnclient.modules.HealthRenderState { +public class LivingEntityRenderStateMixin implements HealthRenderState { - @Unique private float saturn$health = 0f; + @Unique private float saturn$health = 0f; @Unique private float saturn$maxHealth = 1f; - @Unique private EntityType saturn$entityType = EntityType.OTHER; + @Unique private EntityModule.EntityType saturn$entityType = EntityModule.EntityType.OTHER; - public float saturn$getHealth() { return saturn$health; } - public float saturn$getMaxHealth() { return saturn$maxHealth; } + @Override public float saturn$getHealth() { return saturn$health; } + @Override public float saturn$getMaxHealth() { return saturn$maxHealth; } + + @Override public void saturn$setHealth(float health, float maxHealth) { - this.saturn$health = health; + this.saturn$health = health; this.saturn$maxHealth = maxHealth; } - public EntityType saturn$getEntityType() { return saturn$entityType; } - public void saturn$setEntityType(EntityType type) { this.saturn$entityType = type; } - -} \ No newline at end of file + @Override public EntityModule.EntityType saturn$getEntityType() { return saturn$entityType; } + @Override public void saturn$setEntityType(EntityModule.EntityType type) { saturn$entityType = type; } +} diff --git a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/LivingEntityRendererMixin.java b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/LivingEntityRendererMixin.java index 2261e31..c86c43f 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/LivingEntityRendererMixin.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/LivingEntityRendererMixin.java @@ -2,19 +2,22 @@ package org.saturnclient.modules.mixins; import net.minecraft.client.render.entity.LivingEntityRenderer; import net.minecraft.client.render.entity.state.LivingEntityRenderState; - -import org.saturnclient.feature.interfaces.NametagsInterface.EntityType; -import org.saturnclient.modules.HealthRenderState; - import net.minecraft.entity.LivingEntity; import net.minecraft.entity.mob.HostileEntity; import net.minecraft.entity.passive.PassiveEntity; import net.minecraft.entity.player.PlayerEntity; + +import org.saturnclient.common.module.EntityModule; +import org.saturnclient.modules.HealthRenderState; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Captures health and entity-type into the render state each frame so + * that the nametag replacement logic never needs to touch the live entity. + */ @Mixin(LivingEntityRenderer.class) public abstract class LivingEntityRendererMixin { @@ -25,14 +28,16 @@ public abstract class LivingEntityRendererMixin saturn$rendering = ThreadLocal.withInitial(() -> false); @Shadow protected abstract void renderLabelIfPresent( - S state, Text text, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light - ); + S state, Text text, MatrixStack matrices, + VertexConsumerProvider vertexConsumers, int light); @Inject(method = "renderLabelIfPresent", at = @At("HEAD"), cancellable = true) - private void saturn$replaceNametag(S state, Text text, + private void saturn$replaceNametag( + S state, Text text, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, CallbackInfo ci) { - if (saturn$rendering.get()) return; - if (!Nametags.shouldReplaceName()) return; - if (!(state instanceof LivingEntityRenderState living)) return; + if (saturn$rendering.get()) + return; + if (!NametagsFeature.shouldReplaceName()) + return; + if (!(state instanceof LivingEntityRenderState liv)) + return; - String replacement = Nametags.getNametagString(new NametagsFabric.EntityStateImpl(living)); - if (replacement == null) return; + String replacement = NametagsFeature.getNametagString( + new RenderStateEntityState(liv)); + if (replacement == null) + return; ci.cancel(); saturn$rendering.set(true); try { - renderLabelIfPresent(state, Text.literal(replacement), matrices, vertexConsumers, light); + renderLabelIfPresent(state, Text.literal(replacement), + matrices, vertexConsumers, light); } finally { saturn$rendering.set(false); } } + + // ------------------------------------------------------------------ + // Inner adapter — bridges LivingEntityRenderState → EntityModule.EntityState + // Kept here so the mixin package is self-contained; no separate Fabric + // impl class is needed for this thin adapter. + // ------------------------------------------------------------------ + + @Unique + private static final class RenderStateEntityState implements EntityModule.EntityState { + + private final LivingEntityRenderState state; + private final HealthRenderState hrs; + + RenderStateEntityState(LivingEntityRenderState state) { + this.state = state; + // LivingEntityRenderStateMixin implements HealthRenderState + this.hrs = (state instanceof HealthRenderState h) ? h : null; + } + + @Override + public String getCustomName() { + // The vanilla render state stores the display name as a Text; + // we expose it as a plain string for feature logic. + return state.customName != null ? state.customName.getString() : null; + } + + @Override + public float getHealth() { + return hrs != null ? hrs.saturn$getHealth() : 0f; + } + + @Override + public float getMaxHealth() { + return hrs != null ? hrs.saturn$getMaxHealth() : 1f; + } + + @Override + public EntityModule.EntityType getEntityType() { + return hrs != null ? hrs.saturn$getEntityType() : EntityModule.EntityType.OTHER; + } + } } diff --git a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/RenderMixin.java b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/RenderMixin.java index 25ef20e..b98c6ce 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/RenderMixin.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/RenderMixin.java @@ -1,8 +1,8 @@ package org.saturnclient.modules.mixins; -import org.saturnclient.feature.HudFeature; import org.saturnclient.feature.FeatureLayout; import org.saturnclient.feature.FeatureManager; +import org.saturnclient.feature.HudFeature; import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.saturnclient.mixin.DrawContextAccessor; import org.saturnclient.ui.RenderScope; diff --git a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/TpsMixin.java b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/TpsMixin.java index 0c56d80..8bcd93a 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/TpsMixin.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/modules/mixins/TpsMixin.java @@ -3,7 +3,7 @@ package org.saturnclient.modules.mixins; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.network.packet.s2c.play.WorldTimeUpdateS2CPacket; -import org.saturnclient.feature.features.Tps; +import org.saturnclient.feature.features.TpsFeature; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -14,6 +14,6 @@ public class TpsMixin { @Inject(method = "onWorldTimeUpdate", at = @At("HEAD")) private void onWorldTimeUpdate(WorldTimeUpdateS2CPacket packet, CallbackInfo ci) { - Tps.onTimePacket(packet.time()); + TpsFeature.onTimePacket(packet.time()); } } diff --git a/versions/1.21.4/src/main/java/org/saturnclient/saturnclient/SaturnClient.java b/versions/1.21.4/src/main/java/org/saturnclient/saturnclient/SaturnClient.java index ebb7bde..62be61d 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/saturnclient/SaturnClient.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/saturnclient/SaturnClient.java @@ -11,7 +11,6 @@ import org.saturnclient.cosmetics.Hats; import org.saturnclient.feature.FeatureManager; import org.saturnclient.cosmetics.Cloaks; import org.saturnclient.common.provider.Providers; -import org.saturnclient.impl.provider.FabricModuleProvider; import org.saturnclient.impl.provider.GLFWProviderImpl; import org.saturnclient.impl.provider.RefConstructorImpl; import org.saturnclient.impl.provider.SaturnProviderImpl; @@ -44,7 +43,7 @@ public class SaturnClient implements ModInitializer { SkinPreview.DRAWER = new EntityDrawerImpl(); Config.init(); - FeatureManager.init(new FabricModuleProvider()); + FeatureManager.init(); client.execute(() -> { SaturnScreenFabric.preload(client);