From 8817e18a551ef68b0f72197f98ffc52f7a72a8a1 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Fri, 6 Sep 2024 23:33:10 +0200 Subject: [PATCH] Increased max blur intensity & Working screen overrides - EMI compat now works using forced blur - Iris shader screen is now sooo much smoother --- common/build.gradle | 1 - .../java/eu/midnightdust/blur/BlurInfo.java | 6 +- .../midnightdust/blur/config/BlurConfig.java | 2 +- .../blur/mixin/BlurMixinPlugin.java | 57 ------------------- .../blur/mixin/MixinGameOptions.java | 22 +++++++ .../blur/mixin/MixinMinecraftClient.java | 3 +- .../midnightdust/blur/mixin/MixinScreen.java | 8 +-- .../blur/mixin/emi/MixinRecipeScreen.java | 25 -------- .../resources/assets/blur/lang/en_us.json | 7 ++- common/src/main/resources/blur.mixins.json | 3 +- .../main/resources/blur_compat.mixins.json | 12 ---- fabric/src/main/resources/fabric.mod.json | 3 +- gradle.properties | 2 - .../resources/META-INF/neoforge.mods.toml | 2 - 14 files changed, 41 insertions(+), 112 deletions(-) delete mode 100644 common/src/main/java/eu/midnightdust/blur/mixin/BlurMixinPlugin.java create mode 100644 common/src/main/java/eu/midnightdust/blur/mixin/MixinGameOptions.java delete mode 100644 common/src/main/java/eu/midnightdust/blur/mixin/emi/MixinRecipeScreen.java delete mode 100644 common/src/main/resources/blur_compat.mixins.json diff --git a/common/build.gradle b/common/build.gradle index 88ed66f..a1fca2a 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -7,7 +7,6 @@ dependencies { // Do NOT use other classes from fabric loader modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" modCompileOnly "maven.modrinth:midnightlib:${rootProject.midnightlib_version}-fabric" - modCompileOnly "maven.modrinth:emi:${rootProject.emi_version}+fabric" } publishing { diff --git a/common/src/main/java/eu/midnightdust/blur/BlurInfo.java b/common/src/main/java/eu/midnightdust/blur/BlurInfo.java index 2050542..1d3ead9 100644 --- a/common/src/main/java/eu/midnightdust/blur/BlurInfo.java +++ b/common/src/main/java/eu/midnightdust/blur/BlurInfo.java @@ -1,5 +1,8 @@ package eu.midnightdust.blur; +import eu.midnightdust.blur.config.BlurConfig; +import net.minecraft.client.gui.screen.Screen; + public class BlurInfo { public static long start; public static float progress; @@ -14,8 +17,9 @@ public class BlurInfo { public static boolean screenChanged = true; public static long lastScreenChange = System.currentTimeMillis(); - public static void reset() { + public static void reset(Screen newScreen) { // Here, we reset all tests, to check if the new screen has blur and/or a background + if (newScreen != null && BlurConfig.excludedScreens.contains(newScreen.getClass().getCanonicalName())) return; prevScreenHasBlur = screenHasBlur; prevScreenHasBackground = screenHasBackground; screenHasBlur = false; 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 d374f67..c65bddc 100644 --- a/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java +++ b/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java @@ -39,7 +39,7 @@ public class BlurConfig extends MidnightConfig { @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(); + 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(); diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/BlurMixinPlugin.java b/common/src/main/java/eu/midnightdust/blur/mixin/BlurMixinPlugin.java deleted file mode 100644 index 73aa8ee..0000000 --- a/common/src/main/java/eu/midnightdust/blur/mixin/BlurMixinPlugin.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright © 2021 LambdAurora - * - * This file is part of midnightcontrols. - * - * Licensed under the MIT license. For more information, - * see the LICENSE file. - */ - -package eu.midnightdust.blur.mixin; - -import eu.midnightdust.lib.util.PlatformFunctions; -import org.objectweb.asm.tree.ClassNode; -import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; -import org.spongepowered.asm.mixin.extensibility.IMixinInfo; - -import java.util.List; -import java.util.Set; - -public class BlurMixinPlugin implements IMixinConfigPlugin { - private String mixinPackage; - - @Override - public void onLoad(String mixinPackage) { - this.mixinPackage = mixinPackage + "."; - } - - @Override - public String getRefMapperConfig() { - return null; - } - - @Override - public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { - final String mixinName = mixinClassName.substring(this.mixinPackage.length()); - final String packageName = mixinName.substring(0, mixinName.lastIndexOf('.')); - - if (packageName.startsWith("emi") && !PlatformFunctions.isModLoaded("emi")) - return false; - - return true; - } - - @Override - public void acceptTargets(Set myTargets, Set otherTargets) {} - - @Override - public List getMixins() { - return null; - } - - @Override - public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {} - - @Override - public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {} -} diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameOptions.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameOptions.java new file mode 100644 index 0000000..ec7720e --- /dev/null +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameOptions.java @@ -0,0 +1,22 @@ +package eu.midnightdust.blur.mixin; + +import net.minecraft.client.option.GameOptions; +import net.minecraft.client.option.SimpleOption; +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.Redirect; + +@Mixin(GameOptions.class) +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)) + private SimpleOption.ValidatingIntSliderCallbacks blur$increaseMaxBlurriness(int minInclusive, int maxInclusive) { + if (this.menuBackgroundBlurriness == null && this.chatLineSpacing != null) + return new SimpleOption.ValidatingIntSliderCallbacks(minInclusive, 20); + return new SimpleOption.ValidatingIntSliderCallbacks(minInclusive, maxInclusive); + } +} diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/MixinMinecraftClient.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinMinecraftClient.java index d668eb7..f845b09 100755 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinMinecraftClient.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinMinecraftClient.java @@ -20,9 +20,8 @@ public class MixinMinecraftClient { opcode = Opcodes.PUTFIELD)) private void blur$onScreenOpen(Screen newScreen, CallbackInfo info) { if (BlurInfo.lastScreenChange < System.currentTimeMillis() - 100) { // For some reason, in certain scenarios the screen is set to a new one multiple times in a tick. We want to avoid that. - // Here, we reset all tests, to check if the new screen has blur and/or a background - BlurInfo.reset(); + BlurInfo.reset(newScreen); // Manually activate the onScreenChange method when all screens are closed (in-game) if (newScreen == null) Blur.onScreenChange(); 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 089b47d..e299c84 100755 --- a/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java @@ -45,10 +45,10 @@ public abstract class MixinScreen { } @Inject(at = @At("HEAD"), method = "applyBlur", cancellable = true) public void blur$getBlurEnabled(float delta, CallbackInfo ci) { - if (BlurConfig.forceDisabledScreens.contains(this.getClass().toString())) { + if (BlurConfig.forceDisabledScreens.contains(this.getClass().getCanonicalName())) { ci.cancel(); return; } - if (!BlurConfig.excludedScreens.contains(this.getClass().toString())) + if (!BlurConfig.excludedScreens.contains(this.getClass().getCanonicalName())) BlurInfo.screenHasBlur = true; // Test if the screen has blur } @@ -62,8 +62,8 @@ 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().toString())) - (((ScreenAccessor)this)).forceApplyBlur(client.getRenderTickCounter().getTickDelta(true)); // Applies the blur effect in force-enabled screens + if (BlurConfig.forceEnabledScreens.contains(this.getClass().getCanonicalName())) + ((ScreenAccessor)this).forceApplyBlur(client.getRenderTickCounter().getTickDelta(true)); 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/emi/MixinRecipeScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/emi/MixinRecipeScreen.java deleted file mode 100644 index 572baca..0000000 --- a/common/src/main/java/eu/midnightdust/blur/mixin/emi/MixinRecipeScreen.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.midnightdust.blur.mixin.emi; - -import dev.emi.emi.screen.RecipeScreen; -import eu.midnightdust.blur.config.BlurConfig; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -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(RecipeScreen.class) -public class MixinRecipeScreen extends Screen { - - protected MixinRecipeScreen(Text title) { - super(title); - } - - @Inject(at = @At("HEAD"), method = "render") - public void blur$addBlurEffect(DrawContext raw, int mouseX, int mouseY, float delta, CallbackInfo ci) { - if (BlurConfig.blurContainers) this.applyBlur(delta); - } - -} 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 9772ba8..ebc6c53 100755 --- a/common/src/main/resources/assets/blur/lang/en_us.json +++ b/common/src/main/resources/assets/blur/lang/en_us.json @@ -26,6 +26,9 @@ "blur.midnightconfig.gradientEndAlpha": "Gradient End Alpha", "blur.midnightconfig.gradientRotation": "Gradient Rotation", "blur.midnightconfig.excludedScreens": "Excluded Screens", - "blur.midnightconfig.forceEnabledScreens": "Screens where blur should be force-enabled", - "blur.midnightconfig.forceDisabledScreens": "Screens where blur should be force-disabled" + "blur.midnightconfig.excludedScreens.tooltip": "Screens that Blur+ should not animate", + "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" } \ 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 95d1835..bdf04c5 100644 --- a/common/src/main/resources/blur.mixins.json +++ b/common/src/main/resources/blur.mixins.json @@ -9,7 +9,8 @@ "MixinHandledScreen", "MixinMinecraftClient", "MixinGameRenderer", - "MixinInGameHud" + "MixinInGameHud", + "MixinGameOptions" ], "injectors": { "defaultRequire": 1 diff --git a/common/src/main/resources/blur_compat.mixins.json b/common/src/main/resources/blur_compat.mixins.json deleted file mode 100644 index 37082fd..0000000 --- a/common/src/main/resources/blur_compat.mixins.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "required": true, - "package": "eu.midnightdust.blur.mixin", - "plugin": "eu.midnightdust.blur.mixin.BlurMixinPlugin", - "compatibilityLevel": "JAVA_21", - "client": [ - "emi.MixinRecipeScreen" - ], - "injectors": { - "defaultRequire": 1 - } -} diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 470f881..5630459 100755 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -25,8 +25,7 @@ ], "description": "Various enhancements for the blur effect behind Minecraft GUIs", "mixins": [ - "blur.mixins.json", - "blur_compat.mixins.json" + "blur.mixins.json" ], "depends": { "minecraft": ">=1.20.5" diff --git a/gradle.properties b/gradle.properties index a22760f..a56c441 100755 --- a/gradle.properties +++ b/gradle.properties @@ -25,5 +25,3 @@ yarn_mappings_patch_neoforge_version = 1.21+build.4 # Libraries midnightlib_version = 1.6.3 modmenu_version = 11.0.2 - -emi_version=1.1.12+1.21 diff --git a/neoforge/src/main/resources/META-INF/neoforge.mods.toml b/neoforge/src/main/resources/META-INF/neoforge.mods.toml index b871078..e9c16bc 100644 --- a/neoforge/src/main/resources/META-INF/neoforge.mods.toml +++ b/neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -15,8 +15,6 @@ Various enhancements for the blur effect behind Minecraft GUIs [[mixins]] config = "blur.mixins.json" -[[mixins]] -config = "blur_compat.mixins.json" [[dependencies.blur]] modId = "neoforge"