48 Commits

Author SHA1 Message Date
Martin Prokoph
fa6fd82e4d fix: move gradient z-coordinate further back 2025-04-23 10:18:55 +02:00
Martin Prokoph
528958fa8c fix: improve gradient handling 2025-04-19 09:58:54 +02:00
Martin Prokoph
552f1e619e feat: improve config screen with comments 2025-03-29 19:30:38 +01:00
Martin Prokoph
c9c630ac11 fix: less invasive gradient injection
- Should fix various compatibility issues with other mods
2025-03-29 18:45:19 +01:00
Martin Prokoph
695fa67270 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)
2025-03-28 23:35:46 +01:00
Martin Prokoph
5f9738da38 fix: add null-check for Minecraft options
- Fixes #119
2025-02-02 21:00:03 +01:00
Martin Prokoph
881709c165 readme: remove duplicate banner 2025-01-27 16:39:08 +01:00
Martin Prokoph
50ed77006d chore: bump version 2025-01-27 12:24:13 +01:00
Martin Prokoph
e99572eb4d fix: crash in production when opening config screen 2025-01-27 12:23:07 +01:00
Martin Prokoph
f7465ee08e feat: title screen blur
- Also fix config changes not being saved
2025-01-25 18:53:32 +01:00
Martin Prokoph
75bfeb2ce3 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.
2025-01-20 16:44:35 +01:00
Martin Prokoph
e5c2a542f4 fix: container blur not working on NeoForge 2025-01-14 11:50:04 +01:00
Martin Prokoph
a13cdd11a7 Update dependencies to 1.21.4 2024-12-08 18:11:51 +01:00
Martin Prokoph
6f10a7f3df Update to 1.21.3 2024-11-05 10:48:31 +01:00
Martin Prokoph
d79dfc004b Final changes before 5.0.0 2024-09-07 00:56:11 +02:00
Martin Prokoph
2961637df0 Create README.md 2024-09-06 23:39:25 +02:00
Martin Prokoph
8817e18a55 Increased max blur intensity & Working screen overrides
- EMI compat now works using forced blur
- Iris shader screen is now sooo much smoother
2024-09-06 23:33:10 +02:00
Martin Prokoph
f68048d955 Architectury port, EMI compat 2024-09-06 21:44:34 +02:00
Martin Prokoph
b6266b8e48 Merge pull request #106 from WForst-Breeze/plus
Update zh_cn translations for plus
2024-09-06 19:34:14 +02:00
Martin Prokoph
d78520448c Merge pull request #107 from yichifauzi/plus
Added Traditional Chinese (zh_tw.json)
2024-09-06 19:33:44 +02:00
dirtTW
83f2281cb0 Update zh_tw.json 2024-08-02 18:57:40 +07:00
dirtTW
081b0076c8 Added Traditional Chinese (zh_tw.json)
Added Traditional Chinese localization
2024-08-02 18:48:13 +07:00
风释清然SC
5afd31651a Update translations for zh_cn 2024-07-25 17:57:56 +08:00
Martin Prokoph
5f0d65e84c Update to 1.21 & Add exclusion list
- Iris' shader selection screen is excluded by default
- Also added unifiedPublishing for easier update publishing
2024-06-17 11:09:58 +02:00
Martin Prokoph
0799437138 Merge pull request #97 from TheLegendofSaram/Plus-Mexican-Spanish-translation
Update es_mx
2024-06-16 18:55:42 +02:00
Santiago Hernandez
fd2e4da3a7 Update es_mx
A translation for Blur+
2024-05-03 15:37:34 -04:00
Martin Prokoph
4c5e56ae80 Merge pull request #96 from Motschen/fabric-1.20.4
Sync Spanish translation into Blur+
2024-05-02 20:54:00 +02:00
Martin Prokoph
0449c77fe4 Merge pull request #90 from TheLegendofSaram/fabric-1.20.4
Mexican Spanish translation
2024-05-02 20:51:40 +02:00
Martin Prokoph
0893d6ef6c Merge pull request #95 from mpustovoi/plus
Update `ru_ru.json` for `plus`
2024-05-02 20:48:42 +02:00
Martin Prokoph
7c89dee562 Finishing touches
- Correctly scale gradients
- Updated German translations
2024-05-02 20:47:54 +02:00
Korben
22af1ef118 Update ru_ru.json for plus 2024-05-01 21:52:10 +03:00
Martin Prokoph
853f137d0c Another big step towards Blur+
- Added rainbow mode!
- Allow gradients to be rotated
- Add many new animation curves
- Update to 1.20.5
2024-04-29 15:10:43 +02:00
Santiago Hernandez
b09180a812 Mexican Spanish translation
Just a simple Mexican Spanish translation
2024-03-27 12:16:19 -03:00
Martin Prokoph
22037bd37d Rewrite large parts of the mod
Blur is now more alive than ever, as I've been working on a new update: Blur+ 🪩
The mod's goal now is to improve upon the vanilla blur effect, adding smooth & configurable animations, the ability to apply it to containers (such as the inventory, chests, etc.), as well as customizable gradient backgrounds. 🌈
2024-03-23 15:47:29 +01:00
Martin Prokoph
43d2b02162 Update MidnightLib to fix ModMenu 2023-12-19 15:20:00 +01:00
Martin Prokoph
c5f81c7eb1 Merge pull request #84 from SzczurekYT/null-fix
Fix crash when Blur.prevScreen is null
2023-12-19 14:32:14 +01:00
Martin Prokoph
210759cf6f Merge pull request #85 from backryun/fabric-1.20.4
Ready for adopt 1.20.4
2023-12-19 14:30:15 +01:00
backryun
266a37da20 satin+midnightlib update 2023-12-19 22:06:15 +09:00
Backryun
ef583e6ace Ready for update 1.20.4 2023-12-11 18:22:27 +09:00
SzczurekYT
6ee97e7415 Fix crash when Blur.prevScreen is null 2023-12-04 17:11:36 +01:00
Backryun
36514d5901 Update API 2023-11-03 19:28:18 +09:00
Backryun
7ed281b2f9 Update API+Loader 2023-10-31 00:38:17 +09:00
Backryun
b240c303c3 Update gradle+API+Yarn+Loader 2023-10-10 22:21:26 +09:00
Backryun
a092873127 fix workflow+update deps 2023-10-02 15:59:28 +09:00
Motschen
f9a54f936d Compress icon 2023-09-30 10:37:27 +02:00
Motschen
bd3b58adcb Blur 3.1.1 - 1.20.2 & New excluded screens
- Port to 1.20.2 by @TheMrEngMan & @backryun
- Exclude MidnightControls' touchscreen overlay and Baritone click screen by default (closes #75)
- Miscellaneous fixes
2023-09-30 10:31:11 +02:00
Martin Prokoph
d8b6a14e7f Merge pull request #81 from TheMrEngMan/fabric-1.20
Update to Minecraft 1.20.2
2023-09-30 10:01:02 +02:00
TheMrEngMan
d726e20410 Update to Minecraft 1.20.2
Bump satin dependency to version 1.14.0
Bump midnightlib dependency to version 1.5.0
Bump version to 3.1.1
2023-09-25 03:57:02 -04:00
58 changed files with 1196 additions and 554 deletions

