From 6f10a7f3dfb31246c631a01364a54f1d2d2323bd Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Tue, 5 Nov 2024 10:48:31 +0100 Subject: [PATCH 01/18] Update to 1.21.3 --- .../blur/mixin/MixinGameRenderer.java | 2 +- .../blur/mixin/MixinHandledScreen.java | 2 +- .../midnightdust/blur/mixin/MixinInGameHud.java | 2 +- .../eu/midnightdust/blur/mixin/MixinScreen.java | 6 +++--- .../midnightdust/blur/mixin/ScreenAccessor.java | 2 +- fabric/src/main/resources/fabric.mod.json | 4 ++-- gradle.properties | 16 ++++++++-------- .../main/resources/META-INF/neoforge.mods.toml | 2 +- 8 files changed, 18 insertions(+), 18 deletions(-) diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java index 8ec9aad..b6c969b 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java @@ -9,7 +9,7 @@ import org.spongepowered.asm.mixin.injection.ModifyVariable; @Mixin(GameRenderer.class) public class MixinGameRenderer { - @ModifyVariable(method = "renderBlur", at = @At("STORE"), ordinal = 1) + @ModifyVariable(method = "renderBlur", at = @At("STORE"), ordinal = 0) private float blur$modifyRadius(float radius) { // Modify the radius based on the animation progress if (!BlurInfo.screenChanged && BlurInfo.start >= 0) // Only update the progress after all tests have been completed Blur.updateProgress(BlurInfo.screenHasBlur); diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java index 2857c6e..c85fe07 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java @@ -18,6 +18,6 @@ public class MixinHandledScreen extends Screen { @Inject(method = "renderBackground", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ingame/HandledScreen;drawBackground(Lnet/minecraft/client/gui/DrawContext;FII)V", shift = At.Shift.BEFORE)) private void blur$renderContainerBlur(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { // Applies the blur effect in containers (Inventory, Chest, etc.) - if (BlurConfig.blurContainers) this.applyBlur(delta); + if (BlurConfig.blurContainers) this.applyBlur(); } } diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java index 966498c..d663e5e 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java @@ -22,7 +22,7 @@ public class MixinInGameHud { if (client.currentScreen == null && client.world != null && BlurInfo.start >= 0 && BlurInfo.prevScreenHasBlur) { BlurInfo.doTest = false; BlurInfo.screenChanged = false; - this.client.gameRenderer.renderBlur(tickCounter.getTickDelta(true)); + this.client.gameRenderer.renderBlur(); this.client.getFramebuffer().beginWrite(false); if (BlurInfo.prevScreenHasBackground) Blur.renderRotatedGradient(context, client.getWindow().getScaledWidth(), client.getWindow().getScaledHeight()); diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java index e299c84..16b2b07 100755 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java @@ -32,7 +32,7 @@ public abstract class MixinScreen { } if (BlurInfo.start >= 0 && !BlurInfo.screenHasBlur && BlurInfo.prevScreenHasBlur) { // Fade out in non-blurred screens - this.client.gameRenderer.renderBlur(delta); + this.client.gameRenderer.renderBlur(); this.client.getFramebuffer().beginWrite(false); if (BlurInfo.prevScreenHasBackground) Blur.renderRotatedGradient(context, width, height); @@ -44,7 +44,7 @@ public abstract class MixinScreen { BlurInfo.screenHasBackground = true; // Test if the screen has a background } @Inject(at = @At("HEAD"), method = "applyBlur", cancellable = true) - public void blur$getBlurEnabled(float delta, CallbackInfo ci) { + public void blur$getBlurEnabled(CallbackInfo ci) { if (BlurConfig.forceDisabledScreens.contains(this.getClass().getCanonicalName())) { ci.cancel(); return; } @@ -63,7 +63,7 @@ public abstract class MixinScreen { @Inject(at = @At("HEAD"), method = "renderInGameBackground", cancellable = true) public void blur$rotatedGradient(DrawContext context, CallbackInfo ci) { if (BlurConfig.forceEnabledScreens.contains(this.getClass().getCanonicalName())) - ((ScreenAccessor)this).forceApplyBlur(client.getRenderTickCounter().getTickDelta(true)); + ((ScreenAccessor)this).forceApplyBlur(); Blur.renderRotatedGradient(context, width, height); // Replaces the default gradient with our rotated one ci.cancel(); diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/ScreenAccessor.java b/common/src/main/java/eu/midnightdust/blur/mixin/ScreenAccessor.java index 68d123c..ae04baf 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/ScreenAccessor.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/ScreenAccessor.java @@ -7,5 +7,5 @@ import org.spongepowered.asm.mixin.gen.Invoker; @Mixin(Screen.class) public interface ScreenAccessor { @Invoker("applyBlur") - void forceApplyBlur(float delta); + void forceApplyBlur(); } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index a84f04c..3a345a6 100755 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -1,7 +1,7 @@ { "schemaVersion": 1, "id": "blur", - "name": "Blur+ (Fabric)", + "name": "Blur+", "version": "$version", "environment": "client", "license": "MIT", @@ -31,6 +31,6 @@ "blur.mixins.json" ], "depends": { - "minecraft": ">=1.20.5" + "minecraft": ">=1.21.2" } } diff --git a/gradle.properties b/gradle.properties index a56c441..2f5069c 100755 --- a/gradle.properties +++ b/gradle.properties @@ -2,13 +2,13 @@ org.gradle.jvmargs=-Xmx2G org.gradle.parallel=true -minecraft_version=1.21 -supported_versions=1.21.1 -yarn_mappings=1.21+build.2 +minecraft_version=1.21.3 +supported_versions=1.21.2 +yarn_mappings=1.21.3+build.2 enabled_platforms=fabric,neoforge # Mod Properties -mod_version=5.0.0 +mod_version=5.0.1 maven_group=eu.midnightdust.blur archives_base_name=blur release_type=release @@ -16,12 +16,12 @@ curseforge_id=393563 modrinth_id=NK39zBp2 # Modloaders -fabric_loader_version=0.15.11 -fabric_api_version=0.100.1+1.21 +fabric_loader_version=0.16.9 +fabric_api_version=0.107.0+1.21.3 -neoforge_version=21.0.143 +neoforge_version=21.3.11-beta yarn_mappings_patch_neoforge_version = 1.21+build.4 # Libraries -midnightlib_version = 1.6.3 +midnightlib_version = 1.6.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 e9c16bc..01bddeb 100644 --- a/neoforge/src/main/resources/META-INF/neoforge.mods.toml +++ b/neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -26,6 +26,6 @@ side = "CLIENT" [[dependencies.blur]] modId = "minecraft" mandatory = true -versionRange = "[1.21,)" +versionRange = "[1.21.2,)" ordering = "NONE" side = "CLIENT" \ No newline at end of file From a13cdd11a746457421f5b34a0cf4fac21770c07a Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sun, 8 Dec 2024 18:11:51 +0100 Subject: [PATCH 02/18] Update dependencies to 1.21.4 --- fabric/build.gradle | 6 ++++-- gradle.properties | 14 +++++++------- neoforge/build.gradle | 6 ++++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/fabric/build.gradle b/fabric/build.gradle index a78ec20..2c02ab6 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -83,7 +83,8 @@ unifiedPublishing { curseforge { token = CURSEFORGE_TOKEN id = rootProject.curseforge_id - gameVersions.addAll "Java 21", project.minecraft_version, project.supported_versions + gameVersions.addAll "Java 21", project.minecraft_version + if (project.supported_versions != "") gameVersions.addAll project.supported_versions } } @@ -93,7 +94,8 @@ unifiedPublishing { token = MODRINTH_TOKEN id = rootProject.modrinth_id version = "$rootProject.version-$project.name" - gameVersions.addAll project.minecraft_version, project.supported_versions + gameVersions.addAll project.minecraft_version + if (project.supported_versions != "") gameVersions.addAll project.supported_versions } } } diff --git a/gradle.properties b/gradle.properties index 2f5069c..63a186f 100755 --- a/gradle.properties +++ b/gradle.properties @@ -2,13 +2,13 @@ org.gradle.jvmargs=-Xmx2G org.gradle.parallel=true -minecraft_version=1.21.3 -supported_versions=1.21.2 -yarn_mappings=1.21.3+build.2 +minecraft_version=1.21.4 +supported_versions= +yarn_mappings=1.21.4+build.1 enabled_platforms=fabric,neoforge # Mod Properties -mod_version=5.0.1 +mod_version=5.0.2 maven_group=eu.midnightdust.blur archives_base_name=blur release_type=release @@ -17,11 +17,11 @@ modrinth_id=NK39zBp2 # Modloaders fabric_loader_version=0.16.9 -fabric_api_version=0.107.0+1.21.3 +fabric_api_version=0.111.0+1.21.4 -neoforge_version=21.3.11-beta +neoforge_version=21.4.10-beta yarn_mappings_patch_neoforge_version = 1.21+build.4 # Libraries -midnightlib_version = 1.6.4 +midnightlib_version = 1.6.6 modmenu_version = 11.0.2 diff --git a/neoforge/build.gradle b/neoforge/build.gradle index 7c6325b..6bf9ec2 100644 --- a/neoforge/build.gradle +++ b/neoforge/build.gradle @@ -96,7 +96,8 @@ unifiedPublishing { curseforge { token = CURSEFORGE_TOKEN id = rootProject.curseforge_id - gameVersions.addAll "Java 21", project.minecraft_version, project.supported_versions + gameVersions.addAll "Java 21", project.minecraft_version + if (project.supported_versions != "") gameVersions.addAll project.supported_versions } } @@ -106,7 +107,8 @@ unifiedPublishing { token = MODRINTH_TOKEN id = rootProject.modrinth_id version = "$rootProject.version-$project.name" - gameVersions.addAll project.minecraft_version, project.supported_versions + gameVersions.addAll project.minecraft_version + if (project.supported_versions != "") gameVersions.addAll project.supported_versions } } } From e5c2a542f4fc13d6830bb79a2a26a7ea84b01271 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Tue, 14 Jan 2025 11:50:04 +0100 Subject: [PATCH 03/18] fix: container blur not working on NeoForge --- .../main/java/eu/midnightdust/blur/Blur.java | 19 ++++++++++++++++++- .../blur/mixin/MixinHandledScreen.java | 6 ++++++ .../midnightdust/blur/mixin/MixinScreen.java | 13 +------------ .../blur/neoforge/BlurNeoForge.java | 4 ++-- 4 files changed, 27 insertions(+), 15 deletions(-) diff --git a/common/src/main/java/eu/midnightdust/blur/Blur.java b/common/src/main/java/eu/midnightdust/blur/Blur.java index c154b1a..0a9ebad 100644 --- a/common/src/main/java/eu/midnightdust/blur/Blur.java +++ b/common/src/main/java/eu/midnightdust/blur/Blur.java @@ -3,6 +3,7 @@ package eu.midnightdust.blur; import eu.midnightdust.blur.config.BlurConfig; import eu.midnightdust.blur.util.RainbowColor; import eu.midnightdust.lib.util.MidnightColorUtil; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import org.joml.Math; import org.joml.Matrix4f; @@ -15,12 +16,28 @@ import static eu.midnightdust.blur.util.RainbowColor.hue; import static eu.midnightdust.blur.util.RainbowColor.hue2; public class Blur { + public static final String MOD_ID = "blur"; public static void init() { - BlurConfig.init("blur", BlurConfig.class); + BlurConfig.init(MOD_ID, BlurConfig.class); } public static boolean doFade = false; + public static void onRender(DrawContext context, int width, int height, MinecraftClient client) { + if (!BlurInfo.doTest && BlurInfo.screenChanged) { // After the tests for blur and background color have been completed + Blur.onScreenChange(); + BlurInfo.screenChanged = false; + } + + if (BlurInfo.start >= 0 && !BlurInfo.screenHasBlur && BlurInfo.prevScreenHasBlur) { // Fade out in non-blurred screens + client.gameRenderer.renderBlur(); + client.getFramebuffer().beginWrite(false); + + if (BlurInfo.prevScreenHasBackground) Blur.renderRotatedGradient(context, width, height); + } + BlurInfo.doTest = false; // Set the test state to completed, as tests will happen in the same tick. + } + public static void onScreenChange() { if (screenHasBlur) { if (doFade) { diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java index c85fe07..14fb1f3 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java @@ -1,6 +1,8 @@ package eu.midnightdust.blur.mixin; +import eu.midnightdust.blur.Blur; import eu.midnightdust.blur.config.BlurConfig; +import eu.midnightdust.lib.util.PlatformFunctions; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; @@ -20,4 +22,8 @@ public class MixinHandledScreen extends Screen { private void blur$renderContainerBlur(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { // Applies the blur effect in containers (Inventory, Chest, etc.) if (BlurConfig.blurContainers) this.applyBlur(); } + @Inject(at = @At("HEAD"), method = "render") + public void blur$processScreenChange(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { + if (PlatformFunctions.getPlatformName().equals("neoforge")) Blur.onRender(context, width, height, this.client); + } } diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java index 16b2b07..2616cbb 100755 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java @@ -26,18 +26,7 @@ public abstract class MixinScreen { @Inject(at = @At("HEAD"), method = "render") public void blur$processScreenChange(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { - if (!BlurInfo.doTest && BlurInfo.screenChanged) { // After the tests for blur and background color have been completed - Blur.onScreenChange(); - BlurInfo.screenChanged = false; - } - - if (BlurInfo.start >= 0 && !BlurInfo.screenHasBlur && BlurInfo.prevScreenHasBlur) { // Fade out in non-blurred screens - this.client.gameRenderer.renderBlur(); - this.client.getFramebuffer().beginWrite(false); - - if (BlurInfo.prevScreenHasBackground) Blur.renderRotatedGradient(context, width, height); - } - BlurInfo.doTest = false; // Set the test state to completed, as tests will happen in the same tick. + Blur.onRender(context, width, height, this.client); } @Inject(at = @At("HEAD"), method = "renderInGameBackground") public void blur$getBackgroundEnabled(DrawContext context, CallbackInfo ci) { diff --git a/neoforge/src/main/java/eu/midnightdust/blur/neoforge/BlurNeoForge.java b/neoforge/src/main/java/eu/midnightdust/blur/neoforge/BlurNeoForge.java index 4f99669..85e6e0f 100644 --- a/neoforge/src/main/java/eu/midnightdust/blur/neoforge/BlurNeoForge.java +++ b/neoforge/src/main/java/eu/midnightdust/blur/neoforge/BlurNeoForge.java @@ -8,13 +8,13 @@ import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.common.Mod; import net.neoforged.neoforge.client.event.ClientTickEvent; -@Mod(value = "blur", dist = Dist.CLIENT) +@Mod(value = Blur.MOD_ID, dist = Dist.CLIENT) public class BlurNeoForge { public BlurNeoForge() { Blur.init(); } - @EventBusSubscriber(modid = "blur", bus = EventBusSubscriber.Bus.GAME, value = Dist.CLIENT) + @EventBusSubscriber(modid = Blur.MOD_ID, bus = EventBusSubscriber.Bus.GAME, value = Dist.CLIENT) public static class ClientGameEvents { @SubscribeEvent public static void endClientTick(ClientTickEvent.Post event) { From 75bfeb2ce303b5af95fa7fc93709b50629852b51 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Mon, 20 Jan 2025 16:44:35 +0100 Subject: [PATCH 04/18] 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. --- .../midnightdust/blur/config/BlurConfig.java | 8 +++++++ .../blur/mixin/MixinMidnightConfigScreen.java | 17 +++++++++++++++ .../blur/mixin/MixinMidnightSliderWidget.java | 21 +++++++++++++++++++ .../resources/assets/blur/lang/en_us.json | 1 + common/src/main/resources/blur.mixins.json | 12 ++++++----- gradle.properties | 4 ++-- 6 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfigScreen.java create mode 100644 common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightSliderWidget.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 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 From f7465ee08efae9923045e1ad695b08561c444cb8 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sat, 25 Jan 2025 18:53:32 +0100 Subject: [PATCH 05/18] feat: title screen blur - Also fix config changes not being saved --- .../midnightdust/blur/config/BlurConfig.java | 5 ++++ .../blur/mixin/MixinTitleScreen.java | 28 +++++++++++++++++++ .../resources/assets/blur/lang/de_de.json | 2 ++ .../resources/assets/blur/lang/en_us.json | 2 ++ common/src/main/resources/blur.mixins.json | 1 + gradle.properties | 2 +- 6 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/eu/midnightdust/blur/mixin/MixinTitleScreen.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 bb8ca52..936a730 100644 --- a/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java +++ b/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java @@ -17,6 +17,10 @@ public class BlurConfig extends MidnightConfig { @Entry(category = SCREENS) public static boolean blurContainers = true; + @Entry(category = SCREENS) + public static boolean blurTitleScreen = false; + @Entry(category = SCREENS) + public static boolean darkenTitleScreen = false; @Entry(category = ANIMATIONS, min = 0, max = 2000, isSlider = true) public static int fadeTimeMillis = 300; @Entry(category = ANIMATIONS, min = 0, max = 2000, isSlider = true) @@ -48,6 +52,7 @@ public class BlurConfig extends MidnightConfig { @Override public void writeChanges(String modid) { + super.writeChanges(modid); MinecraftClient.getInstance().options.getMenuBackgroundBlurriness().setValue(radius); } diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinTitleScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinTitleScreen.java new file mode 100644 index 0000000..5d6447e --- /dev/null +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinTitleScreen.java @@ -0,0 +1,28 @@ +package eu.midnightdust.blur.mixin; + +import eu.midnightdust.blur.Blur; +import eu.midnightdust.blur.config.BlurConfig; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.TitleScreen; +import net.minecraft.text.Text; +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(TitleScreen.class) +public abstract class MixinTitleScreen extends Screen { + protected MixinTitleScreen(Text title) { + super(title); + } + + @Inject(method = "renderPanoramaBackground", at = @At("TAIL")) + private void blur$renderTitleBlur(DrawContext context, float delta, CallbackInfo ci) { // Applies the blur effect in containers (Inventory, Chest, etc.) + if (BlurConfig.blurTitleScreen) { + Blur.updateProgress(true); + this.applyBlur(); + if (BlurConfig.darkenTitleScreen) this.renderDarkening(context); + } + } +} 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 290a84e..d823d78 100644 --- a/common/src/main/resources/assets/blur/lang/de_de.json +++ b/common/src/main/resources/assets/blur/lang/de_de.json @@ -3,6 +3,8 @@ "blur.midnightconfig.category.animations": "Animationen", "blur.midnightconfig.category.style": "Stil", "blur.midnightconfig.blurContainers": "Unschärfe in Containern", + "blur.midnightconfig.blurTitleScreen": "Unschärfe im Titelbildschirm", + "blur.midnightconfig.darkenTitleScreen": "Abgedunkelter Titelhintergrund", "blur.midnightconfig.fadeTimeMillis": "Überblendzeit (in Millisekunden)", "blur.midnightconfig.fadeOutTimeMillis": "Ausblendzeit (in Millisekunden)", "blur.midnightconfig.animationCurve": "Animationskurve", 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 40962b9..898155b 100755 --- a/common/src/main/resources/assets/blur/lang/en_us.json +++ b/common/src/main/resources/assets/blur/lang/en_us.json @@ -4,6 +4,8 @@ "blur.midnightconfig.category.style": "Style", "blur.midnightconfig.category.screens": "Screens", "blur.midnightconfig.blurContainers": "Apply Blur to Containers", + "blur.midnightconfig.blurTitleScreen": "Apply Blur to Title Screen", + "blur.midnightconfig.darkenTitleScreen": "Darken Title Screen Background", "blur.midnightconfig.fadeTimeMillis": "Fade Time (in milliseconds)", "blur.midnightconfig.fadeOutTimeMillis": "Fade Out Time (in milliseconds)", "blur.midnightconfig.animationCurve": "Animation Curve", diff --git a/common/src/main/resources/blur.mixins.json b/common/src/main/resources/blur.mixins.json index b13ca67..4fa8729 100644 --- a/common/src/main/resources/blur.mixins.json +++ b/common/src/main/resources/blur.mixins.json @@ -12,6 +12,7 @@ "MixinMidnightSliderWidget", "MixinMinecraftClient", "MixinScreen", + "MixinTitleScreen", "ScreenAccessor" ], "injectors": { diff --git a/gradle.properties b/gradle.properties index b97c181..ad9f136 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.1.0 +mod_version=5.1.1 maven_group=eu.midnightdust.blur archives_base_name=blur release_type=release From e99572eb4dd5d0946943667d5c0e667324fade11 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Mon, 27 Jan 2025 12:23:07 +0100 Subject: [PATCH 06/18] fix: crash in production when opening config screen --- .../eu/midnightdust/blur/mixin/MixinMidnightSliderWidget.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightSliderWidget.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightSliderWidget.java index f624038..4926302 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightSliderWidget.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightSliderWidget.java @@ -9,9 +9,9 @@ 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) +@Mixin(value = MidnightConfig.MidnightSliderWidget.class) public abstract class MixinMidnightSliderWidget { - @Shadow @Final private MidnightConfig.EntryInfo info; + @Shadow(remap = false) @Final private MidnightConfig.EntryInfo info; @Inject(at = @At(value = "TAIL"), method = "applyValue") private void blur$instantlyApplyRadius(CallbackInfo ci) { From 50ed77006d71caccc766c52c648af38d085da9af Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Mon, 27 Jan 2025 12:24:13 +0100 Subject: [PATCH 07/18] chore: bump version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index ad9f136..b11794f 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.1.1 +mod_version=5.1.2 maven_group=eu.midnightdust.blur archives_base_name=blur release_type=release From 881709c1656b35b49e9498782938d9003c4e69f4 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Mon, 27 Jan 2025 16:39:08 +0100 Subject: [PATCH 08/18] readme: remove duplicate banner --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 01e73a0..312e2e5 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,7 @@ -![Banner art for the mod Blur+](https://i.ibb.co/GM4HVDC/PoBrnNM.png) - Ever thought that the world behind your inventory was just too distracting? Or that the default Minecraft blur effect is just too boring? Then this mod is just right for you! ![Image showing the Minecraft inventory with a blur effect in the background](https://cdn.modrinth.com/data/NK39zBp2/images/213f18fcf3d6c55cad164077d569e2f0339551da.webp) -Download now on [Modrinth](https://modrinth.com/mod/blur-plus) \ No newline at end of file +Download now on [Modrinth](https://modrinth.com/mod/blur-plus) From 5f9738da3873178dbafcf5a50d1afe534fc7cef3 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sun, 2 Feb 2025 21:00:03 +0100 Subject: [PATCH 09/18] fix: add null-check for Minecraft options - Fixes #119 --- .../src/main/java/eu/midnightdust/blur/config/BlurConfig.java | 3 ++- gradle.properties | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) 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 936a730..aa5073b 100644 --- a/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java +++ b/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java @@ -53,7 +53,8 @@ public class BlurConfig extends MidnightConfig { @Override public void writeChanges(String modid) { super.writeChanges(modid); - MinecraftClient.getInstance().options.getMenuBackgroundBlurriness().setValue(radius); + if (MinecraftClient.getInstance().options != null) + MinecraftClient.getInstance().options.getMenuBackgroundBlurriness().setValue(radius); } public enum Easing { diff --git a/gradle.properties b/gradle.properties index b11794f..af75488 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.1.2 +mod_version=5.1.3 maven_group=eu.midnightdust.blur archives_base_name=blur release_type=release From 695fa67270950a6f2a5d2ca183debcb4b3e6b099 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Fri, 28 Mar 2025 23:35:46 +0100 Subject: [PATCH 10/18] feat: various improvements - Update to MidnightLib 1.7.0 and use its features to make the config screen more reliable - Fix background gradient being opaque briefly when fading out while not in a world - Fix 1.21.5 compat (still compatible with 1.21.4 as well :D) --- .../main/java/eu/midnightdust/blur/Blur.java | 12 ++++----- .../midnightdust/blur/config/BlurConfig.java | 6 +++++ .../blur/mixin/MixinHandledScreen.java | 2 +- .../blur/mixin/MixinInGameHud.java | 1 - .../mixin/MixinMidnightConfig$EntryInfo.java | 26 +++++++++++++++++++ ...igScreen.java => MixinMidnightConfig.java} | 8 +++--- .../blur/mixin/MixinMidnightSliderWidget.java | 21 --------------- .../midnightdust/blur/mixin/MixinScreen.java | 2 +- common/src/main/resources/blur.mixins.json | 4 +-- gradle.properties | 6 ++--- 10 files changed, 48 insertions(+), 40 deletions(-) create mode 100644 common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfig$EntryInfo.java rename common/src/main/java/eu/midnightdust/blur/mixin/{MixinMidnightConfigScreen.java => MixinMidnightConfig.java} (81%) delete mode 100644 common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightSliderWidget.java diff --git a/common/src/main/java/eu/midnightdust/blur/Blur.java b/common/src/main/java/eu/midnightdust/blur/Blur.java index 0a9ebad..72b788b 100644 --- a/common/src/main/java/eu/midnightdust/blur/Blur.java +++ b/common/src/main/java/eu/midnightdust/blur/Blur.java @@ -23,7 +23,8 @@ public class Blur { public static boolean doFade = false; - public static void onRender(DrawContext context, int width, int height, MinecraftClient client) { + static float lastDelta; + public static void onRender(DrawContext context, int width, int height, MinecraftClient client, float delta) { if (!BlurInfo.doTest && BlurInfo.screenChanged) { // After the tests for blur and background color have been completed Blur.onScreenChange(); BlurInfo.screenChanged = false; @@ -31,9 +32,9 @@ public class Blur { if (BlurInfo.start >= 0 && !BlurInfo.screenHasBlur && BlurInfo.prevScreenHasBlur) { // Fade out in non-blurred screens client.gameRenderer.renderBlur(); - client.getFramebuffer().beginWrite(false); - if (BlurInfo.prevScreenHasBackground) Blur.renderRotatedGradient(context, width, height); + if (BlurInfo.prevScreenHasBackground && BlurConfig.useGradient && lastDelta != delta) Blur.renderRotatedGradient(context, width, height); + lastDelta = delta; } BlurInfo.doTest = false; // Set the test state to completed, as tests will happen in the same tick. } @@ -78,10 +79,7 @@ public class Blur { int b = (col.getRGB() >> 8) & 0xFF; int g = col.getRGB() & 0xFF; float prog = progress; - a *= prog; - r *= prog; - g *= prog; - b *= prog; + a *= prog; r *= prog; g *= prog; b *= prog; return a << 24 | r << 16 | b << 8 | g; } public static int getRotation() { 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 aa5073b..6124019 100644 --- a/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java +++ b/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java @@ -19,6 +19,7 @@ public class BlurConfig extends MidnightConfig { public static boolean blurContainers = true; @Entry(category = SCREENS) public static boolean blurTitleScreen = false; + @Condition(requiredOption = "blurTitleScreen", visibleButLocked = true) @Entry(category = SCREENS) public static boolean darkenTitleScreen = false; @Entry(category = ANIMATIONS, min = 0, max = 2000, isSlider = true) @@ -31,14 +32,19 @@ public class BlurConfig extends MidnightConfig { public static int radius = 5; @Entry(category = STYLE) public static boolean useGradient = true; + @Condition(requiredOption = "useGradient", visibleButLocked = true) @Entry(category = STYLE, isColor = true, width = 7, min = 7) public static String gradientStart = "#000000"; + @Condition(requiredOption = "useGradient", visibleButLocked = true) @Entry(category = STYLE, isSlider = true, min = 0, max = 255) public static int gradientStartAlpha = 75; + @Condition(requiredOption = "useGradient", visibleButLocked = true) @Entry(category = STYLE, isColor = true, width = 7, min = 7) public static String gradientEnd = "#000000"; + @Condition(requiredOption = "useGradient", visibleButLocked = true) @Entry(category = STYLE, isSlider = true, min = 0, max = 255) public static int gradientEndAlpha = 75; + @Condition(requiredOption = "useGradient", visibleButLocked = true) @Entry(category = STYLE, isSlider = true, min = 0, max = 360) public static int gradientRotation = 0; @Entry(category = STYLE) diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java index 14fb1f3..052b33d 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java @@ -24,6 +24,6 @@ public class MixinHandledScreen extends Screen { } @Inject(at = @At("HEAD"), method = "render") public void blur$processScreenChange(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { - if (PlatformFunctions.getPlatformName().equals("neoforge")) Blur.onRender(context, width, height, this.client); + if (PlatformFunctions.getPlatformName().equals("neoforge")) Blur.onRender(context, width, height, this.client, delta); } } diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java index d663e5e..f94e155 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java @@ -23,7 +23,6 @@ public class MixinInGameHud { BlurInfo.doTest = false; BlurInfo.screenChanged = false; this.client.gameRenderer.renderBlur(); - this.client.getFramebuffer().beginWrite(false); if (BlurInfo.prevScreenHasBackground) Blur.renderRotatedGradient(context, client.getWindow().getScaledWidth(), client.getWindow().getScaledHeight()); } 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 new file mode 100644 index 0000000..36e43dd --- /dev/null +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfig$EntryInfo.java @@ -0,0 +1,26 @@ +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/MixinMidnightConfigScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfig.java similarity index 81% rename from common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfigScreen.java rename to common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfig.java index 330ec79..d665c1c 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfigScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightConfig.java @@ -8,10 +8,10 @@ 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) { +@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/java/eu/midnightdust/blur/mixin/MixinMidnightSliderWidget.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightSliderWidget.java deleted file mode 100644 index 4926302..0000000 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinMidnightSliderWidget.java +++ /dev/null @@ -1,21 +0,0 @@ -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) -public abstract class MixinMidnightSliderWidget { - @Shadow(remap = false) @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/java/eu/midnightdust/blur/mixin/MixinScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java index 2616cbb..f2bf18a 100755 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java @@ -26,7 +26,7 @@ public abstract class MixinScreen { @Inject(at = @At("HEAD"), method = "render") public void blur$processScreenChange(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { - Blur.onRender(context, width, height, this.client); + Blur.onRender(context, width, height, this.client, delta); } @Inject(at = @At("HEAD"), method = "renderInGameBackground") public void blur$getBackgroundEnabled(DrawContext context, CallbackInfo ci) { diff --git a/common/src/main/resources/blur.mixins.json b/common/src/main/resources/blur.mixins.json index 4fa8729..9c8dd35 100644 --- a/common/src/main/resources/blur.mixins.json +++ b/common/src/main/resources/blur.mixins.json @@ -8,8 +8,8 @@ "MixinGameRenderer", "MixinHandledScreen", "MixinInGameHud", - "MixinMidnightConfigScreen", - "MixinMidnightSliderWidget", + "MixinMidnightConfig", + "MixinMidnightConfig$EntryInfo", "MixinMinecraftClient", "MixinScreen", "MixinTitleScreen", diff --git a/gradle.properties b/gradle.properties index af75488..dc32266 100755 --- a/gradle.properties +++ b/gradle.properties @@ -3,12 +3,12 @@ org.gradle.jvmargs=-Xmx2G org.gradle.parallel=true minecraft_version=1.21.4 -supported_versions= +supported_versions=1.21.5 yarn_mappings=1.21.4+build.1 enabled_platforms=fabric,neoforge # Mod Properties -mod_version=5.1.3 +mod_version=5.2.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.7 +midnightlib_version = 1.7.0+1.21.4 modmenu_version = 11.0.2 From c9c630ac11155c6a0cbbd41cfdc47e05ec13de9c Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sat, 29 Mar 2025 18:45:19 +0100 Subject: [PATCH 11/18] fix: less invasive gradient injection - Should fix various compatibility issues with other mods --- .../midnightdust/blur/mixin/MixinScreen.java | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java index f2bf18a..8d8899d 100755 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java @@ -1,13 +1,17 @@ package eu.midnightdust.blur.mixin; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import eu.midnightdust.blur.BlurInfo; import eu.midnightdust.blur.config.BlurConfig; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; +import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -20,18 +24,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; public abstract class MixinScreen { @Shadow @Final protected Text title; @Shadow protected MinecraftClient client; - @Shadow public abstract void renderInGameBackground(DrawContext context); @Shadow public int width; @Shadow public int height; + @Shadow protected abstract void applyBlur(); @Inject(at = @At("HEAD"), method = "render") public void blur$processScreenChange(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { Blur.onRender(context, width, height, this.client, delta); } - @Inject(at = @At("HEAD"), method = "renderInGameBackground") - public void blur$getBackgroundEnabled(DrawContext context, CallbackInfo ci) { - BlurInfo.screenHasBackground = true; // Test if the screen has a background - } @Inject(at = @At("HEAD"), method = "applyBlur", cancellable = true) public void blur$getBlurEnabled(CallbackInfo ci) { if (BlurConfig.forceDisabledScreens.contains(this.getClass().getCanonicalName())) { @@ -41,20 +41,23 @@ public abstract class MixinScreen { BlurInfo.screenHasBlur = true; // Test if the screen has blur } - @Inject(at = @At("HEAD"), method = "renderDarkening(Lnet/minecraft/client/gui/DrawContext;IIII)V", cancellable = true) - public void blur$applyGradient(DrawContext context, int x, int y, int width, int height, CallbackInfo ci) { - if (BlurConfig.useGradient) { // Replaces the background texture with a gradient - renderInGameBackground(context); - ci.cancel(); - } + @WrapOperation(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;renderBackgroundTexture(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/util/Identifier;IIFFII)V"), method = "renderDarkening(Lnet/minecraft/client/gui/DrawContext;IIII)V") + private void blur$applyGradient(DrawContext context, Identifier texture, int x, int y, float u, float v, int width, int height, Operation original) { + if (BlurConfig.useGradient) { + blur$renderGradient(context); // Replaces the background texture with a gradient + } else original.call(context, texture, x, y, u, v, width, height); } - @Inject(at = @At("HEAD"), method = "renderInGameBackground", cancellable = true) - public void blur$rotatedGradient(DrawContext context, CallbackInfo ci) { + @WrapOperation(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;fillGradient(IIIIII)V"), method = "renderInGameBackground") + public void blur$rotatedGradient(DrawContext context, int startX, int startY, int endX, int endY, int colorStart, int colorEnd, Operation original) { + blur$renderGradient(context); + } + @Unique + private void blur$renderGradient(DrawContext context) { + BlurInfo.screenHasBackground = true; // Test if the screen has a background if (BlurConfig.forceEnabledScreens.contains(this.getClass().getCanonicalName())) - ((ScreenAccessor)this).forceApplyBlur(); + this.applyBlur(); Blur.renderRotatedGradient(context, width, height); // Replaces the default gradient with our rotated one - ci.cancel(); } } From 552f1e619e42d3e0fe3a4977a83e9196cd21ea91 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sat, 29 Mar 2025 19:30:38 +0100 Subject: [PATCH 12/18] feat: improve config screen with comments --- .../midnightdust/blur/config/BlurConfig.java | 36 ++++++++++++------- .../resources/assets/blur/lang/de_de.json | 8 ++++- .../resources/assets/blur/lang/en_us.json | 7 +++- 3 files changed, 37 insertions(+), 14 deletions(-) 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 6124019..fc09156 100644 --- a/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java +++ b/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java @@ -15,6 +15,8 @@ public class BlurConfig extends MidnightConfig { public static final String SCREENS = "screens"; @Entry @Hidden public static int configVersion = 2; + @Comment(category = SCREENS, centered = true) + public static Comment _general; @Entry(category = SCREENS) public static boolean blurContainers = true; @Entry(category = SCREENS) @@ -22,14 +24,21 @@ public class BlurConfig extends MidnightConfig { @Condition(requiredOption = "blurTitleScreen", visibleButLocked = true) @Entry(category = SCREENS) public static boolean darkenTitleScreen = false; - @Entry(category = ANIMATIONS, min = 0, max = 2000, isSlider = true) - public static int fadeTimeMillis = 300; - @Entry(category = ANIMATIONS, min = 0, max = 2000, isSlider = true) - public static int fadeOutTimeMillis = 300; - @Entry(category = ANIMATIONS) - public static BlurConfig.Easing animationCurve = Easing.FLAT; + @Comment(category = SCREENS, centered = true) + public static Comment _advanced; + @Entry(category = SCREENS) // Screens where Blur+ should not apply transition effects (mostly dynamically blurred screens) + public static List excludedScreens = Lists.newArrayList("net.irisshaders.iris.gui.screen.ShaderPackScreen"); + @Entry(category = SCREENS) // Screens where the vanilla blur effect should be force enabled + public static List forceEnabledScreens = Lists.newArrayList("dev.emi.emi.screen.RecipeScreen"); + @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) public static boolean useGradient = true; @Condition(requiredOption = "useGradient", visibleButLocked = true) @@ -49,12 +58,15 @@ public class BlurConfig extends MidnightConfig { public static int gradientRotation = 0; @Entry(category = STYLE) public static boolean rainbowMode = false; - @Entry(category = SCREENS) // Screens where Blur+ should not apply transition effects (mostly dynamically blurred screens) - public static List excludedScreens = Lists.newArrayList("net.irisshaders.iris.gui.screen.ShaderPackScreen"); - @Entry(category = SCREENS) // Screens where the vanilla blur effect should be force enabled - public static List forceEnabledScreens = Lists.newArrayList("dev.emi.emi.screen.RecipeScreen"); - @Entry(category = SCREENS) // Screens where the vanilla blur effect should be force disabled - public static List forceDisabledScreens = Lists.newArrayList(); + + @Comment(category = ANIMATIONS, centered = true) + public static Comment _animations; + @Entry(category = ANIMATIONS, min = 0, max = 2000, isSlider = true) + public static int fadeTimeMillis = 300; + @Entry(category = ANIMATIONS, min = 0, max = 2000, isSlider = true) + public static int fadeOutTimeMillis = 300; + @Entry(category = ANIMATIONS) + public static BlurConfig.Easing animationCurve = Easing.FLAT; @Override public void writeChanges(String modid) { 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 d823d78..45acbd4 100644 --- a/common/src/main/resources/assets/blur/lang/de_de.json +++ b/common/src/main/resources/assets/blur/lang/de_de.json @@ -1,6 +1,7 @@ { "blur.midnightconfig.title": "Blur+ Konfiguration", "blur.midnightconfig.category.animations": "Animationen", + "blur.midnightconfig.category.screens": "Bildschirme", "blur.midnightconfig.category.style": "Stil", "blur.midnightconfig.blurContainers": "Unschärfe in Containern", "blur.midnightconfig.blurTitleScreen": "Unschärfe im Titelbildschirm", @@ -26,5 +27,10 @@ "blur.midnightconfig.gradientStartAlpha": "Farbverlauf-Anfangstransparenz", "blur.midnightconfig.gradientEndAlpha": "Farbverlauf-Endstransparenz", "blur.midnightconfig.gradientRotation": "Farbverlauf-Rotation", - "blur.midnightconfig.excludedScreens": "Ausgeschlossene Bildschirme" + "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" } \ 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 898155b..2ae4ead 100755 --- a/common/src/main/resources/assets/blur/lang/en_us.json +++ b/common/src/main/resources/assets/blur/lang/en_us.json @@ -33,5 +33,10 @@ "blur.midnightconfig.forceEnabledScreens": "Force-enabled Screens", "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.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" } \ No newline at end of file From 528958fa8c19299de08dcce38fd3b2d734414ed5 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Sat, 19 Apr 2025 09:58:54 +0200 Subject: [PATCH 13/18] fix: improve gradient handling --- .../main/java/eu/midnightdust/blur/Blur.java | 21 +++++++++++-------- .../blur/mixin/MixinHandledScreen.java | 2 +- .../midnightdust/blur/mixin/MixinScreen.java | 4 +++- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/common/src/main/java/eu/midnightdust/blur/Blur.java b/common/src/main/java/eu/midnightdust/blur/Blur.java index 72b788b..af5f62f 100644 --- a/common/src/main/java/eu/midnightdust/blur/Blur.java +++ b/common/src/main/java/eu/midnightdust/blur/Blur.java @@ -23,20 +23,19 @@ public class Blur { public static boolean doFade = false; - static float lastDelta; - public static void onRender(DrawContext context, int width, int height, MinecraftClient client, float delta) { + public static void onRender() { if (!BlurInfo.doTest && BlurInfo.screenChanged) { // After the tests for blur and background color have been completed Blur.onScreenChange(); BlurInfo.screenChanged = false; } - + BlurInfo.doTest = false; // Set the test state to completed, as tests will happen in the same tick. + } + public static void renderFadeout(DrawContext context, int width, int height, MinecraftClient client) { if (BlurInfo.start >= 0 && !BlurInfo.screenHasBlur && BlurInfo.prevScreenHasBlur) { // Fade out in non-blurred screens client.gameRenderer.renderBlur(); - if (BlurInfo.prevScreenHasBackground && BlurConfig.useGradient && lastDelta != delta) Blur.renderRotatedGradient(context, width, height); - lastDelta = delta; + if (BlurInfo.prevScreenHasBackground && BlurConfig.useGradient) Blur.renderRotatedGradient(context, width, height); } - BlurInfo.doTest = false; // Set the test state to completed, as tests will happen in the same tick. } public static void onScreenChange() { @@ -79,7 +78,10 @@ public class Blur { int b = (col.getRGB() >> 8) & 0xFF; int g = col.getRGB() & 0xFF; float prog = progress; - a *= prog; r *= prog; g *= prog; b *= prog; + a = (int) (prog * a); + r = (int) (prog * r); + g = (int) (prog * g); + b = (int) (prog * b); return a << 24 | r << 16 | b << 8 | g; } public static int getRotation() { @@ -90,11 +92,12 @@ public class Blur { float diagonal = Math.sqrt((float) width*width + height*height); int smallestDimension = Math.min(width, height); + context.getMatrices().push(); Matrix4f posMatrix = context.getMatrices().peek().getPositionMatrix(); posMatrix.rotationZ(Math.toRadians(getRotation())); - posMatrix.setTranslation(width / 2f, height / 2f, 0); // Make the gradient's center the pivot point + posMatrix.setTranslation(width / 2f, height / 2f, -1); // Make the gradient's center the pivot point posMatrix.scale(diagonal / smallestDimension); // Scales the gradient to the maximum diagonal value needed context.fillGradient(-width / 2, -height / 2, width / 2, height / 2, Blur.getBackgroundColor(false), Blur.getBackgroundColor(true)); // Actually draw the gradient - posMatrix.rotationZ(0); + context.getMatrices().pop(); } } diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java index 052b33d..4e73fc7 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java @@ -24,6 +24,6 @@ public class MixinHandledScreen extends Screen { } @Inject(at = @At("HEAD"), method = "render") public void blur$processScreenChange(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { - if (PlatformFunctions.getPlatformName().equals("neoforge")) Blur.onRender(context, width, height, this.client, delta); + if (PlatformFunctions.getPlatformName().equals("neoforge")) Blur.onRender(); } } diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java index 8d8899d..9a872e2 100755 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java @@ -30,8 +30,10 @@ public abstract class MixinScreen { @Inject(at = @At("HEAD"), method = "render") public void blur$processScreenChange(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { - Blur.onRender(context, width, height, this.client, delta); + Blur.onRender(); + Blur.renderFadeout(context, width, height, client); } + @Inject(at = @At("HEAD"), method = "applyBlur", cancellable = true) public void blur$getBlurEnabled(CallbackInfo ci) { if (BlurConfig.forceDisabledScreens.contains(this.getClass().getCanonicalName())) { From fa6fd82e4ddd05d4ffb0108aed71d5df5fb6f723 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Wed, 23 Apr 2025 10:18:55 +0200 Subject: [PATCH 14/18] fix: move gradient z-coordinate further back --- common/src/main/java/eu/midnightdust/blur/Blur.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/eu/midnightdust/blur/Blur.java b/common/src/main/java/eu/midnightdust/blur/Blur.java index af5f62f..d144cd1 100644 --- a/common/src/main/java/eu/midnightdust/blur/Blur.java +++ b/common/src/main/java/eu/midnightdust/blur/Blur.java @@ -95,7 +95,7 @@ public class Blur { context.getMatrices().push(); Matrix4f posMatrix = context.getMatrices().peek().getPositionMatrix(); posMatrix.rotationZ(Math.toRadians(getRotation())); - posMatrix.setTranslation(width / 2f, height / 2f, -1); // Make the gradient's center the pivot point + posMatrix.setTranslation(width / 2f, height / 2f, -1000); // Make the gradient's center the pivot point posMatrix.scale(diagonal / smallestDimension); // Scales the gradient to the maximum diagonal value needed context.fillGradient(-width / 2, -height / 2, width / 2, height / 2, Blur.getBackgroundColor(false), Blur.getBackgroundColor(true)); // Actually draw the gradient context.getMatrices().pop(); From bc62322743d759c49c326f3a63e99b83c7606b13 Mon Sep 17 00:00:00 2001 From: Texaliuz <152565569+Texaliuz@users.noreply.github.com> Date: Mon, 28 Apr 2025 13:28:55 -0300 Subject: [PATCH 15/18] Create es_ar.json Translation to Argentine Spanish (es_ar) for the Blur+ mod --- .../resources/assets/blur/lang/es_ar.json | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 common/src/main/resources/assets/blur/lang/es_ar.json diff --git a/common/src/main/resources/assets/blur/lang/es_ar.json b/common/src/main/resources/assets/blur/lang/es_ar.json new file mode 100644 index 0000000..53fda8b --- /dev/null +++ b/common/src/main/resources/assets/blur/lang/es_ar.json @@ -0,0 +1,41 @@ +{ + "blur.midnightconfig.title": "Configuración de Blur+", + "blur.midnightconfig.category.animations": "Animaciones", + "blur.midnightconfig.category.style": "Estilo", + "blur.midnightconfig.category.screens": "Pantallas", + + "blur.midnightconfig.blurContainers": "Aplicar Desenfoque a Contenedores", + "blur.midnightconfig.fadeTimeMillis": "Tiempo de Aparición (en milisegundos)", + "blur.midnightconfig.fadeOutTimeMillis": "Tiempo de Desaparición (en milisegundos)", + "blur.midnightconfig.animationCurve": "Curva de Animación", + + "blur.midnightconfig.enum.Easing.FLAT": "Plano", + "blur.midnightconfig.enum.Easing.SINE": "Seno", + "blur.midnightconfig.enum.Easing.QUAD": "Cuadrática", + "blur.midnightconfig.enum.Easing.CUBIC": "Cúbica", + "blur.midnightconfig.enum.Easing.QUART": "Cuártica", + "blur.midnightconfig.enum.Easing.QUINT": "Quíntica", + "blur.midnightconfig.enum.Easing.EXPO": "Exponencial", + "blur.midnightconfig.enum.Easing.CIRC": "Circular", + "blur.midnightconfig.enum.Easing.BACK": "Retroceso", + "blur.midnightconfig.enum.Easing.ELASTIC": "Elástica", + + "blur.midnightconfig.radius": "Radio", + "blur.midnightconfig.rainbowMode": "Modo Arcoíris \ud83c\udf08", + + "blur.midnightconfig.useGradient": "Usar Gradiente como Fondo", + "blur.midnightconfig.gradientStart": "Color Inicial del Gradiente", + "blur.midnightconfig.gradientEnd": "Color Final del Gradiente", + "blur.midnightconfig.gradientStartAlpha": "Transparencia Inicial del Gradiente", + "blur.midnightconfig.gradientEndAlpha": "Transparencia Final del Gradiente", + "blur.midnightconfig.gradientRotation": "Rotación del Gradiente", + + "blur.midnightconfig.excludedScreens": "Pantallas Excluidas", + "blur.midnightconfig.excludedScreens.tooltip": "Pantallas donde Blur+ no debería animar", + + "blur.midnightconfig.forceEnabledScreens": "Pantallas con Blur Forzado", + "blur.midnightconfig.forceEnabledScreens.tooltip": "Pantallas donde el desenfoque vanilla debería forzarse habilitado\nPuede que no funcione siempre al 100%", + + "blur.midnightconfig.forceDisabledScreens": "Pantallas con Blur Deshabilitado", + "blur.midnightconfig.forceDisabledScreens.tooltip": "Pantallas donde el desenfoque vanilla debería forzarse deshabilitado" +} From 5e4f4abd3b7ce2b195b6c9ce54096e963fe30a2f Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Wed, 14 May 2025 10:14:01 +0200 Subject: [PATCH 16/18] 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 From 7d207e8197302def4759b41089400aaad88c0234 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Tue, 17 Jun 2025 19:13:41 +0200 Subject: [PATCH 17/18] port: Chase the Skies (1.21.6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Surprising amount of changes – even more surprised I got this working so fast :) --- build.gradle | 2 +- .../src/main/java/eu/midnightdust/blur/Blur.java | 12 ++++++------ .../blur/mixin/MixinGameOptions.java | 2 +- .../blur/mixin/MixinGameRenderer.java | 11 +++++++---- .../blur/mixin/MixinHandledScreen.java | 2 +- .../midnightdust/blur/mixin/MixinInGameHud.java | 2 +- .../eu/midnightdust/blur/mixin/MixinScreen.java | 4 ++-- .../blur/mixin/MixinTitleScreen.java | 6 +++--- .../midnightdust/blur/mixin/ScreenAccessor.java | 11 ----------- common/src/main/resources/blur.mixins.json | 3 +-- gradle.properties | 16 ++++++++-------- gradle/wrapper/gradle-wrapper.properties | 2 +- 12 files changed, 32 insertions(+), 41 deletions(-) delete mode 100644 common/src/main/java/eu/midnightdust/blur/mixin/ScreenAccessor.java diff --git a/build.gradle b/build.gradle index a3292bb..35ec41f 100755 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ import groovy.json.JsonOutput plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "1.7-SNAPSHOT" apply false + id "dev.architectury.loom" version "1.10-SNAPSHOT" apply false id "me.shedaniel.unified-publishing" version "0.1.+" apply false id 'com.github.johnrengelman.shadow' version '8.1.1' apply false } diff --git a/common/src/main/java/eu/midnightdust/blur/Blur.java b/common/src/main/java/eu/midnightdust/blur/Blur.java index d144cd1..8f0acba 100644 --- a/common/src/main/java/eu/midnightdust/blur/Blur.java +++ b/common/src/main/java/eu/midnightdust/blur/Blur.java @@ -6,7 +6,7 @@ import eu.midnightdust.lib.util.MidnightColorUtil; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import org.joml.Math; -import org.joml.Matrix4f; +import org.joml.Matrix3x2f; import java.awt.Color; import java.lang.Double; @@ -92,12 +92,12 @@ public class Blur { float diagonal = Math.sqrt((float) width*width + height*height); int smallestDimension = Math.min(width, height); - context.getMatrices().push(); - Matrix4f posMatrix = context.getMatrices().peek().getPositionMatrix(); - posMatrix.rotationZ(Math.toRadians(getRotation())); - posMatrix.setTranslation(width / 2f, height / 2f, -1000); // Make the gradient's center the pivot point + context.getMatrices().pushMatrix(); + Matrix3x2f posMatrix = context.getMatrices(); + posMatrix.rotate(Math.toRadians(getRotation())); + posMatrix.setTranslation(width / 2f, height / 2f); // Make the gradient's center the pivot point posMatrix.scale(diagonal / smallestDimension); // Scales the gradient to the maximum diagonal value needed context.fillGradient(-width / 2, -height / 2, width / 2, height / 2, Blur.getBackgroundColor(false), Blur.getBackgroundColor(true)); // Actually draw the gradient - context.getMatrices().pop(); + context.getMatrices().popMatrix(); } } diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameOptions.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameOptions.java index ec7720e..19d54f7 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameOptions.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameOptions.java @@ -13,7 +13,7 @@ public abstract class MixinGameOptions { @Shadow @Final private SimpleOption menuBackgroundBlurriness; @Shadow @Final private SimpleOption chatLineSpacing; - @Redirect(method = "", at = @At(value = "NEW", target = "net/minecraft/client/option/SimpleOption$ValidatingIntSliderCallbacks", ordinal = 2)) + @Redirect(method = "", at = @At(value = "NEW", target = "net/minecraft/client/option/SimpleOption$ValidatingIntSliderCallbacks", ordinal = 3)) private SimpleOption.ValidatingIntSliderCallbacks blur$increaseMaxBlurriness(int minInclusive, int maxInclusive) { if (this.menuBackgroundBlurriness == null && this.chatLineSpacing != null) return new SimpleOption.ValidatingIntSliderCallbacks(minInclusive, 20); diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java index b6c969b..c6f1004 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java @@ -1,18 +1,21 @@ package eu.midnightdust.blur.mixin; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import eu.midnightdust.blur.Blur; import eu.midnightdust.blur.BlurInfo; +import net.minecraft.client.option.GameOptions; import net.minecraft.client.render.GameRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyVariable; @Mixin(GameRenderer.class) public class MixinGameRenderer { - @ModifyVariable(method = "renderBlur", at = @At("STORE"), ordinal = 0) - private float blur$modifyRadius(float radius) { // Modify the radius based on the animation progress + @WrapOperation(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/option/GameOptions;getMenuBackgroundBlurrinessValue()I")) + private int blur$modifyRadius(GameOptions instance, Operation original) { + int radius = instance.getMenuBackgroundBlurrinessValue(); if (!BlurInfo.screenChanged && BlurInfo.start >= 0) // Only update the progress after all tests have been completed Blur.updateProgress(BlurInfo.screenHasBlur); - return radius * BlurInfo.progress; + return (int) (radius * BlurInfo.progress); } } diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java index 4e73fc7..53599c0 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java @@ -20,7 +20,7 @@ public class MixinHandledScreen extends Screen { @Inject(method = "renderBackground", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ingame/HandledScreen;drawBackground(Lnet/minecraft/client/gui/DrawContext;FII)V", shift = At.Shift.BEFORE)) private void blur$renderContainerBlur(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { // Applies the blur effect in containers (Inventory, Chest, etc.) - if (BlurConfig.blurContainers) this.applyBlur(); + if (BlurConfig.blurContainers) this.applyBlur(context); } @Inject(at = @At("HEAD"), method = "render") public void blur$processScreenChange(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java index f94e155..9202257 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java @@ -22,7 +22,7 @@ public class MixinInGameHud { if (client.currentScreen == null && client.world != null && BlurInfo.start >= 0 && BlurInfo.prevScreenHasBlur) { BlurInfo.doTest = false; BlurInfo.screenChanged = false; - this.client.gameRenderer.renderBlur(); + context.applyBlur(); if (BlurInfo.prevScreenHasBackground) Blur.renderRotatedGradient(context, client.getWindow().getScaledWidth(), client.getWindow().getScaledHeight()); } diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java index 9a872e2..60bf8fa 100755 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java @@ -26,7 +26,7 @@ public abstract class MixinScreen { @Shadow protected MinecraftClient client; @Shadow public int width; @Shadow public int height; - @Shadow protected abstract void applyBlur(); + @Shadow protected abstract void applyBlur(DrawContext context); @Inject(at = @At("HEAD"), method = "render") public void blur$processScreenChange(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { @@ -58,7 +58,7 @@ public abstract class MixinScreen { private void blur$renderGradient(DrawContext context) { BlurInfo.screenHasBackground = true; // Test if the screen has a background if (BlurConfig.forceEnabledScreens.contains(this.getClass().getCanonicalName())) - this.applyBlur(); + this.applyBlur(context); Blur.renderRotatedGradient(context, width, height); // Replaces the default gradient with our rotated one } diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinTitleScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinTitleScreen.java index 5d6447e..00d37bf 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinTitleScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinTitleScreen.java @@ -17,11 +17,11 @@ public abstract class MixinTitleScreen extends Screen { super(title); } - @Inject(method = "renderPanoramaBackground", at = @At("TAIL")) - private void blur$renderTitleBlur(DrawContext context, float delta, CallbackInfo ci) { // Applies the blur effect in containers (Inventory, Chest, etc.) + @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/TitleScreen;renderPanoramaBackground(Lnet/minecraft/client/gui/DrawContext;F)V")) + private void blur$renderTitleBlur(DrawContext context, int mouseX, int mouseY, float deltaTicks, CallbackInfo ci) { if (BlurConfig.blurTitleScreen) { Blur.updateProgress(true); - this.applyBlur(); + this.applyBlur(context); if (BlurConfig.darkenTitleScreen) this.renderDarkening(context); } } diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/ScreenAccessor.java b/common/src/main/java/eu/midnightdust/blur/mixin/ScreenAccessor.java deleted file mode 100644 index ae04baf..0000000 --- a/common/src/main/java/eu/midnightdust/blur/mixin/ScreenAccessor.java +++ /dev/null @@ -1,11 +0,0 @@ -package eu.midnightdust.blur.mixin; - -import net.minecraft.client.gui.screen.Screen; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; - -@Mixin(Screen.class) -public interface ScreenAccessor { - @Invoker("applyBlur") - void forceApplyBlur(); -} diff --git a/common/src/main/resources/blur.mixins.json b/common/src/main/resources/blur.mixins.json index f06f431..f583583 100644 --- a/common/src/main/resources/blur.mixins.json +++ b/common/src/main/resources/blur.mixins.json @@ -10,8 +10,7 @@ "MixinInGameHud", "MixinMinecraftClient", "MixinScreen", - "MixinTitleScreen", - "ScreenAccessor" + "MixinTitleScreen" ], "injectors": { "defaultRequire": 1 diff --git a/gradle.properties b/gradle.properties index 90754a7..d7ebdc2 100755 --- a/gradle.properties +++ b/gradle.properties @@ -2,13 +2,13 @@ org.gradle.jvmargs=-Xmx2G org.gradle.parallel=true -minecraft_version=1.21.4 -supported_versions=1.21.5 -yarn_mappings=1.21.4+build.1 +minecraft_version=1.21.6 +supported_versions= +yarn_mappings=1.21.6+build.1 enabled_platforms=fabric,neoforge # Mod Properties -mod_version=5.2.1 +mod_version=5.2.2 maven_group=eu.midnightdust.blur archives_base_name=blur release_type=release @@ -16,12 +16,12 @@ curseforge_id=393563 modrinth_id=NK39zBp2 # Modloaders -fabric_loader_version=0.16.9 -fabric_api_version=0.111.0+1.21.4 +fabric_loader_version=0.16.14 +fabric_api_version=0.127.0+1.21.6 -neoforge_version=21.4.10-beta +neoforge_version=21.6.0-beta yarn_mappings_patch_neoforge_version = 1.21+build.4 # Libraries -midnightlib_version = 1.7.3+1.21.4 +midnightlib_version = 1.7.4+1.21.6 modmenu_version = 11.0.2 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e4a5f61..e0246c0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 06876d98e441a04c29c464e55d6b0a25d62a1ec6 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Tue, 15 Jul 2025 18:43:59 +0200 Subject: [PATCH 18/18] backport: adjust for 1.21.1 phew... --- common/src/main/java/eu/midnightdust/blur/Blur.java | 5 +++-- .../eu/midnightdust/blur/mixin/MixinGameOptions.java | 2 +- .../eu/midnightdust/blur/mixin/MixinGameRenderer.java | 11 ++++------- .../midnightdust/blur/mixin/MixinHandledScreen.java | 4 ++-- .../eu/midnightdust/blur/mixin/MixinInGameHud.java | 3 ++- .../java/eu/midnightdust/blur/mixin/MixinScreen.java | 2 -- .../eu/midnightdust/blur/mixin/MixinTitleScreen.java | 6 +++--- fabric/src/main/resources/fabric.mod.json | 4 ++-- gradle.properties | 2 +- .../eu/midnightdust/blur/neoforge/BlurNeoForge.java | 2 +- .../src/main/resources/META-INF/neoforge.mods.toml | 4 ++-- 11 files changed, 21 insertions(+), 24 deletions(-) diff --git a/common/src/main/java/eu/midnightdust/blur/Blur.java b/common/src/main/java/eu/midnightdust/blur/Blur.java index ef00133..a0c6b4a 100644 --- a/common/src/main/java/eu/midnightdust/blur/Blur.java +++ b/common/src/main/java/eu/midnightdust/blur/Blur.java @@ -6,7 +6,7 @@ import eu.midnightdust.lib.util.MidnightColorUtil; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import org.joml.Math; -import org.joml.Matrix3x2f; +import org.joml.Matrix4f; import java.awt.Color; import java.lang.Double; @@ -32,7 +32,8 @@ public class Blur { } public static void renderFadeout(DrawContext context, int width, int height, MinecraftClient client) { if (BlurInfo.start >= 0 && !BlurInfo.screenHasBlur && BlurInfo.prevScreenHasBlur) { // Fade out in non-blurred screens - client.gameRenderer.renderBlur(); + client.gameRenderer.renderBlur(client.getRenderTickCounter().getTickDelta(true)); + client.getFramebuffer().beginWrite(false); if (BlurInfo.prevScreenHasBackground && BlurConfig.useGradient) Blur.renderRotatedGradient(context, width, height); } diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameOptions.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameOptions.java index 19d54f7..ec7720e 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameOptions.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameOptions.java @@ -13,7 +13,7 @@ public abstract class MixinGameOptions { @Shadow @Final private SimpleOption menuBackgroundBlurriness; @Shadow @Final private SimpleOption chatLineSpacing; - @Redirect(method = "", at = @At(value = "NEW", target = "net/minecraft/client/option/SimpleOption$ValidatingIntSliderCallbacks", ordinal = 3)) + @Redirect(method = "", at = @At(value = "NEW", target = "net/minecraft/client/option/SimpleOption$ValidatingIntSliderCallbacks", ordinal = 2)) private SimpleOption.ValidatingIntSliderCallbacks blur$increaseMaxBlurriness(int minInclusive, int maxInclusive) { if (this.menuBackgroundBlurriness == null && this.chatLineSpacing != null) return new SimpleOption.ValidatingIntSliderCallbacks(minInclusive, 20); diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java index c6f1004..8ec9aad 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java @@ -1,21 +1,18 @@ package eu.midnightdust.blur.mixin; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import eu.midnightdust.blur.Blur; import eu.midnightdust.blur.BlurInfo; -import net.minecraft.client.option.GameOptions; import net.minecraft.client.render.GameRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; @Mixin(GameRenderer.class) public class MixinGameRenderer { - @WrapOperation(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/option/GameOptions;getMenuBackgroundBlurrinessValue()I")) - private int blur$modifyRadius(GameOptions instance, Operation original) { - int radius = instance.getMenuBackgroundBlurrinessValue(); + @ModifyVariable(method = "renderBlur", at = @At("STORE"), ordinal = 1) + private float blur$modifyRadius(float radius) { // Modify the radius based on the animation progress if (!BlurInfo.screenChanged && BlurInfo.start >= 0) // Only update the progress after all tests have been completed Blur.updateProgress(BlurInfo.screenHasBlur); - return (int) (radius * BlurInfo.progress); + return radius * BlurInfo.progress; } } diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java index 53599c0..6ac904b 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java @@ -19,8 +19,8 @@ public class MixinHandledScreen extends Screen { } @Inject(method = "renderBackground", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ingame/HandledScreen;drawBackground(Lnet/minecraft/client/gui/DrawContext;FII)V", shift = At.Shift.BEFORE)) - private void blur$renderContainerBlur(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { // Applies the blur effect in containers (Inventory, Chest, etc.) - if (BlurConfig.blurContainers) this.applyBlur(context); + private void blur$renderContainerBlur(DrawContext context, int mouseX, int mouseY, float tickDelta, CallbackInfo ci) { // Applies the blur effect in containers (Inventory, Chest, etc.) + if (BlurConfig.blurContainers) this.applyBlur(tickDelta); } @Inject(at = @At("HEAD"), method = "render") public void blur$processScreenChange(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java index 9202257..966498c 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java @@ -22,7 +22,8 @@ public class MixinInGameHud { if (client.currentScreen == null && client.world != null && BlurInfo.start >= 0 && BlurInfo.prevScreenHasBlur) { BlurInfo.doTest = false; BlurInfo.screenChanged = false; - context.applyBlur(); + this.client.gameRenderer.renderBlur(tickCounter.getTickDelta(true)); + this.client.getFramebuffer().beginWrite(false); if (BlurInfo.prevScreenHasBackground) Blur.renderRotatedGradient(context, client.getWindow().getScaledWidth(), client.getWindow().getScaledHeight()); } diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java index c5da7ce..fdd17ce 100755 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java @@ -26,8 +26,6 @@ public abstract class MixinScreen { @Shadow protected MinecraftClient client; @Shadow public int width; @Shadow public int height; - @Shadow protected abstract void applyBlur(DrawContext context); - @Shadow protected abstract void applyBlur(float delta); @Inject(at = @At("HEAD"), method = "render") diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinTitleScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinTitleScreen.java index 00d37bf..6f87266 100644 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinTitleScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinTitleScreen.java @@ -17,11 +17,11 @@ public abstract class MixinTitleScreen extends Screen { super(title); } - @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/TitleScreen;renderPanoramaBackground(Lnet/minecraft/client/gui/DrawContext;F)V")) - private void blur$renderTitleBlur(DrawContext context, int mouseX, int mouseY, float deltaTicks, CallbackInfo ci) { + @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/TitleScreen;renderPanoramaBackground(Lnet/minecraft/client/gui/DrawContext;F)V", shift = At.Shift.AFTER)) + private void blur$renderTitleBlur(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { if (BlurConfig.blurTitleScreen) { Blur.updateProgress(true); - this.applyBlur(context); + this.applyBlur(delta); if (BlurConfig.darkenTitleScreen) this.renderDarkening(context); } } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 9331400..e831a43 100755 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -33,7 +33,7 @@ "blur.mixins.json" ], "depends": { - "minecraft": ">=1.21.2", - "midnightlib": ">=1.7.3" + "minecraft": ">=1.21", + "midnightlib": ">=1.7.5" } } diff --git a/gradle.properties b/gradle.properties index b07520f..81d117a 100755 --- a/gradle.properties +++ b/gradle.properties @@ -19,7 +19,7 @@ modrinth_id=NK39zBp2 fabric_loader_version=0.16.13 fabric_api_version=0.115.4+1.21.1 -neoforge_version=21.1.153 +neoforge_version=21.1.192 yarn_mappings_patch_neoforge_version = 1.21+build.4 # Libraries diff --git a/neoforge/src/main/java/eu/midnightdust/blur/neoforge/BlurNeoForge.java b/neoforge/src/main/java/eu/midnightdust/blur/neoforge/BlurNeoForge.java index 85e6e0f..862a58c 100644 --- a/neoforge/src/main/java/eu/midnightdust/blur/neoforge/BlurNeoForge.java +++ b/neoforge/src/main/java/eu/midnightdust/blur/neoforge/BlurNeoForge.java @@ -14,7 +14,7 @@ public class BlurNeoForge { Blur.init(); } - @EventBusSubscriber(modid = Blur.MOD_ID, bus = EventBusSubscriber.Bus.GAME, value = Dist.CLIENT) + @EventBusSubscriber(modid = Blur.MOD_ID, value = Dist.CLIENT) public static class ClientGameEvents { @SubscribeEvent public static void endClientTick(ClientTickEvent.Post event) { diff --git a/neoforge/src/main/resources/META-INF/neoforge.mods.toml b/neoforge/src/main/resources/META-INF/neoforge.mods.toml index 1bf80e2..1059d97 100644 --- a/neoforge/src/main/resources/META-INF/neoforge.mods.toml +++ b/neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -26,13 +26,13 @@ side = "CLIENT" [[dependencies.blur]] modId = "minecraft" mandatory = true -versionRange = "[1.21.2,)" +versionRange = "[1.21,1.21.1]" ordering = "NONE" side = "CLIENT" [[dependencies.blur]] modId = "midnightlib" mandatory = true -versionRange = "[1.7.3,)" +versionRange = "[1.7.5,)" ordering = "NONE" side = "CLIENT" \ No newline at end of file