diff --git a/.gitignore b/.gitignore index 52c7cf2..7f9474b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,29 +1,20 @@ -/download -/eclipseBin +build/ +*.ipr +run/ +*.iws +out/ +*.iml +.gradle/ +output/ +bin/ +libs/ -## gradle -/.gradle -/build - -## ForgeGradle -/run -/*.launch - -## eclipse -/eclipse -/.settings -/.metadata -/.classpath -/.project -/bin - -## intellij -/out -/.idea -/*.iml -/*.ipr -/*.iws -/atlassian-ide-plugin.xml - -## gedit -*~ +.classpath +.project +.idea/ +classes/ +.metadata +.vscode +.settings +*.launch +.architectury-transformer/debug.log diff --git a/build.gradle b/build.gradle index 2948a60..a3292bb 100755 --- a/build.gradle +++ b/build.gradle @@ -1,131 +1,73 @@ +import groovy.json.JsonSlurper +import groovy.json.JsonOutput + plugins { - id 'fabric-loom' version '1.6-SNAPSHOT' - id 'maven-publish' - id "me.shedaniel.unified-publishing" version "0.1.+" + id "architectury-plugin" version "3.4-SNAPSHOT" + id "dev.architectury.loom" version "1.7-SNAPSHOT" apply false + id "me.shedaniel.unified-publishing" version "0.1.+" apply false + id 'com.github.johnrengelman.shadow' version '8.1.1' apply false } -sourceCompatibility = JavaVersion.VERSION_21 -targetCompatibility = JavaVersion.VERSION_21 +architectury { + minecraft = rootProject.minecraft_version +} -archivesBaseName = project.archives_base_name -version = project.mod_version -group = project.maven_group - -repositories { - maven { - name = 'Ladysnake Mods' - url = 'https://maven.ladysnake.org/releases' - content { - includeGroup 'org.ladysnake' - includeGroupByRegex 'dev\\.onyxstudios.*' +subprojects { + apply plugin: "dev.architectury.loom" + repositories { + maven { + url = "https://api.modrinth.com/maven" } } - maven { - url = 'https://maven.terraformersmc.com/releases' - content { - includeGroup 'com.terraformersmc' - } - } - maven { - url = "https://api.modrinth.com/maven" - } - flatDir { - dirs("localMaven") - } -} -dependencies { - minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" - modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - - modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - //modImplementation "org.ladysnake:satin:${satin_version}" - //include "org.ladysnake:satin:${satin_version}" - - implementation 'com.google.code.findbugs:jsr305:3.0.2' - modImplementation "maven.modrinth:midnightlib:${project.midnightlib_version}" - include "maven.modrinth:midnightlib:${project.midnightlib_version}" -} - -processResources { - inputs.property "version", project.version - - filesMatching("fabric.mod.json") { - expand "version": project.version - } -} - -tasks.withType(JavaCompile).configureEach { - // Minecraft 1.20.5 upwards uses Java 21. - it.options.release = 21 -} - -java { - withSourcesJar() -} - -jar { - from "LICENSE" -} - -// configure the maven publication -publishing { - publications { - mavenJava(MavenPublication) { - from components.java + dependencies { + minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" + // The following line declares the yarn mappings you may select this one as well. + mappings loom.layered { + it.mappings("net.fabricmc:yarn:$rootProject.yarn_mappings:v2") + it.mappings("dev.architectury:yarn-mappings-patch-neoforge:$rootProject.yarn_mappings_patch_neoforge_version") } } } -ext { - releaseChangelog = { - def changes = new StringBuilder() - changes << "## Blur+ v$project.version for $project.minecraft_version\n[View the changelog](https://www.github.com/Motschen/Blur/commits/)" - def proc = "git log --max-count=1 --pretty=format:%s".execute() - proc.in.eachLine { line -> - def processedLine = line.toString() - if (!processedLine.contains("New translations") && !processedLine.contains("Merge") && !processedLine.contains("branch")) { - changes << "\n- ${processedLine.capitalize()}" +allprojects { + apply plugin: "java" + apply plugin: "architectury-plugin" + apply plugin: "maven-publish" + + archivesBaseName = rootProject.archives_base_name + version = rootProject.mod_version + group = rootProject.maven_group + + tasks.withType(JavaCompile) { + options.encoding = "UTF-8" + options.release = 21 + } + ext { + releaseChangelog = { + def changes = new StringBuilder() + changes << "## Blur+ v$project.version for $project.minecraft_version\n[View the changelog](https://www.github.com/Motschen/Blur/commits/)" + def proc = "git log --max-count=1 --pretty=format:%s".execute() + proc.in.eachLine { line -> + def processedLine = line.toString() + if (!processedLine.contains("New translations") && !processedLine.contains("Merge") && !processedLine.contains("branch")) { + changes << "\n- ${processedLine.capitalize()}" + } } + proc.waitFor() + return changes.toString() } - proc.waitFor() - return changes.toString() } -} - -unifiedPublishing { - project { - displayName = "Blur+ $project.version - Fabric $project.minecraft_version" - releaseType = "$project.release_type" - changelog = releaseChangelog() - gameVersions = [] - gameLoaders = ["fabric","quilt"] - mainPublication remapJar - relations { - includes { - curseforge = "midnightlib" - modrinth = "midnightlib" - } - } - - var CURSEFORGE_TOKEN = project.findProperty("CURSEFORGE_TOKEN") ?: System.getenv("CURSEFORGE_TOKEN") - if (CURSEFORGE_TOKEN != null) { - curseforge { - token = CURSEFORGE_TOKEN - id = rootProject.curseforge_id - gameVersions.addAll "Java 21", project.minecraft_version - } - } - - var MODRINTH_TOKEN = project.findProperty("MODRINTH_TOKEN") ?: System.getenv("MODRINTH_TOKEN") - if (MODRINTH_TOKEN != null) { - modrinth { - token = MODRINTH_TOKEN - id = rootProject.modrinth_id - version = "$project.version" - gameVersions.addAll project.minecraft_version + processResources { + // Minify json resources + doLast { + fileTree(dir: outputs.files.asPath, include: "**/*.json").each { + File file -> file.text = JsonOutput.toJson(new JsonSlurper().parse(file)) } } } -} \ No newline at end of file + + java { + withSourcesJar() + } +} diff --git a/common/build.gradle b/common/build.gradle new file mode 100644 index 0000000..88ed66f --- /dev/null +++ b/common/build.gradle @@ -0,0 +1,25 @@ +architectury { + common(rootProject.enabled_platforms.split(",")) +} + +dependencies { + // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin 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 { + publications { + mavenCommon(MavenPublication) { + artifactId = rootProject.archives_base_name + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + } +} diff --git a/src/main/java/eu/midnightdust/blur/Blur.java b/common/src/main/java/eu/midnightdust/blur/Blur.java similarity index 67% rename from src/main/java/eu/midnightdust/blur/Blur.java rename to common/src/main/java/eu/midnightdust/blur/Blur.java index c4936e3..c154b1a 100644 --- a/src/main/java/eu/midnightdust/blur/Blur.java +++ b/common/src/main/java/eu/midnightdust/blur/Blur.java @@ -3,36 +3,20 @@ package eu.midnightdust.blur; import eu.midnightdust.blur.config.BlurConfig; import eu.midnightdust.blur.util.RainbowColor; import eu.midnightdust.lib.util.MidnightColorUtil; -import net.fabricmc.api.ClientModInitializer; -import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.minecraft.client.gui.DrawContext; import org.joml.Math; +import org.joml.Matrix4f; -import java.awt.*; +import java.awt.Color; import java.lang.Double; +import static eu.midnightdust.blur.BlurInfo.*; import static eu.midnightdust.blur.util.RainbowColor.hue; import static eu.midnightdust.blur.util.RainbowColor.hue2; -public class Blur implements ClientModInitializer { - - public static long start; - public static float progress; - - public static boolean prevScreenHasBlur; - public static boolean screenHasBlur; - - public static boolean prevScreenHasBackground; - public static boolean screenHasBackground; - - public static boolean doTest = true; - public static boolean screenChanged = true; - public static long lastScreenChange = System.currentTimeMillis(); - - @Override - public void onInitializeClient() { +public class Blur { + public static void init() { BlurConfig.init("blur", BlurConfig.class); - ClientTickEvents.END_CLIENT_TICK.register(RainbowColor::tick); } public static boolean doFade = false; @@ -66,7 +50,7 @@ public class Blur implements ClientModInitializer { x = BlurConfig.animationCurve.apply(x, fadeIn); x = Math.clamp(0, 1, x); - Blur.progress = Double.valueOf(x).floatValue(); + progress = Double.valueOf(x).floatValue(); } public static int getBackgroundColor(boolean second) { @@ -91,10 +75,11 @@ public class Blur implements ClientModInitializer { float diagonal = Math.sqrt((float) width*width + height*height); int smallestDimension = Math.min(width, height); - context.getMatrices().peek().getPositionMatrix().rotationZ(Math.toRadians(getRotation())); - context.getMatrices().peek().getPositionMatrix().setTranslation(width / 2f, height / 2f, 0); // Make the gradient's center the pivot point - context.getMatrices().peek().getPositionMatrix().scale(diagonal / smallestDimension); // Scales the gradient to the maximum diagonal value needed + 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.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().peek().getPositionMatrix().rotationZ(0); + posMatrix.rotationZ(0); } } diff --git a/common/src/main/java/eu/midnightdust/blur/BlurInfo.java b/common/src/main/java/eu/midnightdust/blur/BlurInfo.java new file mode 100644 index 0000000..2050542 --- /dev/null +++ b/common/src/main/java/eu/midnightdust/blur/BlurInfo.java @@ -0,0 +1,28 @@ +package eu.midnightdust.blur; + +public class BlurInfo { + public static long start; + public static float progress; + + public static boolean prevScreenHasBlur; + public static boolean screenHasBlur; + + public static boolean prevScreenHasBackground; + public static boolean screenHasBackground; + + public static boolean doTest = true; + public static boolean screenChanged = true; + public static long lastScreenChange = System.currentTimeMillis(); + + public static void reset() { + // Here, we reset all tests, to check if the new screen has blur and/or a background + prevScreenHasBlur = screenHasBlur; + prevScreenHasBackground = screenHasBackground; + screenHasBlur = false; + screenHasBackground = false; + doTest = true; + screenChanged = true; + start = -1; + lastScreenChange = System.currentTimeMillis(); + } +} diff --git a/src/main/java/eu/midnightdust/blur/config/BlurConfig.java b/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java similarity index 84% rename from src/main/java/eu/midnightdust/blur/config/BlurConfig.java rename to common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java index 193c4e4..d374f67 100644 --- a/src/main/java/eu/midnightdust/blur/config/BlurConfig.java +++ b/common/src/main/java/eu/midnightdust/blur/config/BlurConfig.java @@ -11,9 +11,10 @@ import static java.lang.Math.*; public class BlurConfig extends MidnightConfig { public static final String ANIMATIONS = "animations"; public static final String STYLE = "style"; + public static final String SCREENS = "screens"; @Entry @Hidden public static int configVersion = 2; - @Entry(category = STYLE) + @Entry(category = SCREENS) public static boolean blurContainers = true; @Entry(category = ANIMATIONS, min = 0, max = 2000, isSlider = true) public static int fadeTimeMillis = 300; @@ -35,12 +36,16 @@ public class BlurConfig extends MidnightConfig { public static int gradientRotation = 0; @Entry(category = STYLE) public static boolean rainbowMode = false; - @Entry(category = STYLE) + @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(); + @Entry(category = SCREENS) // Screens where the vanilla blur effect should be force disabled + public static List forceDisabledScreens = Lists.newArrayList(); public enum Easing { // Based on https://gist.github.com/dev-hydrogen/21a66f83f0386123e0c0acf107254843 - // Thanks you very much! + // Thank you very much! FLAT(x -> x, x -> x), SINE(x -> 1 - cos(x * PI) / 2, x -> sin(x * PI) / 2), diff --git a/common/src/main/java/eu/midnightdust/blur/mixin/BlurMixinPlugin.java b/common/src/main/java/eu/midnightdust/blur/mixin/BlurMixinPlugin.java new file mode 100644 index 0000000..73aa8ee --- /dev/null +++ b/common/src/main/java/eu/midnightdust/blur/mixin/BlurMixinPlugin.java @@ -0,0 +1,57 @@ +/* + * 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/src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java similarity index 66% rename from src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java rename to common/src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java index da8131d..8ec9aad 100644 --- a/src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinGameRenderer.java @@ -1,6 +1,7 @@ package eu.midnightdust.blur.mixin; import eu.midnightdust.blur.Blur; +import eu.midnightdust.blur.BlurInfo; import net.minecraft.client.render.GameRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -10,8 +11,8 @@ import org.spongepowered.asm.mixin.injection.ModifyVariable; public class MixinGameRenderer { @ModifyVariable(method = "renderBlur", at = @At("STORE"), ordinal = 1) private float blur$modifyRadius(float radius) { // Modify the radius based on the animation progress - if (!Blur.screenChanged && Blur.start >= 0) // Only update the progress after all tests have been completed - Blur.updateProgress(Blur.screenHasBlur); - return radius * Blur.progress; + if (!BlurInfo.screenChanged && BlurInfo.start >= 0) // Only update the progress after all tests have been completed + Blur.updateProgress(BlurInfo.screenHasBlur); + return radius * BlurInfo.progress; } } diff --git a/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java similarity index 100% rename from src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java rename to common/src/main/java/eu/midnightdust/blur/mixin/MixinHandledScreen.java diff --git a/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java similarity index 76% rename from src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java rename to common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java index 3924da2..966498c 100644 --- a/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinInGameHud.java @@ -1,6 +1,7 @@ package eu.midnightdust.blur.mixin; import eu.midnightdust.blur.Blur; +import eu.midnightdust.blur.BlurInfo; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.InGameHud; @@ -18,13 +19,13 @@ public class MixinInGameHud { @Inject(at = @At("TAIL"), method = "render") public void blur$renderFadeOut(DrawContext context, RenderTickCounter tickCounter, CallbackInfo ci) { // Adds a fade-out effect when a player is in a world and closes all screens - if (client.currentScreen == null && client.world != null && Blur.start >= 0 && Blur.prevScreenHasBlur) { - Blur.doTest = false; - Blur.screenChanged = false; + 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.getFramebuffer().beginWrite(false); - if (Blur.prevScreenHasBackground) Blur.renderRotatedGradient(context, client.getWindow().getScaledWidth(), client.getWindow().getScaledHeight()); + if (BlurInfo.prevScreenHasBackground) Blur.renderRotatedGradient(context, client.getWindow().getScaledWidth(), client.getWindow().getScaledHeight()); } } } diff --git a/src/main/java/eu/midnightdust/blur/mixin/MixinMinecraftClient.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinMinecraftClient.java similarity index 65% rename from src/main/java/eu/midnightdust/blur/mixin/MixinMinecraftClient.java rename to common/src/main/java/eu/midnightdust/blur/mixin/MixinMinecraftClient.java index 1cd09fc..d668eb7 100755 --- a/src/main/java/eu/midnightdust/blur/mixin/MixinMinecraftClient.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinMinecraftClient.java @@ -1,6 +1,7 @@ package eu.midnightdust.blur.mixin; import eu.midnightdust.blur.Blur; +import eu.midnightdust.blur.BlurInfo; import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -18,17 +19,10 @@ public class MixinMinecraftClient { target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;", opcode = Opcodes.PUTFIELD)) private void blur$onScreenOpen(Screen newScreen, CallbackInfo info) { - if (Blur.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. + 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 - Blur.prevScreenHasBlur = Blur.screenHasBlur; - Blur.prevScreenHasBackground = Blur.screenHasBackground; - Blur.screenHasBlur = false; - Blur.screenHasBackground = false; - Blur.doTest = true; - Blur.screenChanged = true; - Blur.start = -1; - Blur.lastScreenChange = System.currentTimeMillis(); + BlurInfo.reset(); // Manually activate the onScreenChange method when all screens are closed (in-game) if (newScreen == null) Blur.onScreenChange(); diff --git a/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java b/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java similarity index 62% rename from src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java rename to common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java index 99fdf57..089b47d 100755 --- a/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java +++ b/common/src/main/java/eu/midnightdust/blur/mixin/MixinScreen.java @@ -1,5 +1,6 @@ package eu.midnightdust.blur.mixin; +import eu.midnightdust.blur.BlurInfo; import eu.midnightdust.blur.config.BlurConfig; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; @@ -17,40 +18,38 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Screen.class) public abstract class MixinScreen { - - @Shadow protected MinecraftClient client; - @Shadow @Final protected Text title; - + @Shadow protected MinecraftClient client; @Shadow public abstract void renderInGameBackground(DrawContext context); - @Shadow public int width; - @Shadow public int height; @Inject(at = @At("HEAD"), method = "render") public void blur$processScreenChange(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { - if (!Blur.doTest && Blur.screenChanged) { // After the tests for blur and background color have been completed + if (!BlurInfo.doTest && BlurInfo.screenChanged) { // After the tests for blur and background color have been completed Blur.onScreenChange(); - Blur.screenChanged = false; + BlurInfo.screenChanged = false; } - if (Blur.start >= 0 && !Blur.screenHasBlur && Blur.prevScreenHasBlur) { // Fade out in non-blurred screens + if (BlurInfo.start >= 0 && !BlurInfo.screenHasBlur && BlurInfo.prevScreenHasBlur) { // Fade out in non-blurred screens this.client.gameRenderer.renderBlur(delta); this.client.getFramebuffer().beginWrite(false); - if (Blur.prevScreenHasBackground) Blur.renderRotatedGradient(context, width, height); + if (BlurInfo.prevScreenHasBackground) Blur.renderRotatedGradient(context, width, height); } - Blur.doTest = false; // Set the test state to completed, as tests will happen in the same tick. + BlurInfo.doTest = false; // Set the test state to completed, as tests will happen in the same tick. } @Inject(at = @At("HEAD"), method = "renderInGameBackground") public void blur$getBackgroundEnabled(DrawContext context, CallbackInfo ci) { - Blur.screenHasBackground = true; // Test if the screen has a background + BlurInfo.screenHasBackground = true; // Test if the screen has a background } - @Inject(at = @At("HEAD"), method = "applyBlur") + @Inject(at = @At("HEAD"), method = "applyBlur", cancellable = true) public void blur$getBlurEnabled(float delta, CallbackInfo ci) { + if (BlurConfig.forceDisabledScreens.contains(this.getClass().toString())) { + ci.cancel(); return; + } if (!BlurConfig.excludedScreens.contains(this.getClass().toString())) - Blur.screenHasBlur = true; // Test if the screen has blur + BlurInfo.screenHasBlur = true; // Test if the screen has blur } @Inject(at = @At("HEAD"), method = "renderDarkening(Lnet/minecraft/client/gui/DrawContext;IIII)V", cancellable = true) @@ -62,8 +61,11 @@ public abstract class MixinScreen { } @Inject(at = @At("HEAD"), method = "renderInGameBackground", cancellable = true) - public void blur$rotatedGradient(DrawContext context, CallbackInfo ci) { // Replaces the default gradient with our rotated one - Blur.renderRotatedGradient(context, width, height); + 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 + + 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 new file mode 100644 index 0000000..68d123c --- /dev/null +++ b/common/src/main/java/eu/midnightdust/blur/mixin/ScreenAccessor.java @@ -0,0 +1,11 @@ +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(float delta); +} 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 new file mode 100644 index 0000000..572baca --- /dev/null +++ b/common/src/main/java/eu/midnightdust/blur/mixin/emi/MixinRecipeScreen.java @@ -0,0 +1,25 @@ +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/src/main/java/eu/midnightdust/blur/util/RainbowColor.java b/common/src/main/java/eu/midnightdust/blur/util/RainbowColor.java similarity index 81% rename from src/main/java/eu/midnightdust/blur/util/RainbowColor.java rename to common/src/main/java/eu/midnightdust/blur/util/RainbowColor.java index 57ced40..6222aec 100644 --- a/src/main/java/eu/midnightdust/blur/util/RainbowColor.java +++ b/common/src/main/java/eu/midnightdust/blur/util/RainbowColor.java @@ -1,14 +1,13 @@ package eu.midnightdust.blur.util; import eu.midnightdust.blur.config.BlurConfig; -import net.minecraft.client.MinecraftClient; public class RainbowColor { public static int rotation; public static float hue; public static float hue2 = 0.35f; - public static void tick(MinecraftClient ignoredClient) { + public static void tick() { if (BlurConfig.rainbowMode) { if (hue >= 1) hue = 0f; hue += 0.01f; diff --git a/src/main/resources/assets/blur/icon.png b/common/src/main/resources/assets/blur/icon.png similarity index 100% rename from src/main/resources/assets/blur/icon.png rename to common/src/main/resources/assets/blur/icon.png diff --git a/src/main/resources/assets/blur/lang/de_de.json b/common/src/main/resources/assets/blur/lang/de_de.json similarity index 100% rename from src/main/resources/assets/blur/lang/de_de.json rename to common/src/main/resources/assets/blur/lang/de_de.json diff --git a/src/main/resources/assets/blur/lang/en_gb.json b/common/src/main/resources/assets/blur/lang/en_gb.json similarity index 100% rename from src/main/resources/assets/blur/lang/en_gb.json rename to common/src/main/resources/assets/blur/lang/en_gb.json diff --git a/src/main/resources/assets/blur/lang/en_us.json b/common/src/main/resources/assets/blur/lang/en_us.json similarity index 82% rename from src/main/resources/assets/blur/lang/en_us.json rename to common/src/main/resources/assets/blur/lang/en_us.json index a307a4f..9772ba8 100755 --- a/src/main/resources/assets/blur/lang/en_us.json +++ b/common/src/main/resources/assets/blur/lang/en_us.json @@ -2,6 +2,7 @@ "blur.midnightconfig.title": "Blur+ Config", "blur.midnightconfig.category.animations": "Animations", "blur.midnightconfig.category.style": "Style", + "blur.midnightconfig.category.screens": "Screens", "blur.midnightconfig.blurContainers": "Apply Blur to Containers", "blur.midnightconfig.fadeTimeMillis": "Fade Time (in milliseconds)", "blur.midnightconfig.fadeOutTimeMillis": "Fade Out Time (in milliseconds)", @@ -24,5 +25,7 @@ "blur.midnightconfig.gradientStartAlpha": "Gradient Start Alpha", "blur.midnightconfig.gradientEndAlpha": "Gradient End Alpha", "blur.midnightconfig.gradientRotation": "Gradient Rotation", - "blur.midnightconfig.excludedScreens": "Excluded Screens" + "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" } \ No newline at end of file diff --git a/src/main/resources/assets/blur/lang/es_mx.json b/common/src/main/resources/assets/blur/lang/es_mx.json similarity index 100% rename from src/main/resources/assets/blur/lang/es_mx.json rename to common/src/main/resources/assets/blur/lang/es_mx.json diff --git a/src/main/resources/assets/blur/lang/fr_fr.json b/common/src/main/resources/assets/blur/lang/fr_fr.json similarity index 100% rename from src/main/resources/assets/blur/lang/fr_fr.json rename to common/src/main/resources/assets/blur/lang/fr_fr.json diff --git a/src/main/resources/assets/blur/lang/ko_kr.json b/common/src/main/resources/assets/blur/lang/ko_kr.json similarity index 100% rename from src/main/resources/assets/blur/lang/ko_kr.json rename to common/src/main/resources/assets/blur/lang/ko_kr.json diff --git a/src/main/resources/assets/blur/lang/pt_br.json b/common/src/main/resources/assets/blur/lang/pt_br.json similarity index 100% rename from src/main/resources/assets/blur/lang/pt_br.json rename to common/src/main/resources/assets/blur/lang/pt_br.json diff --git a/src/main/resources/assets/blur/lang/ru_ru.json b/common/src/main/resources/assets/blur/lang/ru_ru.json similarity index 100% rename from src/main/resources/assets/blur/lang/ru_ru.json rename to common/src/main/resources/assets/blur/lang/ru_ru.json diff --git a/src/main/resources/assets/blur/lang/sv_se.json b/common/src/main/resources/assets/blur/lang/sv_se.json similarity index 100% rename from src/main/resources/assets/blur/lang/sv_se.json rename to common/src/main/resources/assets/blur/lang/sv_se.json diff --git a/src/main/resources/assets/blur/lang/uk_ua.json b/common/src/main/resources/assets/blur/lang/uk_ua.json similarity index 100% rename from src/main/resources/assets/blur/lang/uk_ua.json rename to common/src/main/resources/assets/blur/lang/uk_ua.json diff --git a/src/main/resources/assets/blur/lang/zh_cn.json b/common/src/main/resources/assets/blur/lang/zh_cn.json similarity index 100% rename from src/main/resources/assets/blur/lang/zh_cn.json rename to common/src/main/resources/assets/blur/lang/zh_cn.json diff --git a/src/main/resources/assets/blur/lang/zh_tw.json b/common/src/main/resources/assets/blur/lang/zh_tw.json similarity index 100% rename from src/main/resources/assets/blur/lang/zh_tw.json rename to common/src/main/resources/assets/blur/lang/zh_tw.json diff --git a/src/main/resources/mixins.blur.json b/common/src/main/resources/blur.mixins.json similarity index 82% rename from src/main/resources/mixins.blur.json rename to common/src/main/resources/blur.mixins.json index 516dc8c..95d1835 100644 --- a/src/main/resources/mixins.blur.json +++ b/common/src/main/resources/blur.mixins.json @@ -2,9 +2,10 @@ "required": true, "minVersion": "0.8", "package": "eu.midnightdust.blur.mixin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "client": [ "MixinScreen", + "ScreenAccessor", "MixinHandledScreen", "MixinMinecraftClient", "MixinGameRenderer", diff --git a/common/src/main/resources/blur_compat.mixins.json b/common/src/main/resources/blur_compat.mixins.json new file mode 100644 index 0000000..37082fd --- /dev/null +++ b/common/src/main/resources/blur_compat.mixins.json @@ -0,0 +1,12 @@ +{ + "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/build.gradle b/fabric/build.gradle new file mode 100644 index 0000000..a78ec20 --- /dev/null +++ b/fabric/build.gradle @@ -0,0 +1,100 @@ +plugins { + id 'com.github.johnrengelman.shadow' + id "me.shedaniel.unified-publishing" +} + +architectury { + platformSetupLoomIde() + fabric() +} + +configurations { + common + shadowCommon // Don't use shadow from the shadow plugin since it *excludes* files. + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common + developmentFabric.extendsFrom common + archivesBaseName = rootProject.archives_base_name + "-fabric" + version = rootProject.mod_version + "+" + rootProject.minecraft_version +} + +dependencies { + modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" + modApi "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}" + modImplementation include ("maven.modrinth:midnightlib:${rootProject.midnightlib_version}-fabric") + + common(project(path: ":common", configuration: "namedElements")) { transitive false } + shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } +} + +processResources { + inputs.property "version", rootProject.version + + filesMatching("fabric.mod.json") { + expand "version": rootProject.version + } +} + +shadowJar { + exclude "architectury.common.json" + + configurations = [project.configurations.shadowCommon] + archiveClassifier = "dev-shadow" +} + +remapJar { + input.set shadowJar.archiveFile + dependsOn shadowJar +} + +sourcesJar { + def commonSources = project(":common").sourcesJar + dependsOn commonSources + from commonSources.archiveFile.map { zipTree(it) } +} + +components.java { + withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { + skip() + } +} + +unifiedPublishing { + project { + displayName = "Blur+ $rootProject.version - Fabric $project.minecraft_version" + releaseType = "$project.release_type" + changelog = releaseChangelog() + gameVersions = [] + gameLoaders = ["fabric","quilt"] + mainPublication remapJar + relations { + depends { + curseforge = "fabric-api" + modrinth = "fabric-api" + } + includes { + curseforge = "midnightlib" + modrinth = "midnightlib" + } + } + + var CURSEFORGE_TOKEN = project.findProperty("CURSEFORGE_TOKEN") ?: System.getenv("CURSEFORGE_TOKEN") + if (CURSEFORGE_TOKEN != null) { + curseforge { + token = CURSEFORGE_TOKEN + id = rootProject.curseforge_id + gameVersions.addAll "Java 21", project.minecraft_version, project.supported_versions + } + } + + var MODRINTH_TOKEN = project.findProperty("MODRINTH_TOKEN") ?: System.getenv("MODRINTH_TOKEN") + if (MODRINTH_TOKEN != null) { + modrinth { + token = MODRINTH_TOKEN + id = rootProject.modrinth_id + version = "$rootProject.version-$project.name" + gameVersions.addAll project.minecraft_version, project.supported_versions + } + } + } +} \ No newline at end of file diff --git a/fabric/src/main/java/eu/midnightdust/blur/fabric/BlurFabric.java b/fabric/src/main/java/eu/midnightdust/blur/fabric/BlurFabric.java new file mode 100644 index 0000000..5a55cee --- /dev/null +++ b/fabric/src/main/java/eu/midnightdust/blur/fabric/BlurFabric.java @@ -0,0 +1,14 @@ +package eu.midnightdust.blur.fabric; + +import eu.midnightdust.blur.Blur; +import eu.midnightdust.blur.util.RainbowColor; +import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; + +public class BlurFabric implements ClientModInitializer { + @Override + public void onInitializeClient() { + Blur.init(); + ClientTickEvents.END_CLIENT_TICK.register(client -> RainbowColor.tick()); + } +} diff --git a/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json similarity index 86% rename from src/main/resources/fabric.mod.json rename to fabric/src/main/resources/fabric.mod.json index 35eab58..470f881 100755 --- a/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -8,7 +8,7 @@ "icon": "assets/blur/icon.png", "entrypoints": { "client": [ - "eu.midnightdust.blur.Blur" + "eu.midnightdust.blur.fabric.BlurFabric" ] }, "contact": { @@ -25,7 +25,8 @@ ], "description": "Various enhancements for the blur effect behind Minecraft GUIs", "mixins": [ - "mixins.blur.json" + "blur.mixins.json", + "blur_compat.mixins.json" ], "depends": { "minecraft": ">=1.20.5" diff --git a/gradle.properties b/gradle.properties index afa5ce2..a22760f 100755 --- a/gradle.properties +++ b/gradle.properties @@ -1,22 +1,29 @@ # Done to increase the memory available to gradle. -org.gradle.jvmargs=-Xmx1G +org.gradle.jvmargs=-Xmx2G org.gradle.parallel=true -# Fabric Properties - # check these on https://fabricmc.net/develop - minecraft_version=1.21 - yarn_mappings=1.21+build.2 - loader_version=0.15.11 - -# Mod Properties - mod_version=4.1.0 - maven_group=eu.midnightdust.blur - archives_base_name=blur - release_type=release - curseforge_id=393563 - modrinth_id=NK39zBp2 +minecraft_version=1.21 +supported_versions=1.21.1 +yarn_mappings=1.21+build.2 +enabled_platforms=fabric,neoforge -# Dependencies - # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api - fabric_version=0.100.1+1.21 - midnightlib_version=1.5.7-fabric +# Mod Properties +mod_version=5.0.0 +maven_group=eu.midnightdust.blur +archives_base_name=blur +release_type=release +curseforge_id=393563 +modrinth_id=NK39zBp2 + +# Modloaders +fabric_loader_version=0.15.11 +fabric_api_version=0.100.1+1.21 + +neoforge_version=21.0.143 +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/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 81c736b..e4a5f61 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.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/localMaven/midnightlib-fabric-1.5.3-24w09a.jar b/localMaven/midnightlib-fabric-1.5.3-24w09a.jar deleted file mode 100644 index b0f97f9..0000000 Binary files a/localMaven/midnightlib-fabric-1.5.3-24w09a.jar and /dev/null differ diff --git a/neoforge/build.gradle b/neoforge/build.gradle new file mode 100644 index 0000000..7c6325b --- /dev/null +++ b/neoforge/build.gradle @@ -0,0 +1,113 @@ +plugins { + id 'com.github.johnrengelman.shadow' + id "me.shedaniel.unified-publishing" +} + +repositories { + maven { + name = 'NeoForged' + url = 'https://maven.neoforged.net/releases' + } +} + + +architectury { + platformSetupLoomIde() + neoForge() +} + +loom { + accessWidenerPath = project(":common").loom.accessWidenerPath +} + +configurations { + common { + canBeResolved = true + canBeConsumed = false + } + compileClasspath.extendsFrom common + runtimeClasspath.extendsFrom common + developmentNeoForge.extendsFrom common + + // Files in this configuration will be bundled into your mod using the Shadow plugin. + // Don't use the `shadow` configuration from the plugin itself as it's meant for excluding files. + shadowBundle { + canBeResolved = true + canBeConsumed = false + } + archivesBaseName = rootProject.archives_base_name + "-neoforge" + version = rootProject.mod_version + "+" + rootProject.minecraft_version +} + +dependencies { + neoForge "net.neoforged:neoforge:$rootProject.neoforge_version" + modImplementation ("maven.modrinth:midnightlib:${rootProject.midnightlib_version}-neoforge") + + common(project(path: ':common', configuration: 'namedElements')) { transitive false } + shadowBundle project(path: ':common', configuration: 'transformProductionNeoForge') +} + +processResources { + inputs.property 'version', rootProject.version + + filesMatching('META-INF/neoforge.mods.toml') { + expand version: rootProject.version + } +} + +shadowJar { + configurations = [project.configurations.shadowBundle] + archiveClassifier = 'dev-shadow' +} + +remapJar { + input.set shadowJar.archiveFile +} + +sourcesJar { + def commonSources = project(":common").sourcesJar + dependsOn commonSources + from commonSources.archiveFile.map { zipTree(it) } +} + +components.java { + withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { + skip() + } +} + +unifiedPublishing { + project { + displayName = "Blur+ $rootProject.version - NeoForge $project.minecraft_version" + releaseType = "$project.release_type" + changelog = releaseChangelog() + gameVersions = [] + gameLoaders = ["neoforge"] + mainPublication remapJar + relations { + depends { + curseforge = "midnightlib" + modrinth = "midnightlib" + } + } + + var CURSEFORGE_TOKEN = project.findProperty("CURSEFORGE_TOKEN") ?: System.getenv("CURSEFORGE_TOKEN") + if (CURSEFORGE_TOKEN != null) { + curseforge { + token = CURSEFORGE_TOKEN + id = rootProject.curseforge_id + gameVersions.addAll "Java 21", project.minecraft_version, project.supported_versions + } + } + + var MODRINTH_TOKEN = project.findProperty("MODRINTH_TOKEN") ?: System.getenv("MODRINTH_TOKEN") + if (MODRINTH_TOKEN != null) { + modrinth { + token = MODRINTH_TOKEN + id = rootProject.modrinth_id + version = "$rootProject.version-$project.name" + gameVersions.addAll project.minecraft_version, project.supported_versions + } + } + } +} diff --git a/neoforge/gradle.properties b/neoforge/gradle.properties new file mode 100644 index 0000000..2914393 --- /dev/null +++ b/neoforge/gradle.properties @@ -0,0 +1 @@ +loom.platform=neoforge \ No newline at end of file diff --git a/neoforge/src/main/java/eu/midnightdust/blur/neoforge/BlurNeoForge.java b/neoforge/src/main/java/eu/midnightdust/blur/neoforge/BlurNeoForge.java new file mode 100644 index 0000000..4f99669 --- /dev/null +++ b/neoforge/src/main/java/eu/midnightdust/blur/neoforge/BlurNeoForge.java @@ -0,0 +1,24 @@ +package eu.midnightdust.blur.neoforge; + +import eu.midnightdust.blur.Blur; +import eu.midnightdust.blur.util.RainbowColor; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +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) +public class BlurNeoForge { + public BlurNeoForge() { + Blur.init(); + } + + @EventBusSubscriber(modid = "blur", bus = EventBusSubscriber.Bus.GAME, value = Dist.CLIENT) + public static class ClientGameEvents { + @SubscribeEvent + public static void endClientTick(ClientTickEvent.Post event) { + RainbowColor.tick(); + } + } +} diff --git a/neoforge/src/main/resources/META-INF/neoforge.mods.toml b/neoforge/src/main/resources/META-INF/neoforge.mods.toml new file mode 100644 index 0000000..b871078 --- /dev/null +++ b/neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -0,0 +1,33 @@ +modLoader = "javafml" +loaderVersion = "[2,)" +#issueTrackerURL = "" +license = "MIT License" + +[[mods]] +modId = "blur" +version = "${version}" +displayName = "Blur+" +logoFile = "blur.png" +authors = "Motschen, tterrag1098, Pyrofab, backryun, byquanton" +description = ''' +Various enhancements for the blur effect behind Minecraft GUIs +''' + +[[mixins]] +config = "blur.mixins.json" +[[mixins]] +config = "blur_compat.mixins.json" + +[[dependencies.blur]] +modId = "neoforge" +mandatory = true +versionRange = "[21.0,)" +ordering = "NONE" +side = "CLIENT" + +[[dependencies.blur]] +modId = "minecraft" +mandatory = true +versionRange = "[1.21,)" +ordering = "NONE" +side = "CLIENT" \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 2e9d858..1ea6c73 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,13 +1,15 @@ pluginManagement { repositories { - maven { - name = 'Fabric' - url = 'https://maven.fabricmc.net/' - } + maven { url "https://maven.fabricmc.net/" } maven { url "https://maven.architectury.dev/" } - mavenCentral() + maven { url "https://maven.neoforged.net/releases" } gradlePluginPortal() } } -rootProject.name = "blur" \ No newline at end of file +include("common") +include("fabric") +include("neoforge") +//include("quilt") + +rootProject.name = "blur"