View File

@@ -1,8 +1,8 @@
on:
push:
branches: [ "fabric-1.19.3" ]
branches: [ "fabric-1.20.4" ]
pull_request:
branches: [ "fabric-1.19.3" ]
branches: [ "fabric-1.20.4" ]
permissions:
contents: read

47
.gitignore vendored
View File

@@ -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

7
README.md Normal file
View File

@@ -0,0 +1,7 @@
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)

View File

@@ -1,75 +1,73 @@
import groovy.json.JsonSlurper
import groovy.json.JsonOutput
plugins {
id 'fabric-loom' version '1.2-SNAPSHOT'
id 'maven-publish'
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_17
targetCompatibility = JavaVersion.VERSION_17
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://ladysnake.jfrog.io/artifactory/mods'
content {
includeGroup 'io.github.ladysnake'
includeGroupByRegex 'io\\.github\\.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'
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")
}
}
maven {
url = "https://api.modrinth.com/maven"
}
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
}
}
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 "io.github.ladysnake:satin:${satin_version}"
include "io.github.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.18 (1.18-pre2) upwards uses Java 17.
it.options.release = 17
}
java {
withSourcesJar()
}
jar {
from "LICENSE"
}
// configure the maven publication
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
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()
}
}
}
processResources {
// Minify json resources
doLast {
fileTree(dir: outputs.files.asPath, include: "**/*.json").each {
File file -> file.text = JsonOutput.toJson(new JsonSlurper().parse(file))
}
}
}
java {
withSourcesJar()
}
}

24
common/build.gradle Normal file
View File

@@ -0,0 +1,24 @@
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"
}
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.
}
}

View File

@@ -0,0 +1,103 @@
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;
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 {
public static final String MOD_ID = "blur";
public static void init() {
BlurConfig.init(MOD_ID, BlurConfig.class);
}
public static boolean doFade = false;
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) Blur.renderRotatedGradient(context, width, height);
}
}
public static void onScreenChange() {
if (screenHasBlur) {
if (doFade) {
start = System.currentTimeMillis();
doFade = false;
}
} else if (prevScreenHasBlur && BlurConfig.fadeOutTimeMillis > 0) {
start = System.currentTimeMillis();
doFade = true;
} else {
start = -1;
doFade = true;
}
}
public static void updateProgress(boolean fadeIn) {
double x;
if (fadeIn) {
x = Math.min((System.currentTimeMillis() - start) / (double) BlurConfig.fadeTimeMillis, 1);
}
else {
x = Math.max(1 + (start - System.currentTimeMillis()) / (double) BlurConfig.fadeOutTimeMillis, 0);
if (x <= 0) {
start = -1;
}
}
x = BlurConfig.animationCurve.apply(x, fadeIn);
x = Math.clamp(0, 1, x);
progress = Double.valueOf(x).floatValue();
}
public static int getBackgroundColor(boolean second) {
int a = second ? BlurConfig.gradientEndAlpha : BlurConfig.gradientStartAlpha;
var col = MidnightColorUtil.hex2Rgb(second ? BlurConfig.gradientEnd : BlurConfig.gradientStart);
if (BlurConfig.rainbowMode) col = second ? Color.getHSBColor(hue, 1, 1) : Color.getHSBColor(hue2, 1, 1);
int r = (col.getRGB() >> 16) & 0xFF;
int b = (col.getRGB() >> 8) & 0xFF;
int g = col.getRGB() & 0xFF;
float prog = progress;
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() {
if (BlurConfig.rainbowMode) return RainbowColor.rotation;
return BlurConfig.gradientRotation;
}
public static void renderRotatedGradient(DrawContext context, int width, int height) {
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
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();
}
}

View File

@@ -0,0 +1,32 @@
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;
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(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;
screenHasBackground = false;
doTest = true;
screenChanged = true;
start = -1;
lastScreenChange = System.currentTimeMillis();
}
}

View File

