From 5e4f4abd3b7ce2b195b6c9ce54096e963fe30a2f Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Wed, 14 May 2025 10:14:01 +0200 Subject: [PATCH] feat: use MidnightLib's new widget API for radius slider --- .../midnightdust/blur/config/BlurConfig.java | 66 +++++++++++++++---- .../mixin/MixinMidnightConfig$EntryInfo.java | 26 -------- .../blur/mixin/MixinMidnightConfig.java | 17 ----- .../resources/assets/blur/lang/de_de.json | 10 +-- .../resources/assets/blur/lang/en_us.json | 10 +-- common/src/main/resources/blur.mixins.json | 2 - fabric/src/main/resources/fabric.mod.json | 7 +- gradle.properties | 4 +- .../resources/META-INF/neoforge.mods.toml | 7 ++ 9 files changed, 79 insertions(+), 70 deletions(-) delete mode 100644 common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfig$EntryInfo.java delete mode 100644 common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfig.java diff --git a/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java b/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java index fc09156..cff6814 100644 --- a/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java +++ b/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java @@ -1,10 +1,18 @@ package eu.midnightdust.blur.config; import com.google.common.collect.Lists; +import eu.midnightdust.blur.Blur; import eu.midnightdust.lib.config.MidnightConfig; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.widget.SliderWidget; +import net.minecraft.client.gui.widget.TextIconButtonWidget; +import net.minecraft.client.option.GameOptions; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import java.lang.annotation.Annotation; import java.util.List; +import java.util.Objects; import java.util.function.Function; import static java.lang.Math.*; @@ -33,10 +41,6 @@ public class BlurConfig extends MidnightConfig { @Entry(category = SCREENS) // Screens where the vanilla blur effect should be force disabled public static List forceDisabledScreens = Lists.newArrayList(); - @Comment(category = STYLE, centered = true) - public static Comment _blur; - @Entry(category = STYLE, isSlider = true, min = 0, max = 20) - public static int radius = 5; @Comment(category = STYLE, centered = true) public static Comment _gradient; @Entry(category = STYLE) @@ -68,13 +72,6 @@ public class BlurConfig extends MidnightConfig { @Entry(category = ANIMATIONS) public static BlurConfig.Easing animationCurve = Easing.FLAT; - @Override - public void writeChanges(String modid) { - super.writeChanges(modid); - if (MinecraftClient.getInstance().options != null) - MinecraftClient.getInstance().options.getMenuBackgroundBlurriness().setValue(radius); - } - public enum Easing { // Based on https://gist.github.com/dev-hydrogen/21a66f83f0386123e0c0acf107254843 // Thank you very much! @@ -102,4 +99,51 @@ public class BlurConfig extends MidnightConfig { return functionOut.apply(x).doubleValue(); } } + private static GameOptions options; + + @Override + public void onTabInit(String tabName, MidnightConfigListWidget list, MidnightConfigScreen screen) { + options = MinecraftClient.getInstance().options; + if (Objects.equals(tabName, STYLE)) { + EntryInfo centered = new EntryInfo(null, Blur.MOD_ID); + centered.comment = new Comment(){ + @Override + public boolean centered() { + return true; + } + public Class annotationType() {return null;} + public String category() {return "";} + public String name() {return "";} + public String url() {return "";} + public String requiredMod() {return "";} + }; + RadiusSliderWidget slider = new RadiusSliderWidget(screen.width - 185, 0, 150, 20); + + TextIconButtonWidget resetButton = TextIconButtonWidget.builder(Text.translatable("controls.reset"), (button -> { + options.getMenuBackgroundBlurriness().setValue(5); + screen.updateList(); + }), true).texture(Identifier.of("midnightlib","icon/reset"), 12, 12).dimension(20, 20).build(); + resetButton.setPosition(screen.width - 205 + 150 + 25, 0); + slider.resetButton = resetButton; + slider.updateMessage(); + + list.addButton(Lists.newArrayList(), Text.translatable("blur.midnightconfig._blur"), centered); + list.addButton(Lists.newArrayList(slider, resetButton), Text.translatable("blur.midnightconfig.radius"), new EntryInfo(null, Blur.MOD_ID)); + } + } + + public static class RadiusSliderWidget extends SliderWidget { + TextIconButtonWidget resetButton; + public RadiusSliderWidget(int x, int y, int width, int height) { + super(x, y, width, height, Text.empty(), options.getMenuBackgroundBlurrinessValue() / 20d); + } + public void updateMessage() { + this.setMessage(Text.of(String.valueOf(options.getMenuBackgroundBlurrinessValue()))); + if (resetButton != null) resetButton.active = options.getMenuBackgroundBlurrinessValue() != 5; + } + + public void applyValue() { + options.getMenuBackgroundBlurriness().setValue(Double.valueOf(this.value * 20).intValue()); + } + } } \ No newline at end of file diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfig$EntryInfo.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfig$EntryInfo.java deleted file mode 100644 index 36e43dd..0000000 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfig$EntryInfo.java +++ /dev/null @@ -1,26 +0,0 @@ -package eu.midnightdust.blur.mixin; - -import eu.midnightdust.blur.Blur; -import eu.midnightdust.lib.config.MidnightConfig; -import net.minecraft.client.MinecraftClient; -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 java.util.Objects; - -@Mixin(value = MidnightConfig.EntryInfo.class, remap = false) -public abstract class MixinMidnightConfig$EntryInfo { - @Shadow @Final public String modid; - @Shadow @Final public String fieldName; - @Shadow Object value; - - @Inject(at = @At(value = "TAIL"), method = "updateFieldValue") - private void blur$instantlyApplyRadius(CallbackInfo ci) { - if (Objects.equals(modid, Blur.MOD_ID) && Objects.equals(fieldName, "radius")) - MinecraftClient.getInstance().options.getMenuBackgroundBlurriness().setValue((int) value); - } -} diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfig.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfig.java deleted file mode 100644 index d665c1c..0000000 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package eu.midnightdust.blur.mixin; - -import eu.midnightdust.blur.config.BlurConfig; -import eu.midnightdust.lib.config.MidnightConfig; -import net.minecraft.client.MinecraftClient; -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; - -@Mixin(MidnightConfig.class) -public abstract class MixinMidnightConfig { - @Inject(at = @At(value = "INVOKE", target = "Lcom/google/gson/Gson;fromJson(Ljava/io/Reader;Ljava/lang/Class;)Ljava/lang/Object;", shift = At.Shift.AFTER), remap = false, method = "loadValuesFromJson") - private static void blur$syncRadius(CallbackInfo ci) { - BlurConfig.radius = MinecraftClient.getInstance().options.getMenuBackgroundBlurrinessValue(); - } -} \ No newline at end of file diff --git a/common/src/main/resources/assets/blur/lang/de_de.json b/common/src/main/resources/assets/blur/lang/de_de.json index 45acbd4..5925e79 100644 --- a/common/src/main/resources/assets/blur/lang/de_de.json +++ b/common/src/main/resources/assets/blur/lang/de_de.json @@ -28,9 +28,9 @@ "blur.midnightconfig.gradientEndAlpha": "Farbverlauf-Endstransparenz", "blur.midnightconfig.gradientRotation": "Farbverlauf-Rotation", "blur.midnightconfig.excludedScreens": "Ausgeschlossene Bildschirme", - "blur.midnightconfig._general": "§7⛏ Generell", - "blur.midnightconfig._advanced": "§7⚒ Fortgeschritten", - "blur.midnightconfig._blur": "§7▒ Unschärfe", - "blur.midnightconfig._gradient": "§7\uD83D\uDFE2 Farbverlauf", - "blur.midnightconfig._animations": "§7\uD83D\uDCFD Animationen" + "blur.midnightconfig._general": "⛏ Generell", + "blur.midnightconfig._advanced": "⚒ Fortgeschritten", + "blur.midnightconfig._blur": "▒ Unschärfe", + "blur.midnightconfig._gradient": "\uD83D\uDFE2 Farbverlauf", + "blur.midnightconfig._animations": "\uD83D\uDCFD Animationen" } \ No newline at end of file diff --git a/common/src/main/resources/assets/blur/lang/en_us.json b/common/src/main/resources/assets/blur/lang/en_us.json index 2ae4ead..e4c56b4 100755 --- a/common/src/main/resources/assets/blur/lang/en_us.json +++ b/common/src/main/resources/assets/blur/lang/en_us.json @@ -34,9 +34,9 @@ "blur.midnightconfig.forceEnabledScreens.tooltip": "Screens where the vanilla blur effect should be force-enabled\nMight not work 100% of the time", "blur.midnightconfig.forceDisabledScreens": "Force-disabled Screens", "blur.midnightconfig.forceDisabledScreens.tooltip": "Screens where the vanilla blur effect should be force-disabled", - "blur.midnightconfig._general": "§7⛏ General", - "blur.midnightconfig._advanced": "§7⚒ Advanced", - "blur.midnightconfig._blur": "§7▒ Blur", - "blur.midnightconfig._gradient": "§7\uD83D\uDFE2 Gradient", - "blur.midnightconfig._animations": "§7\uD83D\uDCFD Animations" + "blur.midnightconfig._general": "⛏ General", + "blur.midnightconfig._advanced": "⚒ Advanced", + "blur.midnightconfig._blur": "▒ Blur", + "blur.midnightconfig._gradient": "\uD83D\uDFE2 Gradient", + "blur.midnightconfig._animations": "\uD83D\uDCFD Animations" } \ No newline at end of file diff --git a/common/src/main/resources/blur.mixins.json b/common/src/main/resources/blur.mixins.json index 9c8dd35..f06f431 100644 --- a/common/src/main/resources/blur.mixins.json +++ b/common/src/main/resources/blur.mixins.json @@ -8,8 +8,6 @@ "MixinGameRenderer", "MixinHandledScreen", "MixinInGameHud", - "MixinMidnightConfig", - "MixinMidnightConfig$EntryInfo", "MixinMinecraftClient", "MixinScreen", "MixinTitleScreen", diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 3a345a6..9331400 100755 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -22,7 +22,9 @@ "authors": [ "Motschen", "tterrag1098", - "Pyrofab", + "Pyrofab" + ], + "contributors": [ "backryun", "byquanton" ], @@ -31,6 +33,7 @@ "blur.mixins.json" ], "depends": { - "minecraft": ">=1.21.2" + "minecraft": ">=1.21.2", + "midnightlib": ">=1.7.3" } } diff --git a/gradle.properties b/gradle.properties index dc32266..90754a7 100755 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ yarn_mappings=1.21.4+build.1 enabled_platforms=fabric,neoforge # Mod Properties -mod_version=5.2.0 +mod_version=5.2.1 maven_group=eu.midnightdust.blur archives_base_name=blur release_type=release @@ -23,5 +23,5 @@ neoforge_version=21.4.10-beta yarn_mappings_patch_neoforge_version = 1.21+build.4 # Libraries -midnightlib_version = 1.7.0+1.21.4 +midnightlib_version = 1.7.3+1.21.4 modmenu_version = 11.0.2 diff --git a/neoforge/src/main/resources/META-INF/neoforge.mods.toml b/neoforge/src/main/resources/META-INF/neoforge.mods.toml index 01bddeb..1bf80e2 100644 --- a/neoforge/src/main/resources/META-INF/neoforge.mods.toml +++ b/neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -28,4 +28,11 @@ modId = "minecraft" mandatory = true versionRange = "[1.21.2,)" ordering = "NONE" +side = "CLIENT" + +[[dependencies.blur]] +modId = "midnightlib" +mandatory = true +versionRange = "[1.7.3,)" +ordering = "NONE" side = "CLIENT" \ No newline at end of file