89 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
Motschen
b4efd59322 Blur 3.1.0 - 1.20 & Fade Out Fix
- Update to 1.20
- Fix fade out applying to screens without blur
- Enable fade out effect by default
2023-06-10 16:42:44 +02:00
Martin Prokoph
98b398ab6c Merge pull request #74 from backryun/fabric-1.19.4
Upstream Fabric dependencys
2023-06-10 15:09:23 +02:00
Martin Prokoph
66e0c0408a Merge pull request #68 from HhiPyrene/fabric-1.19.4
zh_cn
2023-06-10 15:09:02 +02:00
backryun
11dde13801 Upstream Fabric dependencys 2023-04-28 19:47:29 +09:00
HhiPyrene
3ea75d519c Add files via upload 2023-03-26 10:57:10 +08:00
Motschen
ab80391b29 Blur 3.0.0 - Fade out & 1.19.4
- Add fade out effect (closes #41)
  - Duration can be configured seperately
  - Disabled by default until I get some feedback on it
- Improve config screen (tabs & sliders)
- French translations by @Calvineries
- Update to 1.19.4 by @backryun & @byquanton
2023-03-22 18:19:22 +01:00
Martin Prokoph
a51b02aa04 Merge pull request #62 from Calvineries/patch-1
Create fr_fr.json
2023-03-22 14:14:04 +01:00
Martin Prokoph
766f30b466 Merge pull request #64 from byquanton/fabric-1.19.4
Port to 1.19.4
2023-03-22 14:04:55 +01:00
Motschen
77badf3494 Implement fade out effect, better config screen 2023-03-22 14:45:53 +01:00
Martin Prokoph
c868cf1ef7 Merge branch 'fabric-1.19.3' into fabric-1.19.4 2023-03-22 14:02:57 +01:00
byquanton
876c5256ae 1.19.4 Port 2023-03-17 22:42:15 +01:00
byquanton
0f279a0f91 Merge remote-tracking branch 'backryun/fabric-1.19.3' into fabric-1.19.4 2023-03-17 21:32:33 +01:00
backryun
d58cd66cc8 Merge remote-tracking branch 'origin/fabric-1.19.3' into fabric-1.19.3 2023-03-08 23:07:37 +09:00
backryun
44ae96ef50 Update Gradle 8.0.2 2023-03-08 23:07:27 +09:00
backryun
427d453f79 Upstream Gradle version 8.0.2 2023-03-05 19:59:41 +09:00
backryun
521cc15306 Upstream Gradle,Fabric Dependencys 2023-02-28 22:20:04 +09:00
backryun
3528305c93 Upstream Fabric dependencys 2023-02-06 22:27:26 +09:00
Calvineries
2ad42cf1e9 Create fr_fr.json 2023-01-21 09:54:25 +01:00
backryun
84cc94fba4 Upsteram Fabric components 2023-01-03 23:45:22 +09:00
Martin Prokoph
e139a2319e Blur 2.6.1 2022-12-14 16:27:25 +00:00
Martin Prokoph
0d90cac688 Merge pull request #61 from backryun/fabric-1.19.3
Upstream components for 1.19.3
2022-12-14 16:21:07 +00:00
backryun
2fb8f29fee Fix workflow for new branch 2022-12-12 22:28:14 +09:00
backryun
f69af4c800 Switch to 1.19.3 support 2022-12-12 22:27:38 +09:00
backryun
dc94bd3f5a Upstream Fabric loader and API 2022-11-30 22:51:03 +09:00
backryun
7dd93da833 Upstream gradle 7.6 official version + fabric API 2022-11-25 23:35:02 +09:00
Martin Prokoph
7258cefb5d Merge pull request #56 from FITFC/fabric-1.19
updated pt_br
2022-11-12 19:32:40 +01:00
Martin Prokoph
dc7e5bb1e0 Merge pull request #57 from backryun/fabric-1.19
Expend build environment JAVA 19 + Update midnightlib 1.0.0
2022-11-12 19:32:12 +01:00
backryun
d42545570e Update gradle 7.6-rc2 2022-11-09 23:02:51 +09:00
backryun
9854e97996 Update fabric API 0.66.0 2022-11-09 23:00:51 +09:00
backryun
7b253f50c1 Expend build environment JAVA 19 + Update midnightlib 1.0.0 2022-10-31 22:38:45 +09:00
FITFC
8a1824c906 updated pt_br 2022-10-29 20:04:53 -05:00
Martin Prokoph
f958e43bd1 Merge pull request #55 from backryun/fabric-1.19
Add workflow and Updated Dependencys
2022-10-29 13:53:44 +02:00
backryun
7ab190d697 Workflow! 2022-10-29 14:11:55 +09:00
backryun
2dc68068e2 Update Dependencys
Fabric yarn+loader
midnightlib
2022-10-29 14:10:36 +09:00
Martin Prokoph
35635ad633 Merge pull request #53 from GodGun968/patch-1
Update zh_cn.json
2022-10-19 20:11:35 +02:00
Martin Prokoph
9c4f753fcf Merge pull request #52 from ConsoleLogLuke/iris-exclusion
Add Iris's shader pack screen to the exclusion list
2022-10-19 20:11:10 +02:00
Martin Prokoph
13d6398de0 Merge pull request #49 from Altegar/patch-1
Create uk_ua.json
2022-10-19 20:10:23 +02:00
backryun
8e0da73778 migrate to 1.19.2 and update dependencies (#51)
* migrate to 1.19.2

* Update dependencies

* Update yarn+API
2022-10-19 18:06:51 +00:00
神枪968
e668f3fa60 Update zh_cn.json 2022-10-16 10:44:01 +08:00
Luke Chambers
6000ba8f64 Add Iris's shader pack screen to the exclusion list 2022-10-10 01:42:00 -04:00
Sushomeister
e85231757a Create uk_ua.json 2022-07-26 14:35:53 +03:00
58 changed files with 1263 additions and 492 deletions

29
.github/workflows/gradle.yml vendored Normal file
View File

@@ -0,0 +1,29 @@
on:
push:
branches: [ "fabric-1.20.4" ]
pull_request:
branches: [ "fabric-1.20.4" ]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build --stacktrace --info
- name: Upload a Build Artifact
uses: actions/upload-artifact@v3
with:
name: Blur-Artifact
path: build/libs/blur-*.*.jar
if-no-files-found: error

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 '0.12-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,12 @@
{
"blur.midnightconfig.title": "Configuration du flou",
"blur.midnightconfig.blurExclusions": "Flouter les exclusions",
"blur.midnightconfig.fadeTimeMillis": "Temps de fondu (en millisecondes)",
"blur.midnightconfig.ease": "Fluidité de l'animation",
"blur.midnightconfig.radius": "Rayon",
"blur.midnightconfig.gradientStart": "Couleur de départ du dégradé",
"blur.midnightconfig.gradientEnd": "Couleur de fin du dégradé",
"blur.midnightconfig.gradientStartAlpha": "Alpha de début du dégradé",
"blur.midnightconfig.gradientEndAlpha": "Alpha de fin du dégradé",
"blur.midnightconfig.showScreenTitle": "Montrer le titre de l'écran"
}

View File

@@ -0,0 +1,12 @@
{
"blur.midnightconfig.title": "Configuração de desfoque",
"blur.midnightconfig.blurExclusions": "Desfocar exclusões",
"blur.midnightconfig.fadeTimeMillis": "Tempo de desvanecimento (em milissegundos)",
"blur.midnightconfig.ease": "Animação fácil",
"blur.midnightconfig.radius": "Raio",
"blur.midnightconfig.gradientStart": "Cor inicial do gradiente",
"blur.midnightconfig.gradientEnd": "Cor final do gradiente",
"blur.midnightconfig.gradientStartAlpha": "Alfa de início gradiente",
"blur.midnightconfig.gradientEndAlpha": "Alfa de Gradiente Final",
"blur.midnightconfig.showScreenTitle": "Mostrar título da tela"
}

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,12 @@
{
"blur.midnightconfig.title": "Конфігурація Blur",
"blur.midnightconfig.blurExclusions": "Винятки розмиття",
"blur.midnightconfig.fadeTimeMillis": "Час появи розмиття (у мілісекундах)",
"blur.midnightconfig.ease": "Пом'якшення анімації",
"blur.midnightconfig.radius": "Радіус",
"blur.midnightconfig.gradientStart": "Початковий колір градієнта",
"blur.midnightconfig.gradientEnd": "Кінцевий колір градієнта",
"blur.midnightconfig.gradientStartAlpha": "Початкова прозорість градієнта",
"blur.midnightconfig.gradientEndAlpha": "Кінцева прозорість градієнтаa",
"blur.midnightconfig.showScreenTitle": "Показати назву екрана"
}

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,30 +1,36 @@
{
"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::INSTANCE"
"eu.midnightdust.blur.fabric.BlurFabric"
]
},
"contact": {
"homepage": "https://www.curseforge.com/minecraft/mc-mods/blur-fabric",
"homepage": "https://modrinth.com/mod/blur-fabric",
"sources": "https://github.com/Motschen/Blur",
"issues": "https://github.com/Motschen/Blur/issues"
},
"authors": [
"Motschen",
"tterrag1098",
"Pyrofab",
"Motschen",
"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": {
"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.19
yarn_mappings=1.19+build.1
loader_version=0.14.6
# Mod Properties
mod_version = 2.6.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.55.1+1.19
satin_version = 1.8.0
midnightlib_version=0.5.2
# 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-7.4.2-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,86 +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.ChatScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.util.Identifier;
import java.util.ArrayList;
import java.util.List;
public class Blur implements ClientModInitializer {
public static final String MODID = "blur";
public static List<String> defaultExclusions = new ArrayList<>();
private long start;
private final ManagedShaderEffect blur = ShaderEffectManager.getInstance().manage(new Identifier(MODID, "shaders/post/fade_in_blur.json"),
shader -> shader.setUniformValue("Radius", (float) BlurConfig.radius));
private final Uniform1f blurProgress = blur.findUniform1f("Progress");
public static final Blur INSTANCE = new Blur();
@Override
public void onInitializeClient() {
defaultExclusions.add(ChatScreen.class.getName());
defaultExclusions.add("com.replaymod.lib.de.johni0702.minecraft.gui.container.AbstractGuiOverlay$UserInputGuiScreen");
defaultExclusions.add("ai.arcblroth.projectInception.client.InceptionInterfaceScreen");
defaultExclusions.add("net.optifine.gui.GuiChatOF");
defaultExclusions.add("io.github.darkkronicle.advancedchatcore.chat.AdvancedChatScreen");
BlurConfig.init("blur", BlurConfig.class);
ShaderEffectRenderCallback.EVENT.register((deltaTick) -> {
if (start > 0) {
blurProgress.set(getProgress());
blur.render(deltaTick);
}
});
}
private boolean doFade = false;
public void onScreenChange(Screen newGui) {
if (MinecraftClient.getInstance().world != null) {
boolean excluded = newGui == null || BlurConfig.blurExclusions.stream().anyMatch(exclusion -> newGui.getClass().getName().contains(exclusion));
if (!excluded) {
if (BlurConfig.showScreenTitle) System.out.println(newGui.getClass().getName());
blur.setUniformValue("Radius", (float) BlurConfig.radius);
if (doFade) {
start = System.currentTimeMillis();
doFade = false;
}
} else {
start = -1;
doFade = true;
}
}
}
private float getProgress() {
float x = Math.min((System.currentTimeMillis() - start) / (float) BlurConfig.fadeTimeMillis, 1);
if (BlurConfig.ease) x *= (2 - x); // easeOutCubic
return x;
}
public int getBackgroundColor(boolean second) {
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 = INSTANCE.getProgress();
a *= prog;
r *= prog;
g *= prog;
b *= prog;
return a << 24 | r << 16 | b << 8 | g;
}
}

View File

@@ -1,27 +0,0 @@
package com.tterrag.blur.config;
import com.tterrag.blur.Blur;
import eu.midnightdust.lib.config.MidnightConfig;
import java.util.List;
public class BlurConfig extends MidnightConfig {
@Entry
public static List<String> blurExclusions = Blur.defaultExclusions;
@Entry(min = 0, max = 5000, width = 4)
public static int fadeTimeMillis = 200;
@Entry
public static boolean ease = true;
@Entry(min = 0, max = 500, width = 3)
public static int radius = 8;
@Entry(isColor = true, width = 7, min = 7)
public static String gradientStart = "#000000";
@Entry(min = 0, max = 255)
public static int gradientStartAlpha = 75;
@Entry(isColor = true, width = 7, min = 7)
public static String gradientEnd = "#000000";
@Entry(min = 0, max = 255)
public static int gradientEndAlpha = 75;
@Entry
public static boolean showScreenTitle = 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.INSTANCE.onScreenChange(newScreen);
}
}

View File

@@ -1,51 +0,0 @@
package com.tterrag.blur.mixin;
import com.tterrag.blur.config.BlurConfig;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.TextColor;
import net.minecraft.util.Formatting;
import org.jetbrains.annotations.Nullable;
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;
import java.util.Locale;
@Mixin(Screen.class)
public abstract class MixinScreen {
@Shadow @Nullable protected MinecraftClient client;
@Shadow protected TextRenderer textRenderer;
@Inject(at = @At("HEAD"), method = "tick")
private void blur$reloadShader(CallbackInfo ci) {
if (this.getClass().toString().toLowerCase(Locale.ROOT).contains("midnightconfigscreen") && this.client != null) {
Blur.INSTANCE.onScreenChange(this.client.currentScreen);
}
}
@ModifyConstant(
method = "renderBackground(Lnet/minecraft/client/util/math/MatrixStack;I)V",
constant = @Constant(intValue = -1072689136))
private int blur$getFirstBackgroundColor(int color) {
return Blur.INSTANCE.getBackgroundColor(false);
}
@ModifyConstant(
method = "renderBackground(Lnet/minecraft/client/util/math/MatrixStack;I)V",
constant = @Constant(intValue = -804253680))
private int blur$getSecondBackgroundColor(int color) {
return Blur.INSTANCE.getBackgroundColor(true);
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -1,12 +0,0 @@
{
"blur.midnightconfig.title": "Blur Konfiguration",
"blur.midnightconfig.blurExclusions": "Blur-Ausnahmen",
"blur.midnightconfig.fadeTimeMillis": "Überblendzeit (in Millisekunden)",
"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": "Zeige Bildschirmtitel"
}

View File

@@ -1,12 +0,0 @@
{
"blur.midnightconfig.title": "Blur Config",
"blur.midnightconfig.blurExclusions": "Blur Exclusions",
"blur.midnightconfig.fadeTimeMillis": "Fade 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": "Show screen title"
}

View File

@@ -1,8 +0,0 @@
{
"blur.midnightconfig.title": "Definições de desfoque",
"blur.midnightconfig.blurExclusions": "Exclusões de desfoque",
"blur.midnightconfig.fadeTimeMillis": "Esmaecimento (em milissegundos)",
"blur.midnightconfig.radius": "Raio",
"blur.midnightconfig.gradientStart": "Cor de início do gradiente",
"blur.midnightconfig.gradientEnd": "Cor de término do gradiente"
}

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,7 +0,0 @@
{
"blur.midnightconfig.title": "模糊配置",
"blur.midnightconfig.fadeTimeMillis": "淡入时间(毫秒)",
"blur.midnightconfig.radius": "半径",
"blur.midnightconfig.gradientStart": "渐变起始色",
"blur.midnightconfig.gradientEnd": "渐变结束色"
}

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,13 +0,0 @@
{
"required": true,
"minVersion": "0.8",
"package": "com.tterrag.blur.mixin",
"compatibilityLevel": "JAVA_17",
"client": [
"MixinScreen",
"MixinMinecraftClient"
],
"injectors": {
"defaultRequire": 1
}
}