@@ -0,0 +1,105 @@
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;
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;
@Comment(category = SCREENS, centered = true)
public static Comment _general;
@Entry(category = SCREENS)
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;
@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<String> 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<String> forceEnabledScreens = Lists.newArrayList("dev.emi.emi.screen.RecipeScreen");
@Entry(category = SCREENS) // Screens where the vanilla blur effect should be force disabled
public static List<String> 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)
@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)
public static boolean rainbowMode = false;
@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) {
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!
FLAT(x -> x, x -> x),
SINE(x -> 1 - cos(x * PI) / 2, x -> sin(x * PI) / 2),
QUAD(x -> x * x, x -> 1 - (1 - x) * (1 - x)),
CUBIC(x -> x * x * x, x -> 1 - pow(1 - x, 3)),
QUART(x -> x * x * x * x, x -> 1 - pow(1 - x, 4)),
QUINT(x -> x * x * x * x * x, x -> 1 - pow(1 - x, 5)),
EXPO(x -> x == 0 ? 0 : pow(2, 10 * x - 10), x -> x == 1 ? 1 : 1 - pow(2, -10 * x)),
CIRC(x -> 1 - sqrt(1 - pow(x, 2)), x -> sqrt(1 - pow(x - 1, 2))),
BACK(x -> 2.70158 * x * x * x - 1.70158 * x * x,x -> 1 + 2.70158 * pow(x - 1, 3) + 1.70158 * pow(x - 1, 2)),
ELASTIC(x -> x == 0 ? 0 : x == 1 ? 1 : -pow(2, 10 * x - 10) * sin((x * 10 - 10.75) * ((2 * PI) / 3)), x -> x == 0 ? 0 : x == 1 ? 1 : pow(2, -10 * x) * sin((x * 10 - 0.75) * ((2 * PI) / 3)) + 1);
final Function<Double, Number> functionIn;
final Function<Double, Number> functionOut;
Easing(Function<Double, Number> functionIn, Function<Double, Number> functionOut) {
this.functionIn = functionIn;
this.functionOut = functionOut;
}
public Double apply(Double x, boolean in) {
if (in) return functionIn.apply(x).doubleValue();
return functionOut.apply(x).doubleValue();
}
}
}

View File

@@ -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<Integer> menuBackgroundBlurriness;
@Shadow @Final private SimpleOption<Double> chatLineSpacing;
@Redirect(method = "<init>", 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);
}
}

View File

@@ -0,0 +1,18 @@
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;
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
if (!BlurInfo.screenChanged && BlurInfo.start >= 0) // Only update the progress after all tests have been completed
Blur.updateProgress(BlurInfo.screenHasBlur);
return radius * BlurInfo.progress;
}
}

View File

@@ -0,0 +1,29 @@
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;
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(HandledScreen.class)
public class MixinHandledScreen extends Screen {
protected MixinHandledScreen(Text title) {
super(title);
}
@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();
}
@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();
}
}

View File

@@ -0,0 +1,30 @@
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;
import net.minecraft.client.render.RenderTickCounter;
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(InGameHud.class)
public class MixinInGameHud {
@Final @Shadow private MinecraftClient client;
@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 && BlurInfo.start >= 0 && BlurInfo.prevScreenHasBlur) {
BlurInfo.doTest = false;
BlurInfo.screenChanged = false;
this.client.gameRenderer.renderBlur();
if (BlurInfo.prevScreenHasBackground) Blur.renderRotatedGradient(context, client.getWindow().getScaledWidth(), client.getWindow().getScaledHeight());
}
}
}

View File

@@ -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);
}
}

View File

@@ -0,0 +1,17 @@
package eu.midnightdust.blur.mixin;
import eu.midnightdust.blur.config.BlurConfig;
import eu.midnightdust.lib.config.MidnightConfig;
import net.minecraft.client.MinecraftClient;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(MidnightConfig.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();
}
}

View File

@@ -0,0 +1,30 @@
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;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
@Mixin(MinecraftClient.class)
public class MixinMinecraftClient {
@Inject(method = "setScreen",
at = @At(value = "FIELD",
target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;",
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(newScreen);
// Manually activate the onScreenChange method when all screens are closed (in-game)
if (newScreen == null) Blur.onScreenChange();
}
}
}

View File

@@ -0,0 +1,65 @@
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;
import eu.midnightdust.blur.Blur;
import net.minecraft.client.gui.screen.Screen;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(Screen.class)
public abstract class MixinScreen {
@Shadow @Final protected Text title;
@Shadow protected MinecraftClient client;
@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();
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())) {
ci.cancel(); return;
}
if (!BlurConfig.excludedScreens.contains(this.getClass().getCanonicalName()))
BlurInfo.screenHasBlur = true; // Test if the screen has blur
}
@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<Void> 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);
}
@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<Void> 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()))
this.applyBlur();
Blur.renderRotatedGradient(context, width, height); // Replaces the default gradient with our rotated one
}
}

View File

@@ -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);
}
}
}

View File

@@ -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();
}

View File

