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 new file mode 100644 index 00000000..347d0f7e --- /dev/null +++ b/common/src/main/java/net/xolt/freecam/mixins/LevelRendererMixin.java @@ -0,0 +1,42 @@ +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; +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() && ModConfig.INSTANCE.visual.outlinePlayer && 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/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.", 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": "Вимкнути при отриманні шкоди", 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",