Files
Blur/src/main/java/com/tterrag/blur/Blur.java

84 lines
3.0 KiB
Java

package com.tterrag.blur;
import com.tterrag.blur.config.BlurConfig;
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 me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
import me.sargunvohra.mcmods.autoconfig1u.serializer.JanksonConfigSerializer;
import net.fabricmc.api.ClientModInitializer;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.util.Identifier;
import org.apache.commons.lang3.ArrayUtils;
public class Blur implements ClientModInitializer {
public static BlurConfig BLUR_CONFIG;
public static final String MODID = "blur";
private long start;
public int colorFirst, colorSecond;
private final ManagedShaderEffect blur = ShaderEffectManager.getInstance().manage(new Identifier(MODID, "shaders/post/fade_in_blur.json"),
shader -> shader.setUniformValue("Radius", (float) getRadius()));
private final Uniform1f blurProgress = blur.findUniform1f("Progress");
public static final Blur INSTANCE = new Blur();
@Override
public void onInitializeClient() {
AutoConfig.register(BlurConfig.class, JanksonConfigSerializer::new);
BLUR_CONFIG = AutoConfig.getConfigHolder(BlurConfig.class).getConfig();
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 || ArrayUtils.contains(BLUR_CONFIG.blurExclusions, newGui.getClass().getName());
if (!excluded) {
blur.setUniformValue("Radius", (float) getRadius());
colorFirst = Integer.parseUnsignedInt(BLUR_CONFIG.gradientStartColor, 16);
colorSecond = Integer.parseUnsignedInt(BLUR_CONFIG.gradientEndColor, 16);
if (doFade == true) {
start = System.currentTimeMillis();
doFade = false;
}
} else {
start = -1;
doFade = true;
}
}
}
public int getRadius() {
return BLUR_CONFIG.radius;
}
private float getProgress() {
return Math.min((System.currentTimeMillis() - start) / (float) BLUR_CONFIG.fadeTimeMillis, 1);
}
public int getBackgroundColor(boolean second) {
int color = second ? colorSecond : colorFirst;
int a = color >>> 24;
int r = (color >> 16) & 0xFF;
int b = (color >> 8) & 0xFF;
int g = color & 0xFF;
float prog = INSTANCE.getProgress();
a *= prog;
r *= prog;
g *= prog;
b *= prog;
return a << 24 | r << 16 | b << 8 | g;
}
}