@@ -0,0 +1,21 @@
package eu.midnightdust.blur.util;
import eu.midnightdust.blur.config.BlurConfig;
public class RainbowColor {
public static int rotation;
public static float hue;
public static float hue2 = 0.35f;
public static void tick() {
if (BlurConfig.rainbowMode) {
if (hue >= 1) hue = 0f;
hue += 0.01f;
if (hue2 >= 1) hue2 = 0f;
hue2 += 0.01f;
if (rotation >= 360) rotation = 0;
rotation += 1;
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,36 @@
{
"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",
"blur.midnightconfig.darkenTitleScreen": "Abgedunkelter Titelhintergrund",
"blur.midnightconfig.fadeTimeMillis": "Überblendzeit (in Millisekunden)",
"blur.midnightconfig.fadeOutTimeMillis": "Ausblendzeit (in Millisekunden)",
"blur.midnightconfig.animationCurve": "Animationskurve",
"blur.midnightconfig.enum.Easing.FLAT": "Flach",
"blur.midnightconfig.enum.Easing.SINE": "Sinus",
"blur.midnightconfig.enum.Easing.QUAD": "Quadriert",
"blur.midnightconfig.enum.Easing.CUBIC": "Kubiert",
"blur.midnightconfig.enum.Easing.QUART": "Quart",
"blur.midnightconfig.enum.Easing.QUINT": "Quint",
"blur.midnightconfig.enum.Easing.EXPO": "Expo",
"blur.midnightconfig.enum.Easing.CIRC": "Kreis",
"blur.midnightconfig.enum.Easing.BACK": "Zurück",
"blur.midnightconfig.enum.Easing.ELASTIC": "Elastisch",
"blur.midnightconfig.radius": "Radius",
"blur.midnightconfig.rainbowMode": "Regenbogenmodus \uD83C\uDF08",
"blur.midnightconfig.useGradient": "Farbverlauf im Hintergrund",
"blur.midnightconfig.gradientStart": "Farbverlauf-Anfangsfarbe",
"blur.midnightconfig.gradientEnd": "Farbverlauf-Endfarbe",
"blur.midnightconfig.gradientStartAlpha": "Farbverlauf-Anfangstransparenz",
"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"
}

View File

@@ -0,0 +1,42 @@
{
"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.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",
"blur.midnightconfig.enum.Easing.FLAT": "Flat",
"blur.midnightconfig.enum.Easing.SINE": "Sine",
"blur.midnightconfig.enum.Easing.QUAD": "Quad",
"blur.midnightconfig.enum.Easing.CUBIC": "Cubic",
"blur.midnightconfig.enum.Easing.QUART": "Quart",
"blur.midnightconfig.enum.Easing.QUINT": "Quint",
"blur.midnightconfig.enum.Easing.EXPO": "Expo",
"blur.midnightconfig.enum.Easing.CIRC": "Circ",
"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",
"blur.midnightconfig.gradientEnd": "Gradient End Color",
"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.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",
"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"
}

View File

@@ -0,0 +1,27 @@
{
"blur.midnightconfig.title": "Configuración de Blur+",
"blur.midnightconfig.category.animations": "Animaciones",
"blur.midnightconfig.category.style": "Estilo",
"blur.midnightconfig.blurContainers": "Aplicar desenfoque a los contenedores",
"blur.midnightconfig.fadeTimeMillis": "Tiempo de desvanecimiento (en milisegundos)",
"blur.midnightconfig.fadeOutTimeMillis": "Tiempo de desvanecimiento de salida (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ático",
"blur.midnightconfig.enum.Easing.CUBIC": "Cúbico",
"blur.midnightconfig.enum.Easing.QUART": "Cuarto",
"blur.midnightconfig.enum.Easing.QUINT": "Quinto",
"blur.midnightconfig.enum.Easing.EXPO": "Exponencial",
"blur.midnightconfig.enum.Easing.CIRC": "Circular",
"blur.midnightconfig.enum.Easing.BACK": "Atrás",
"blur.midnightconfig.enum.Easing.ELASTIC": "Elástico",
"blur.midnightconfig.radius": "Radio",
"blur.midnightconfig.rainbowMode": "Modo Arcoíris \uD83C\uDF08",
"blur.midnightconfig.useGradient": "Usar degradado como fondo",
"blur.midnightconfig.gradientStart": "Color de inicio del degradado",
"blur.midnightconfig.gradientEnd": "Color de fin del degradado",
"blur.midnightconfig.gradientStartAlpha": "Alfa de inicio del degradado",
"blur.midnightconfig.gradientEndAlpha": "Alfa de fin del degradado",
"blur.midnightconfig.gradientRotation": "Rotación del degradado"
}

View File

@@ -0,0 +1,27 @@
{
"blur.midnightconfig.title": "Настройки Blur+",
"blur.midnightconfig.category.animations": "Анимации",
"blur.midnightconfig.category.style": "Стиль",
"blur.midnightconfig.blurContainers": "Применять размытие к контейнерам",
"blur.midnightconfig.fadeTimeMillis": "Время размытия (в миллисекундах)",
"blur.midnightconfig.fadeOutTimeMillis": "Время затухания (в миллисекундах)",
"blur.midnightconfig.animationCurve": "Кривая анимации",
"blur.midnightconfig.enum.Easing.FLAT": "Плоская",
"blur.midnightconfig.enum.Easing.SINE": "Синусоидальная",
"blur.midnightconfig.enum.Easing.QUAD": "Квадратная",
"blur.midnightconfig.enum.Easing.CUBIC": "Кубическая",
"blur.midnightconfig.enum.Easing.QUART": "Квартовая",
"blur.midnightconfig.enum.Easing.QUINT": "Квинтовая",
"blur.midnightconfig.enum.Easing.EXPO": "Экспоненциальная",
"blur.midnightconfig.enum.Easing.CIRC": "Круговая",
"blur.midnightconfig.enum.Easing.BACK": "Обратная",
"blur.midnightconfig.enum.Easing.ELASTIC": "Упругая",
"blur.midnightconfig.radius": "Радиус размытия",
"blur.midnightconfig.rainbowMode": "Радужный режим \uD83C\uDF08",
"blur.midnightconfig.useGradient": "Градиент в качестве фона",
"blur.midnightconfig.gradientStart": "Верхний цвет градиента",
"blur.midnightconfig.gradientEnd": "Нижний цвет градиента",
"blur.midnightconfig.gradientStartAlpha": "Альфа-начало градиента",
"blur.midnightconfig.gradientEndAlpha": "Альфа-конец градиента",
"blur.midnightconfig.gradientRotation": "Вращение градиента"
}

View File

@@ -0,0 +1,28 @@
{
"blur.midnightconfig.title": "模糊 (Blur+) 配置",
"blur.midnightconfig.category.animations": "动画",
"blur.midnightconfig.category.style": "样式",
"blur.midnightconfig.blurContainers": "使用容器时启用",
"blur.midnightconfig.fadeTimeMillis": "淡入时间(毫秒)",
"blur.midnightconfig.fadeOutTimeMillis": "淡出时间(毫秒)",
"blur.midnightconfig.animationCurve": "动画曲线",
"blur.midnightconfig.enum.Easing.FLAT": "平滑Flat",
"blur.midnightconfig.enum.Easing.SINE": "正弦Sine",
"blur.midnightconfig.enum.Easing.QUAD": "二次Quad",
"blur.midnightconfig.enum.Easing.CUBIC": "三次Cubic",
"blur.midnightconfig.enum.Easing.QUART": "四次Quart",
"blur.midnightconfig.enum.Easing.QUINT": "五次Quint",
"blur.midnightconfig.enum.Easing.EXPO": "指数Expo",
"blur.midnightconfig.enum.Easing.CIRC": "圆周Circ",
"blur.midnightconfig.enum.Easing.BACK": "回弹Back",
"blur.midnightconfig.enum.Easing.ELASTIC": "弹性Elastic",
"blur.midnightconfig.radius": "半径",
"blur.midnightconfig.rainbowMode": "彩虹模式 \uD83C\uDF08",
"blur.midnightconfig.useGradient": "背景渐变",
"blur.midnightconfig.gradientStart": "渐变起始色",
"blur.midnightconfig.gradientEnd": "渐变结束色",
"blur.midnightconfig.gradientStartAlpha": "渐变起始 Alpha 通道",
"blur.midnightconfig.gradientEndAlpha": "渐变结束 Alpha 通道",
"blur.midnightconfig.gradientRotation": "渐变旋转",
"blur.midnightconfig.excludedScreens": "禁用的界面"
}

View File

@@ -0,0 +1,28 @@
{
"blur.midnightconfig.title": "Blur+ 設定",
"blur.midnightconfig.category.animations": "動畫",
"blur.midnightconfig.category.style": "風格",
"blur.midnightconfig.blurContainers": "對容器套用模糊",
"blur.midnightconfig.fadeTimeMillis": "淡入時間(毫秒)",
"blur.midnightconfig.fadeOutTimeMillis": "淡出時間(毫秒)",
"blur.midnightconfig.animationCurve": "動畫曲線",
"blur.midnightconfig.enum.Easing.FLAT": "線性Flat",
"blur.midnightconfig.enum.Easing.SINE": "正弦Sine",
"blur.midnightconfig.enum.Easing.QUAD": "二次Quad",
"blur.midnightconfig.enum.Easing.CUBIC": "三次Cubic",
"blur.midnightconfig.enum.Easing.QUART": "四次Quart",
"blur.midnightconfig.enum.Easing.QUINT": "五次Quint",
"blur.midnightconfig.enum.Easing.EXPO": "指數Expo",
"blur.midnightconfig.enum.Easing.CIRC": "圓形Circ",
"blur.midnightconfig.enum.Easing.BACK": "回彈Back",
"blur.midnightconfig.enum.Easing.ELASTIC": "彈性Elastic",
"blur.midnightconfig.radius": "半徑",
"blur.midnightconfig.rainbowMode": "彩虹模式 🌈",
"blur.midnightconfig.useGradient": "漸變背景",
"blur.midnightconfig.gradientStart": "漸變起始顏色",
"blur.midnightconfig.gradientEnd": "漸變結束顏色",
"blur.midnightconfig.gradientStartAlpha": "漸變起始 Alpha",
"blur.midnightconfig.gradientEndAlpha": "漸變結束 Alpha",
"blur.midnightconfig.gradientRotation": "漸變旋轉",
"blur.midnightconfig.excludedScreens": "排除畫面"
}

View File

@@ -0,0 +1,21 @@
{
"required": true,
"minVersion": "0.8",
"package": "eu.midnightdust.blur.mixin",
"compatibilityLevel": "JAVA_21",
"client": [
"MixinGameOptions",
"MixinGameRenderer",
"MixinHandledScreen",
"MixinInGameHud",
"MixinMidnightConfig",
"MixinMidnightConfig$EntryInfo",
"MixinMinecraftClient",
"MixinScreen",
"MixinTitleScreen",
"ScreenAccessor"
],
"injectors": {
"defaultRequire": 1
}
}

102
fabric/build.gradle Normal file
View File

@@ -0,0 +1,102 @@
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
if (project.supported_versions != "") gameVersions.addAll 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
if (project.supported_versions != "") gameVersions.addAll project.supported_versions
}
}
}
}

