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 c65bddc..bb8ca52 100644 --- a/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java +++ b/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java @@ -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 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! diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfigScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfigScreen.java new file mode 100644 index 0000000..330ec79 --- /dev/null +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfigScreen.java @@ -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(); + } +} \ No newline at end of file diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightSliderWidget.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightSliderWidget.java new file mode 100644 index 0000000..f624038 --- /dev/null +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightSliderWidget.java @@ -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())); + } +} 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 ebc6c53..40962b9 100755 --- a/common/src/main/resources/assets/blur/lang/en_us.json +++ b/common/src/main/resources/assets/blur/lang/en_us.json @@ -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", diff --git a/common/src/main/resources/blur.mixins.json b/common/src/main/resources/blur.mixins.json index bdf04c5..b13ca67 100644 --- a/common/src/main/resources/blur.mixins.json +++ b/common/src/main/resources/blur.mixins.json @@ -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 diff --git a/gradle.properties b/gradle.properties index 63a186f..b97c181 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.0.2 +mod_version=5.1.0 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.6.6 +midnightlib_version = 1.6.7 modmenu_version = 11.0.2