From cdc88dc0dae2eee83b07b9e1b0441eba4c6d0441 Mon Sep 17 00:00:00 2001 From: NicBelanger23 <130239380+NicBelanger23@users.noreply.github.com> Date: Wed, 24 Dec 2025 15:35:02 -0500 Subject: [PATCH 1/5] add glowing --- .../freecam/mixins/LevelRendererMixin.java | 39 +++++++++++++++++++ .../main/resources/freecam-common.mixins.json | 1 + gradle.properties | 2 + 3 files changed, 42 insertions(+) create mode 100644 common/src/main/java/net/xolt/freecam/mixins/LevelRendererMixin.java diff --git a/common/src/main/java/net/xolt/freecam/mixins/LevelRendererMixin.java b/common/src/main/java/net/xolt/freecam/mixins/LevelRendererMixin.java new file mode 100644 index 00000000..af0fb9f8 --- /dev/null +++ b/common/src/main/java/net/xolt/freecam/mixins/LevelRendererMixin.java @@ -0,0 +1,39 @@ +package net.xolt.freecam.mixins; + +import net.minecraft.client.Camera; +import net.minecraft.client.DeltaTracker; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.culling.Frustum; +import net.minecraft.client.renderer.entity.EntityRenderDispatcher; +import net.minecraft.client.renderer.entity.state.EntityRenderState; +import net.minecraft.client.renderer.state.LevelRenderState; +import net.minecraft.util.ARGB; +import net.xolt.freecam.Freecam; +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.xolt.freecam.Freecam.MC; + +@Mixin(LevelRenderer.class) +public class LevelRendererMixin { + + @Shadow @Final private EntityRenderDispatcher entityRenderDispatcher; + + // Add the local player to the visible entities when freecam is enabled so they get the outline + @Inject(method = "extractVisibleEntities", at = @At("TAIL")) + private void onExtractVisibleEntities(Camera camera, Frustum frustum, DeltaTracker deltaTracker, LevelRenderState levelRenderState, CallbackInfo ci) { + if (Freecam.isEnabled() && MC.player != null) { + float partialTick = deltaTracker.getGameTimeDeltaPartialTick(false); + EntityRenderState state = entityRenderDispatcher.extractEntity(MC.player, partialTick); + if (state != null) { + state.outlineColor = ARGB.opaque(MC.player.getTeamColor()); + levelRenderState.entityRenderStates.add(state); + levelRenderState.haveGlowingEntities = true; + } + } + } +} diff --git a/common/src/main/resources/freecam-common.mixins.json b/common/src/main/resources/freecam-common.mixins.json index e7dbc76d..b31545ba 100644 --- a/common/src/main/resources/freecam-common.mixins.json +++ b/common/src/main/resources/freecam-common.mixins.json @@ -16,6 +16,7 @@ "IrisHandRendererMixin", "IrisShadowRendererMixin", "ItemInHandRendererMixin", + "LevelRendererMixin", "LightTextureMixin", "LivingEntityMixin", "LocalPlayerMixin", diff --git a/gradle.properties b/gradle.properties index d855af8a..9b103496 100644 --- a/gradle.properties +++ b/gradle.properties @@ -48,3 +48,5 @@ neoforge_supported_mc_versions= # https://mvnrepository.com/artifact/me.shedaniel.cloth/cloth-config?repo=architectury modmenu_version=17.0.0-alpha.1 cloth_version=21.11.151 + +org.gradle.java.home=/usr/lib/jvm/jdk-21.0.9-oracle-x64 \ No newline at end of file From f5160bc11043092fdecb912da250097496a10fc8 Mon Sep 17 00:00:00 2001 From: NicBelanger23 <130239380+NicBelanger23@users.noreply.github.com> Date: Wed, 24 Dec 2025 15:58:37 -0500 Subject: [PATCH 2/5] added config --- common/src/main/java/net/xolt/freecam/config/ModConfig.java | 3 +++ .../java/net/xolt/freecam/mixins/LevelRendererMixin.java | 5 ++++- common/src/main/resources/assets/freecam/lang/en_us.json | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/net/xolt/freecam/config/ModConfig.java b/common/src/main/java/net/xolt/freecam/config/ModConfig.java index e019322e..289e382b 100644 --- a/common/src/main/java/net/xolt/freecam/config/ModConfig.java +++ b/common/src/main/java/net/xolt/freecam/config/ModConfig.java @@ -111,6 +111,9 @@ public static class VisualConfig { @ConfigEntry.Gui.Tooltip public boolean showSubmersion = false; + + @ConfigEntry.Gui.Tooltip + public boolean outlinePlayer = false; } @ConfigEntry.Gui.Tooltip diff --git a/common/src/main/java/net/xolt/freecam/mixins/LevelRendererMixin.java b/common/src/main/java/net/xolt/freecam/mixins/LevelRendererMixin.java index af0fb9f8..d425d3c8 100644 --- a/common/src/main/java/net/xolt/freecam/mixins/LevelRendererMixin.java +++ b/common/src/main/java/net/xolt/freecam/mixins/LevelRendererMixin.java @@ -1,6 +1,7 @@ package net.xolt.freecam.mixins; import net.minecraft.client.Camera; +import net.xolt.freecam.config.ModConfig; import net.minecraft.client.DeltaTracker; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.culling.Frustum; @@ -27,9 +28,11 @@ public class LevelRendererMixin { @Inject(method = "extractVisibleEntities", at = @At("TAIL")) private void onExtractVisibleEntities(Camera camera, Frustum frustum, DeltaTracker deltaTracker, LevelRenderState levelRenderState, CallbackInfo ci) { if (Freecam.isEnabled() && MC.player != null) { + float partialTick = deltaTracker.getGameTimeDeltaPartialTick(false); EntityRenderState state = entityRenderDispatcher.extractEntity(MC.player, partialTick); - if (state != null) { + + if (state != null && ModConfig.INSTANCE.visual.outlinePlayer) { state.outlineColor = ARGB.opaque(MC.player.getTeamColor()); levelRenderState.entityRenderStates.add(state); levelRenderState.haveGlowingEntities = true; diff --git a/common/src/main/resources/assets/freecam/lang/en_us.json b/common/src/main/resources/assets/freecam/lang/en_us.json index ebb8b417..59b92a4b 100644 --- a/common/src/main/resources/assets/freecam/lang/en_us.json +++ b/common/src/main/resources/assets/freecam/lang/en_us.json @@ -60,6 +60,8 @@ "text.autoconfig.freecam.option.visual.fullBright": "Full Brightness", "text.autoconfig.freecam.option.visual.fullBright.@Tooltip": "Increases brightness while in freecam.", "text.autoconfig.freecam.option.visual.showSubmersion": "Show Submersion Fog", + "text.autoconfig.freecam.option.visual.outlinePlayer.@Tooltip": "Outlines the playermodel through walls.", + "text.autoconfig.freecam.option.visual.outlinePlayer": "Player Outline", "text.autoconfig.freecam.option.visual.showSubmersion.@Tooltip": "Whether you see a fog overlay underwater, in lava, or powdered snow.", "text.autoconfig.freecam.option.utility": "Utility Options", "text.autoconfig.freecam.option.utility.@Tooltip": "Freecam enhancements.", From add32f9f2fac3476a24dedac9f89aa029b7414de Mon Sep 17 00:00:00 2001 From: NicBelanger23 <130239380+NicBelanger23@users.noreply.github.com> Date: Wed, 24 Dec 2025 16:03:20 -0500 Subject: [PATCH 3/5] added ua translation --- common/src/main/resources/assets/freecam/lang/uk_ua.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/src/main/resources/assets/freecam/lang/uk_ua.json b/common/src/main/resources/assets/freecam/lang/uk_ua.json index b16906d3..64f5a6bd 100644 --- a/common/src/main/resources/assets/freecam/lang/uk_ua.json +++ b/common/src/main/resources/assets/freecam/lang/uk_ua.json @@ -60,6 +60,8 @@ "text.autoconfig.freecam.option.visual.fullBright.@Tooltip": "Збільшує яскравість в режимі вільної камери.", "text.autoconfig.freecam.option.visual.showSubmersion": "Показати занурювальний туман", "text.autoconfig.freecam.option.visual.showSubmersion.@Tooltip": "Чи будете ви бачити туман під водою, у лаві або в сипкому снігу.", + "text.autoconfig.freecam.option.visual.outlinePlayer.@Tooltip": "Окреслює модель гравця крізь стіни.", + "text.autoconfig.freecam.option.visual.outlinePlayer": "Окреслення Гравця", "text.autoconfig.freecam.option.utility": "Параметри корисности", "text.autoconfig.freecam.option.utility.@Tooltip": "Покращення Freecam.", "text.autoconfig.freecam.option.utility.disableOnDamage": "Вимкнути при отриманні шкоди", From a0ef34135ed9bd31c7e81f5141f9d049797e49b8 Mon Sep 17 00:00:00 2001 From: NicBelanger23 <130239380+NicBelanger23@users.noreply.github.com> Date: Wed, 24 Dec 2025 16:11:43 -0500 Subject: [PATCH 4/5] config: remove java 21 home dir unintentionally added --- gradle.properties | 2 -- 1 file changed, 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 9b103496..d855af8a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -48,5 +48,3 @@ neoforge_supported_mc_versions= # https://mvnrepository.com/artifact/me.shedaniel.cloth/cloth-config?repo=architectury modmenu_version=17.0.0-alpha.1 cloth_version=21.11.151 - -org.gradle.java.home=/usr/lib/jvm/jdk-21.0.9-oracle-x64 \ No newline at end of file From deee67b49a0d822d50e14712fd95ab1c50b3fb53 Mon Sep 17 00:00:00 2001 From: NicBelanger23 <130239380+NicBelanger23@users.noreply.github.com> Date: Wed, 24 Dec 2025 16:22:11 -0500 Subject: [PATCH 5/5] refactor if statements --- .../main/java/net/xolt/freecam/mixins/LevelRendererMixin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/net/xolt/freecam/mixins/LevelRendererMixin.java b/common/src/main/java/net/xolt/freecam/mixins/LevelRendererMixin.java index d425d3c8..347d0f7e 100644 --- a/common/src/main/java/net/xolt/freecam/mixins/LevelRendererMixin.java +++ b/common/src/main/java/net/xolt/freecam/mixins/LevelRendererMixin.java @@ -27,12 +27,12 @@ public class LevelRendererMixin { // Add the local player to the visible entities when freecam is enabled so they get the outline @Inject(method = "extractVisibleEntities", at = @At("TAIL")) private void onExtractVisibleEntities(Camera camera, Frustum frustum, DeltaTracker deltaTracker, LevelRenderState levelRenderState, CallbackInfo ci) { - if (Freecam.isEnabled() && MC.player != null) { + if (Freecam.isEnabled() && ModConfig.INSTANCE.visual.outlinePlayer && MC.player != null) { float partialTick = deltaTracker.getGameTimeDeltaPartialTick(false); EntityRenderState state = entityRenderDispatcher.extractEntity(MC.player, partialTick); - if (state != null && ModConfig.INSTANCE.visual.outlinePlayer) { + if (state != null) { state.outlineColor = ARGB.opaque(MC.player.getTeamColor()); levelRenderState.entityRenderStates.add(state); levelRenderState.haveGlowingEntities = true;