View File

@@ -0,0 +1,18 @@
package eu.midnightdust.blur.fabric;
import eu.midnightdust.blur.Blur;
import eu.midnightdust.blur.util.RainbowColor;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
public class BlurFabric implements ModInitializer, ClientModInitializer {
@Override
public void onInitialize() {
Blur.init();
}
@Override
public void onInitializeClient() {
ClientTickEvents.END_CLIENT_TICK.register(client -> RainbowColor.tick());
}
}

View File

@@ -1,14 +1,17 @@
{
"schemaVersion": 1,
"id": "blur",
"name": "Blur (Fabric)",
"name": "Blur+",
"version": "$version",
"environment": "client",
"license": "MIT",
"icon": "assets/blur/icon.png",
"entrypoints": {
"main": [
"eu.midnightdust.blur.fabric.BlurFabric"
],
"client": [
"com.tterrag.blur.Blur"
"eu.midnightdust.blur.fabric.BlurFabric"
]
},
"contact": {
@@ -17,17 +20,17 @@
"issues": "https://github.com/Motschen/Blur/issues"
},
"authors": [
"tterrag1098",
"Motschen",
"tterrag1098",
"Pyrofab",
"backryun",
"byquanton"
],
"description": "Modifies the background behind Minecraft GUIs to have a blur effect",
"description": "Various enhancements for the blur effect behind Minecraft GUIs",
"mixins": [
"mixins.blur.json"
"blur.mixins.json"
],
"depends": {
"satin": "*"
"minecraft": ">=1.21.2"
}
}

View File

