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 eu.midnightdust.lib.config.MidnightConfig;
import net.minecraft.client.MinecraftClient;
import java.util.List;
import java.util.function.Function;
@@ -22,6 +23,8 @@ public class BlurConfig extends MidnightConfig {
public static int fadeOutTimeMillis = 300;
@Entry(category = ANIMATIONS)
public static BlurConfig.Easing animationCurve = Easing.FLAT;
@Entry(category = STYLE, isSlider = true, min = 0, max = 20)
public static int radius = 5;
@Entry(category = STYLE)
public static boolean useGradient = true;
@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
public static List<String> forceDisabledScreens = Lists.newArrayList();
@Override
public void writeChanges(String modid) {
MinecraftClient.getInstance().options.getMenuBackgroundBlurriness().setValue(radius);
}
public enum Easing {
// Based on https://gist.github.com/dev-hydrogen/21a66f83f0386123e0c0acf107254843
// 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.ELASTIC": "Elastic",
"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.useGradient": "Gradient as Background",
"blur.midnightconfig.gradientStart": "Gradient Start Color",

View File

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