From 9ab82deae201c9771b22ec1e95a98699085ee0ff Mon Sep 17 00:00:00 2001 From: ZZZank <47418975+ZZZank@users.noreply.github.com> Date: Sun, 5 May 2024 02:58:26 +0000 Subject: [PATCH 1/4] directly hooks into forge config instead of using own config and, MixinInGameHud is mixining into vanilla code instead of forge variant, it will now also be redirected to Forge config --- .../mods/sodium/client/gui/SodiumGameOptionPages.java | 6 ++++-- .../mods/sodium/client/gui/SodiumGameOptions.java | 2 +- .../mods/sodium/mixin/features/options/MixinInGameHud.java | 6 ++++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptionPages.java b/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptionPages.java index 4292be24a..7559e6df2 100644 --- a/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptionPages.java +++ b/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptionPages.java @@ -15,6 +15,8 @@ import net.minecraft.client.Minecraft; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.client.GuiIngameForge; + import org.lwjgl.opengl.Display; import java.util.ArrayList; @@ -199,12 +201,12 @@ public static OptionPage quality() { .setName(new TextComponentTranslation("sodium.options.vignette.name")) .setTooltip(new TextComponentTranslation("sodium.options.vignette.tooltip")) .setControl(TickBoxControl::new) - .setBinding((opts, value) -> opts.quality.enableVignette = value, opts -> opts.quality.enableVignette) + .setBinding((opts, value) -> GuiIngameForge.renderVignette = value, opts -> GuiIngameForge.renderVignette) .setImpact(OptionImpact.LOW) .build()) .build()); - + groups.add(OptionGroup.createBuilder() .add(OptionImpl.createBuilder(int.class, vanillaOpts) .setName(new TextComponentTranslation("options.mipmapLevels")) diff --git a/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptions.java b/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptions.java index 390404f55..82061ece5 100644 --- a/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptions.java +++ b/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptions.java @@ -53,7 +53,7 @@ public static class QualitySettings { public int biomeBlendRadius = 2; public float entityDistanceScaling = 1.0F; - public boolean enableVignette = true; + // public boolean enableVignette = true; //replaced by `GuiIngameForge.renderVignette` public boolean enableClouds = true; public LightingQuality smoothLighting = LightingQuality.HIGH; diff --git a/src/main/java/me/jellysquid/mods/sodium/mixin/features/options/MixinInGameHud.java b/src/main/java/me/jellysquid/mods/sodium/mixin/features/options/MixinInGameHud.java index e736457c3..9fa64f421 100644 --- a/src/main/java/me/jellysquid/mods/sodium/mixin/features/options/MixinInGameHud.java +++ b/src/main/java/me/jellysquid/mods/sodium/mixin/features/options/MixinInGameHud.java @@ -1,7 +1,8 @@ package me.jellysquid.mods.sodium.mixin.features.options; -import me.jellysquid.mods.sodium.client.SodiumClientMod; import net.minecraft.client.gui.GuiIngame; +import net.minecraftforge.client.GuiIngameForge; + import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -10,6 +11,7 @@ public class MixinInGameHud { @Redirect(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;isFancyGraphicsEnabled()Z")) private boolean redirectFancyGraphicsVignette() { - return SodiumClientMod.options().quality.enableVignette; + // return SodiumClientMod.options().quality.enableVignette; + return GuiIngameForge.renderVignette; } } From 8ca795e52ccb5f1ab0e2bb9e97f54afb05e703ca Mon Sep 17 00:00:00 2001 From: ZZZank <47418975+ZZZank@users.noreply.github.com> Date: Sun, 5 May 2024 03:17:38 +0000 Subject: [PATCH 2/4] some more note --- .../mods/sodium/client/gui/SodiumGameOptionPages.java | 2 +- .../mods/sodium/mixin/features/options/MixinInGameHud.java | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptionPages.java b/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptionPages.java index 7559e6df2..f4d5f49de 100644 --- a/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptionPages.java +++ b/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptionPages.java @@ -206,7 +206,7 @@ public static OptionPage quality() { .build()) .build()); - + groups.add(OptionGroup.createBuilder() .add(OptionImpl.createBuilder(int.class, vanillaOpts) .setName(new TextComponentTranslation("options.mipmapLevels")) diff --git a/src/main/java/me/jellysquid/mods/sodium/mixin/features/options/MixinInGameHud.java b/src/main/java/me/jellysquid/mods/sodium/mixin/features/options/MixinInGameHud.java index 9fa64f421..cc65be05d 100644 --- a/src/main/java/me/jellysquid/mods/sodium/mixin/features/options/MixinInGameHud.java +++ b/src/main/java/me/jellysquid/mods/sodium/mixin/features/options/MixinInGameHud.java @@ -7,11 +7,15 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * note that both {@link net.minecraft.client.gui.GuiIngame} and {@link net.minecraftforge.client.GuiIngameForge} + * implements client GUI rendering, and mixins here can be totally useless since GuiIngame might be intentionally + * ignored and barely invoked + */ @Mixin(GuiIngame.class) public class MixinInGameHud { @Redirect(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;isFancyGraphicsEnabled()Z")) private boolean redirectFancyGraphicsVignette() { - // return SodiumClientMod.options().quality.enableVignette; return GuiIngameForge.renderVignette; } } From 4de7c299bb3253b5286f34c65d3b1fdb161a2d47 Mon Sep 17 00:00:00 2001 From: ZZZank <3410764033@qq.com> Date: Mon, 20 May 2024 11:42:40 +0800 Subject: [PATCH 3/4] use sodium option + mixin --- .../mods/sodium/client/gui/SodiumGameOptionPages.java | 2 +- .../mods/sodium/client/gui/SodiumGameOptions.java | 2 +- .../sodium/mixin/features/options/MixinInGameHud.java | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptionPages.java b/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptionPages.java index f4d5f49de..20509ea74 100644 --- a/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptionPages.java +++ b/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptionPages.java @@ -201,7 +201,7 @@ public static OptionPage quality() { .setName(new TextComponentTranslation("sodium.options.vignette.name")) .setTooltip(new TextComponentTranslation("sodium.options.vignette.tooltip")) .setControl(TickBoxControl::new) - .setBinding((opts, value) -> GuiIngameForge.renderVignette = value, opts -> GuiIngameForge.renderVignette) + .setBinding((opts, value) -> opts.quality.enableVignette = value, opts -> opts.quality.enableVignette) .setImpact(OptionImpact.LOW) .build()) .build()); diff --git a/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptions.java b/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptions.java index 82061ece5..390404f55 100644 --- a/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptions.java +++ b/src/main/java/me/jellysquid/mods/sodium/client/gui/SodiumGameOptions.java @@ -53,7 +53,7 @@ public static class QualitySettings { public int biomeBlendRadius = 2; public float entityDistanceScaling = 1.0F; - // public boolean enableVignette = true; //replaced by `GuiIngameForge.renderVignette` + public boolean enableVignette = true; public boolean enableClouds = true; public LightingQuality smoothLighting = LightingQuality.HIGH; diff --git a/src/main/java/me/jellysquid/mods/sodium/mixin/features/options/MixinInGameHud.java b/src/main/java/me/jellysquid/mods/sodium/mixin/features/options/MixinInGameHud.java index cc65be05d..f5f531403 100644 --- a/src/main/java/me/jellysquid/mods/sodium/mixin/features/options/MixinInGameHud.java +++ b/src/main/java/me/jellysquid/mods/sodium/mixin/features/options/MixinInGameHud.java @@ -1,6 +1,6 @@ package me.jellysquid.mods.sodium.mixin.features.options; -import net.minecraft.client.gui.GuiIngame; +import me.jellysquid.mods.sodium.client.SodiumClientMod; import net.minecraftforge.client.GuiIngameForge; import org.spongepowered.asm.mixin.Mixin; @@ -9,13 +9,13 @@ /** * note that both {@link net.minecraft.client.gui.GuiIngame} and {@link net.minecraftforge.client.GuiIngameForge} - * implements client GUI rendering, and mixins here can be totally useless since GuiIngame might be intentionally + * implements client GUI rendering, and mixins for GuiIngame can be totally useless since GuiIngame might be intentionally * ignored and barely invoked */ -@Mixin(GuiIngame.class) +@Mixin(GuiIngameForge.class) public class MixinInGameHud { @Redirect(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;isFancyGraphicsEnabled()Z")) - private boolean redirectFancyGraphicsVignette() { - return GuiIngameForge.renderVignette; + private boolean vintagium$redirectVignette() { + return SodiumClientMod.options().quality.enableVignette; } } From fb6a4d318b69764adb6b95b0b2f35dee1c5c62cf Mon Sep 17 00:00:00 2001 From: ZZZank <3410764033@qq.com> Date: Mon, 20 May 2024 11:58:13 +0800 Subject: [PATCH 4/4] more dev note --- .../mods/sodium/mixin/features/options/MixinInGameHud.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/jellysquid/mods/sodium/mixin/features/options/MixinInGameHud.java b/src/main/java/me/jellysquid/mods/sodium/mixin/features/options/MixinInGameHud.java index f5f531403..a9772eeda 100644 --- a/src/main/java/me/jellysquid/mods/sodium/mixin/features/options/MixinInGameHud.java +++ b/src/main/java/me/jellysquid/mods/sodium/mixin/features/options/MixinInGameHud.java @@ -9,13 +9,16 @@ /** * note that both {@link net.minecraft.client.gui.GuiIngame} and {@link net.minecraftforge.client.GuiIngameForge} - * implements client GUI rendering, and mixins for GuiIngame can be totally useless since GuiIngame might be intentionally - * ignored and barely invoked + * implements client GUI rendering, and mixins for GuiIngame can be totally useless since GuiIngame might be + * intentionally ignored and barely invoked */ @Mixin(GuiIngameForge.class) public class MixinInGameHud { @Redirect(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;isFancyGraphicsEnabled()Z")) private boolean vintagium$redirectVignette() { + //mixin target is `if (renderVignette && Minecraft.isFancyGraphicsEnabled())` + //we assume that `renderVignette` is always true, because vanilla/forge will not change its value, and mods that + //will change it explicitly must have a reason. return SodiumClientMod.options().quality.enableVignette; } }