@@ -1,19 +1,27 @@
# Done to increase the memory available to gradle.
org.gradle.jvmargs=-Xmx1G
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
enabled_platforms=fabric,neoforge
# Fabric Properties
# check these on https://fabricmc.net/develop
minecraft_version=1.20
yarn_mappings=1.20+build.1
loader_version=0.14.21
# Mod Properties
mod_version=3.1.0
maven_group=com.tterrag.blur
archives_base_name=blur
mod_version=5.2.0
maven_group=eu.midnightdust.blur
archives_base_name=blur
release_type=release
curseforge_id=393563
modrinth_id=NK39zBp2
# 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.83.0+1.20
satin_version=1.13.0
midnightlib_version=1.4.1-fabric
# Modloaders
fabric_loader_version=0.16.9
fabric_api_version=0.111.0+1.21.4
neoforge_version=21.4.10-beta
yarn_mappings_patch_neoforge_version = 1.21+build.4
# Libraries
midnightlib_version = 1.7.0+1.21.4
modmenu_version = 11.0.2

View File

@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
zipStorePath=wrapper/dists

115
neoforge/build.gradle Normal file
View File

@@ -0,0 +1,115 @@
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
if (project.supported_versions != "") gameVersions.addAll 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
if (project.supported_versions != "") gameVersions.addAll project.supported_versions
}
}
}
}

View File

@@ -0,0 +1 @@
loom.platform=neoforge

View File

@@ -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.MOD_ID, dist = Dist.CLIENT)
public class BlurNeoForge {
public BlurNeoForge() {
Blur.init();
}
@EventBusSubscriber(modid = Blur.MOD_ID, bus = EventBusSubscriber.Bus.GAME, value = Dist.CLIENT)
public static class ClientGameEvents {
@SubscribeEvent
public static void endClientTick(ClientTickEvent.Post event) {
RainbowColor.tick();
}
}
}

View File

@@ -0,0 +1,31 @@
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"
[[dependencies.blur]]
modId = "neoforge"
mandatory = true
versionRange = "[21.0,)"
ordering = "NONE"
side = "CLIENT"
[[dependencies.blur]]
modId = "minecraft"
mandatory = true
versionRange = "[1.21.2,)"
ordering = "NONE"
side = "CLIENT"

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

View File

@@ -1,11 +1,15 @@
pluginManagement {
repositories {
maven {
name = 'Fabric'
url = 'https://maven.fabricmc.net/'
}
maven { url "https://maven.fabricmc.net/" }
maven { url "https://maven.architectury.dev/" }
maven { url "https://maven.neoforged.net/releases" }
gradlePluginPortal()
}
}
rootProject.name = "blur"
include("common")
include("fabric")
include("neoforge")
//include("quilt")
rootProject.name = "blur"

View File

@@ -1,97 +0,0 @@
package com.tterrag.blur;
import com.tterrag.blur.config.BlurConfig;
import eu.midnightdust.lib.util.MidnightColorUtil;
import ladysnake.satin.api.event.ShaderEffectRenderCallback;
import ladysnake.satin.api.managed.ManagedShaderEffect;
import ladysnake.satin.api.managed.ShaderEffectManager;
import ladysnake.satin.api.managed.uniform.Uniform1f;
import net.fabricmc.api.ClientModInitializer;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.util.Identifier;
import java.util.Objects;
public class Blur implements ClientModInitializer {
public static final String MODID = "blur";
public static final MinecraftClient client = MinecraftClient.getInstance();
public static long start;
public static String prevScreen;
public static boolean screenHasBackground;
private static final ManagedShaderEffect blur = ShaderEffectManager.getInstance().manage(new Identifier(MODID, "shaders/post/fade_in_blur.json"),
shader -> shader.setUniformValue("Radius", (float) BlurConfig.radius));
private static final Uniform1f blurProgress = blur.findUniform1f("Progress");
@Override
public void onInitializeClient() {
BlurConfig.init("blur", BlurConfig.class);
ShaderEffectRenderCallback.EVENT.register((deltaTick) -> {
if (start > 0) {
blurProgress.set(getProgress(client.currentScreen != null));
blur.render(deltaTick);
}
});
}
private static boolean doFade = false;
public static void onScreenChange(Screen newGui) {
if (client.world != null) {
boolean excluded = newGui == null || BlurConfig.blurExclusions.stream().anyMatch(exclusion -> newGui.getClass().getName().contains(exclusion));
if (!excluded) {
screenHasBackground = false;
if (BlurConfig.showScreenTitle) System.out.println(newGui.getClass().getName());
blur.setUniformValue("Radius", (float) BlurConfig.radius);
if (doFade) {
start = System.currentTimeMillis();
doFade = false;
}
prevScreen = newGui.getClass().getName();
} else if (newGui == null && BlurConfig.fadeOutTimeMillis > 0 && !Objects.equals(prevScreen, "")) {
blur.setUniformValue("Radius", (float) BlurConfig.radius);
start = System.currentTimeMillis();
doFade = true;
} else {
screenHasBackground = false;
start = -1;
doFade = true;
prevScreen = "";
}
}
}
private static float getProgress(boolean fadeIn) {
float x;
if (fadeIn) {
x = Math.min((System.currentTimeMillis() - start) / (float) BlurConfig.fadeTimeMillis, 1);
if (BlurConfig.ease) x *= (2 - x); // easeInCubic
}
else {
x = Math.max(1 + (start - System.currentTimeMillis()) / (float) BlurConfig.fadeOutTimeMillis, 0);
if (BlurConfig.ease) x *= (2 - x); // easeOutCubic
if (x <= 0) {
start = 0;
screenHasBackground = false;
}
}
return x;
}
public static int getBackgroundColor(boolean second, boolean fadeIn) {
int a = second ? BlurConfig.gradientEndAlpha : BlurConfig.gradientStartAlpha;
var col = MidnightColorUtil.hex2Rgb(second ? BlurConfig.gradientEnd : BlurConfig.gradientStart);
int r = (col.getRGB() >> 16) & 0xFF;
int b = (col.getRGB() >> 8) & 0xFF;
int g = col.getRGB() & 0xFF;
float prog = getProgress(fadeIn);
a *= prog;
r *= prog;
g *= prog;
b *= prog;
return a << 24 | r << 16 | b << 8 | g;
}
}

