feat: add mirror of blur radius to config screen

- The blur radius can normally be configured in Minecraft's Accessibility settings. However, this has caused confusion for some users, so it can now also be configured via the config screen.
This commit is contained in:
Martin Prokoph
2025-01-20 16:44:35 +01:00
parent e5c2a542f4
commit 75bfeb2ce3
6 changed files with 56 additions and 7 deletions

View File

@@ -2,6 +2,7 @@ package eu.midnightdust.blur.config;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import eu.midnightdust.lib.config.MidnightConfig; import eu.midnightdust.lib.config.MidnightConfig;
import net.minecraft.client.MinecraftClient;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.function.Function;
@@ -22,6 +23,8 @@ public class BlurConfig extends MidnightConfig {
public static int fadeOutTimeMillis = 300; public static int fadeOutTimeMillis = 300;
@Entry(category = ANIMATIONS) @Entry(category = ANIMATIONS)
public static BlurConfig.Easing animationCurve = Easing.FLAT; public static BlurConfig.Easing animationCurve = Easing.FLAT;
@Entry(category = STYLE, isSlider = true, min = 0, max = 20)
public static int radius = 5;
@Entry(category = STYLE) @Entry(category = STYLE)
public static boolean useGradient = true; public static boolean useGradient = true;
@Entry(category = STYLE, isColor = true, width = 7, min = 7) @Entry(category = STYLE, isColor = true, width = 7, min = 7)
@@ -43,6 +46,11 @@ public class BlurConfig extends MidnightConfig {
@Entry(category = SCREENS) // Screens where the vanilla blur effect should be force disabled @Entry(category = SCREENS) // Screens where the vanilla blur effect should be force disabled
public static List<String> forceDisabledScreens = Lists.newArrayList(); public static List<String> forceDisabledScreens = Lists.newArrayList();
@Override
public void writeChanges(String modid) {
MinecraftClient.getInstance().options.getMenuBackgroundBlurriness().setValue(radius);
}
public enum Easing { public enum Easing {
// Based on https://gist.github.com/dev-hydrogen/21a66f83f0386123e0c0acf107254843 // Based on https://gist.github.com/dev-hydrogen/21a66f83f0386123e0c0acf107254843
// Thank you very much! // Thank you very much!

View File

@@ -0,0 +1,17 @@
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.MidnightConfigScreen.class)
public abstract class MixinMidnightConfigScreen {
@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 = "loadValues")
private void blur$syncRadius(CallbackInfo ci) {
BlurConfig.radius = MinecraftClient.getInstance().options.getMenuBackgroundBlurrinessValue();
}
}

View File

@@ -0,0 +1,21 @@
package eu.midnightdust.blur.mixin;
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;
@Mixin(value = MidnightConfig.MidnightSliderWidget.class, remap = false)
public abstract class MixinMidnightSliderWidget {
@Shadow @Final private MidnightConfig.EntryInfo info;
@Inject(at = @At(value = "TAIL"), method = "applyValue")
private void blur$instantlyApplyRadius(CallbackInfo ci) {
// TODO: Make more fields in MidnightLib protected instead of private and improve this
MinecraftClient.getInstance().options.getMenuBackgroundBlurriness().setValue(Integer.parseInt(this.info.toTemporaryValue()));
}
}

View File

@@ -18,6 +18,7 @@
"blur.midnightconfig.enum.Easing.BACK": "Back", "blur.midnightconfig.enum.Easing.BACK": "Back",
"blur.midnightconfig.enum.Easing.ELASTIC": "Elastic", "blur.midnightconfig.enum.Easing.ELASTIC": "Elastic",
"blur.midnightconfig.radius": "Radius", "blur.midnightconfig.radius": "Radius",
"blur.midnightconfig.radius.label.tooltip": "Mirror of \"Menu Background Blur\" found in Minecraft's Accessibility Settings",
"blur.midnightconfig.rainbowMode": "Rainbow Mode \uD83C\uDF08", "blur.midnightconfig.rainbowMode": "Rainbow Mode \uD83C\uDF08",
"blur.midnightconfig.useGradient": "Gradient as Background", "blur.midnightconfig.useGradient": "Gradient as Background",
"blur.midnightconfig.gradientStart": "Gradient Start Color", "blur.midnightconfig.gradientStart": "Gradient Start Color",

View File

@@ -4,13 +4,15 @@
"package": "eu.midnightdust.blur.mixin", "package": "eu.midnightdust.blur.mixin",
"compatibilityLevel": "JAVA_21", "compatibilityLevel": "JAVA_21",
"client": [ "client": [
"MixinScreen", "MixinGameOptions",
"ScreenAccessor",
"MixinHandledScreen",
"MixinMinecraftClient",
"MixinGameRenderer", "MixinGameRenderer",
"MixinHandledScreen",
"MixinInGameHud", "MixinInGameHud",
"MixinGameOptions" "MixinMidnightConfigScreen",
"MixinMidnightSliderWidget",
"MixinMinecraftClient",
"MixinScreen",
"ScreenAccessor"
], ],
"injectors": { "injectors": {
"defaultRequire": 1 "defaultRequire": 1

View File

@@ -8,7 +8,7 @@ yarn_mappings=1.21.4+build.1
enabled_platforms=fabric,neoforge enabled_platforms=fabric,neoforge
# Mod Properties # Mod Properties
mod_version=5.0.2 mod_version=5.1.0
maven_group=eu.midnightdust.blur maven_group=eu.midnightdust.blur
archives_base_name=blur archives_base_name=blur
release_type=release release_type=release
@@ -23,5 +23,5 @@ neoforge_version=21.4.10-beta
yarn_mappings_patch_neoforge_version = 1.21+build.4 yarn_mappings_patch_neoforge_version = 1.21+build.4
# Libraries # Libraries
midnightlib_version = 1.6.6 midnightlib_version = 1.6.7
modmenu_version = 11.0.2 modmenu_version = 11.0.2