View File

@@ -1,39 +0,0 @@
package com.tterrag.blur.config;
import com.google.common.collect.Lists;
import eu.midnightdust.lib.config.MidnightConfig;
import net.minecraft.client.gui.screen.ChatScreen;
import java.util.List;
public class BlurConfig extends MidnightConfig {
public static final String style = "style";
public static final String screens = "screens";
@Entry(category = screens)
public static List<String> blurExclusions = Lists.newArrayList(ChatScreen.class.getName(),
"com.replaymod.lib.de.johni0702.minecraft.gui.container.AbstractGuiOverlay$UserInputGuiScreen",
"ai.arcblroth.projectInception.client.InceptionInterfaceScreen",
"net.optifine.gui.GuiChatOF",
"io.github.darkkronicle.advancedchatcore.chat.AdvancedChatScreen",
"net.coderbot.iris.gui.screen.ShaderPackScreen");
@Entry(category = style, min = 0, max = 5000, width = 4)
public static int fadeTimeMillis = 200;
@Entry(category = style, min = 0, max = 5000, width = 4)
public static int fadeOutTimeMillis = 200;
@Entry(category = style)
public static boolean ease = true;
@Entry(category = style, isSlider = true, min = 0, max = 100)
public static int radius = 8;
@Entry(category = style, isColor = true, width = 7, min = 7)
public static String gradientStart = "#000000";
@Entry(category = style, isSlider = true, min = 0, max = 255)
public static int gradientStartAlpha = 75;
@Entry(category = style, isColor = true, width = 7, min = 7)
public static String gradientEnd = "#000000";
@Entry(category = style, isSlider = true, min = 0, max = 255)
public static int gradientEndAlpha = 75;
@Entry(category = screens)
public static boolean showScreenTitle = false;
}

View File

@@ -1,27 +0,0 @@
package com.tterrag.blur.mixin;
import com.mojang.blaze3d.systems.RenderSystem;
import com.tterrag.blur.Blur;
import com.tterrag.blur.config.BlurConfig;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.hud.InGameHud;
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(InGameHud.class)
public class MixinInGameHud {
@Shadow private int scaledWidth;
@Shadow private int scaledHeight;
@Final @Shadow private MinecraftClient client;
@Inject(at = @At("TAIL"), method = "render")
public void blur$onRender(DrawContext context, float tickDelta, CallbackInfo ci) {
if (client.currentScreen == null && client.world != null && Blur.start > 0 && !BlurConfig.blurExclusions.contains(Blur.prevScreen) && Blur.screenHasBackground) {
context.fillGradient(0, 0, this.scaledWidth, this.scaledHeight, Blur.getBackgroundColor(false, false), Blur.getBackgroundColor(true, false));
}
}
}

View File

@@ -1,24 +0,0 @@
package com.tterrag.blur.mixin;
import org.objectweb.asm.Opcodes;
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;
import com.tterrag.blur.Blur;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
@Mixin(MinecraftClient.class)
public class MixinMinecraftClient {
@Inject(method = "setScreen",
at = @At(value = "FIELD",
target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;",
opcode = Opcodes.PUTFIELD))
private void onScreenOpen(Screen newScreen, CallbackInfo info) {
Blur.onScreenChange(newScreen);
}
}

View File

@@ -1,55 +0,0 @@
package com.tterrag.blur.mixin;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
import org.jetbrains.annotations.Nullable;
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.Constant;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyConstant;
import com.tterrag.blur.Blur;
import net.minecraft.client.gui.screen.Screen;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(Screen.class)
public abstract class MixinScreen {
@Shadow @Nullable protected MinecraftClient client;
@Shadow @Final protected Text title;
private final Text blurConfig = Text.translatable("blur.midnightconfig.title");
@Inject(at = @At("HEAD"), method = "tick")
private void blur$reloadShader(CallbackInfo ci) {
if (this.client != null && this.title.equals(blurConfig)) {
Blur.onScreenChange(this.client.currentScreen);
}
}
@Inject(at = @At("HEAD"), method = "renderBackground")
public void blur$getBackgroundEnabled(DrawContext context, CallbackInfo ci) {
if (this.client != null && this.client.world != null) {
Blur.screenHasBackground = true;
}
}
@ModifyConstant(
method = "renderBackground",
constant = @Constant(intValue = -1072689136))
private int blur$getFirstBackgroundColor(int color) {
return Blur.getBackgroundColor(false, true);
}
@ModifyConstant(
method = "renderBackground",
constant = @Constant(intValue = -804253680))
private int blur$getSecondBackgroundColor(int color) {
return Blur.getBackgroundColor(true, true);
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -1,15 +0,0 @@
{
"blur.midnightconfig.title": "Blur Konfiguration",
"blur.midnightconfig.blurExclusions": "Blur-Ausnahmen",
"blur.midnightconfig.category.style": "Stil",
"blur.midnightconfig.category.screens": "Bildschirme",
"blur.midnightconfig.fadeTimeMillis": "Überblendzeit (in Millisekunden)",
"blur.midnightconfig.fadeOutTimeMillis": "Ausblendzeit (in milliseconds)",
"blur.midnightconfig.ease": "Geschmeidige Animation",
"blur.midnightconfig.radius": "Radius",
"blur.midnightconfig.gradientStart": "Farbverlauf-Anfangsfarbe",
"blur.midnightconfig.gradientEnd": "Farbverlauf-Endfarbe",
"blur.midnightconfig.gradientStartAlpha": "Farbverlauf-Anfangstransparenz",
"blur.midnightconfig.gradientEndAlpha": "Farbverlauf-Endstransparenz",
"blur.midnightconfig.showScreenTitle": "Logge Bildschirmtitel"
}

View File

@@ -1,15 +0,0 @@
{
"blur.midnightconfig.title": "Blur Config",
"blur.midnightconfig.category.style": "Style",
"blur.midnightconfig.category.screens": "Screens",
"blur.midnightconfig.blurExclusions": "Blur Exclusions",
"blur.midnightconfig.fadeTimeMillis": "Fade Time (in milliseconds)",
"blur.midnightconfig.fadeOutTimeMillis": "Fade Out Time (in milliseconds)",
"blur.midnightconfig.ease": "Ease Animation",
"blur.midnightconfig.radius": "Radius",
"blur.midnightconfig.gradientStart": "Gradient Start Color",
"blur.midnightconfig.gradientEnd": "Gradient End Color",
"blur.midnightconfig.gradientStartAlpha": "Gradient Start Alpha",
"blur.midnightconfig.gradientEndAlpha": "Gradient End Alpha",
"blur.midnightconfig.showScreenTitle": "Log screen title"
}

View File

@@ -1,8 +0,0 @@
{
"blur.midnightconfig.title": "Настройки Blur",
"blur.midnightconfig.blurExclusions": "Исключения размытия",
"blur.midnightconfig.fadeTimeMillis": "Время размытия (в милисекундах)",
"blur.midnightconfig.radius": "Радиус размытия",
"blur.midnightconfig.gradientStart": "Верхний цвет градиента",
"blur.midnightconfig.gradientEnd": "Нижний цвет градиента"
}

View File

@@ -1,15 +0,0 @@
{
"blur.midnightconfig.title": "模糊 (Blur) 配置",
"blur.midnightconfig.category.style": "样式",
"blur.midnightconfig.category.screens": "屏幕",
"blur.midnightconfig.blurExclusions": "模糊排除",
"blur.midnightconfig.fadeTimeMillis": "淡入时间(毫秒)",
"blur.midnightconfig.fadeOutTimeMillis": "淡出时间(毫秒)",
"blur.midnightconfig.ease": "简单动画",
"blur.midnightconfig.radius": "半径",
"blur.midnightconfig.gradientStart": "渐变起始色",
"blur.midnightconfig.gradientEnd": "渐变结束色",
"blur.midnightconfig.gradientStartAlpha": "渐变起始阿尔法通道",
"blur.midnightconfig.gradientEndAlpha": "渐变结束阿尔法通道",
"blur.midnightconfig.showScreenTitle": "显示屏幕标题"
}

View File

@@ -1,67 +0,0 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "blur:fade_in_blur",
"intarget": "minecraft:main",
"outtarget": "swap",
"uniforms": [
{
"name": "BlurDir",
"values": [ 1.0, 0.0 ]
},
{
"name": "Radius",
"values": [ 8.0 ]
}
]
},
{
"name": "blur:fade_in_blur",
"intarget": "swap",
"outtarget": "minecraft:main",
"uniforms": [
{
"name": "BlurDir",
"values": [ 0.0, 1.0 ]
},
{
"name": "Radius",
"values": [ 8.0 ]
}
]
},
{
"name": "blur:fade_in_blur",
"intarget": "minecraft:main",
"outtarget": "swap",
"uniforms": [
{
"name": "BlurDir",
"values": [ 1.0, 0.0 ]
},
{
"name": "Radius",
"values": [ 8.0 ]
}
]
},
{
"name": "blur:fade_in_blur",
"intarget": "swap",
"outtarget": "minecraft:main",
"uniforms": [
{
"name": "BlurDir",
"values": [ 0.0, 1.0 ]
},
{
"name": "Radius",
"values": [ 8.0 ]
}
]
}
]
}

View File

@@ -1,35 +0,0 @@
#version 150
uniform sampler2D DiffuseSampler;
in vec2 texCoord;
in vec2 oneTexel;
uniform vec2 InSize;
uniform vec2 BlurDir;
uniform float Radius;
uniform float Progress;
out vec4 fragColor;
void main() {
vec4 blurred = vec4(0.0);
float totalStrength = 0.0;
float totalAlpha = 0.0;
float totalSamples = 0.0;
float progRadius = floor(Radius * Progress);
for(float r = -progRadius; r <= progRadius; r += 1.0) {
vec4 sample = texture(DiffuseSampler, texCoord + oneTexel * r * BlurDir);
// Accumulate average alpha
totalAlpha = totalAlpha + sample.a;
totalSamples = totalSamples + 1.0;
// Accumulate smoothed blur
float strength = 1.0 - abs(r / progRadius);
totalStrength = totalStrength + strength;
blurred = blurred + sample;
}
fragColor = vec4(blurred.rgb / (progRadius * 2.0 + 1.0), totalAlpha);
}

View File

@@ -1,21 +0,0 @@
{
"blend": {
"func": "add",
"srcrgb": "srcalpha",
"dstrgb": "1-srcalpha"
},
"vertex": "sobel",
"fragment": "blur:fade_in_blur",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "BlurDir", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "Radius", "type": "float", "count": 1, "values": [ 5.0 ] },
{ "name": "Progress", "type": "float", "count": 1, "values": [ 0.0 ] }
]
}

View File

@@ -1,14 +0,0 @@
{
"required": true,
"minVersion": "0.8",
"package": "com.tterrag.blur.mixin",
"compatibilityLevel": "JAVA_17",
"client": [
"MixinScreen",
"MixinMinecraftClient",
"MixinInGameHud"
],
"injectors": {
"defaultRequire": 1
}
}