mirror of
https://github.com/Motschen/Blur.git
synced 2025-12-18 12:45:10 +01:00
Move Blur to Satin
This commit is contained in:
@@ -1,42 +1,24 @@
|
||||
package com.tterrag.blur;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import ladysnake.satin.api.event.ShaderEffectRenderCallback;
|
||||
import ladysnake.satin.api.experimental.managed.Uniform1f;
|
||||
import ladysnake.satin.api.managed.ManagedShaderEffect;
|
||||
import ladysnake.satin.api.managed.ShaderEffectManager;
|
||||
import net.fabricmc.api.ClientModInitializer;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
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 org.apache.commons.lang3.ArrayUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.StandardOpenOption;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.tterrag.blur.mixin.MixinGameRenderer;
|
||||
import com.tterrag.blur.util.ReflectionHelper;
|
||||
import com.tterrag.blur.util.ShaderResourcePack;
|
||||
|
||||
import net.fabricmc.api.ClientModInitializer;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gl.GlUniform;
|
||||
import net.minecraft.client.gl.PostProcessShader;
|
||||
import net.minecraft.client.gl.ShaderEffect;
|
||||
import net.minecraft.client.gui.screen.ChatScreen;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.client.render.GameRenderer;
|
||||
import net.minecraft.client.resource.ClientResourcePackContainer;
|
||||
import net.minecraft.client.texture.NativeImage;
|
||||
import net.minecraft.resource.ResourcePackCompatibility;
|
||||
import net.minecraft.resource.ResourcePackContainer;
|
||||
import net.minecraft.resource.ResourcePackContainer.Factory;
|
||||
import net.minecraft.resource.ResourcePackContainerManager;
|
||||
import net.minecraft.resource.ResourcePackCreator;
|
||||
import net.minecraft.resource.ReloadableResourceManager;
|
||||
import net.minecraft.text.LiteralText;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public class Blur implements ClientModInitializer {
|
||||
|
||||
@@ -52,39 +34,16 @@ public class Blur implements ClientModInitializer {
|
||||
String gradientEndColor = "75000000";
|
||||
}
|
||||
|
||||
private Field _listShaders;
|
||||
private long start;
|
||||
|
||||
public ConfigJson configs = new ConfigJson();
|
||||
public int colorFirst, colorSecond;
|
||||
|
||||
private ShaderResourcePack dummyPack = new ShaderResourcePack();
|
||||
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 Blur instance;
|
||||
|
||||
public Blur() throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
|
||||
ResourcePackContainerManager<ClientResourcePackContainer> rps = ReflectionHelper.getValue(MinecraftClient.class, MinecraftClient.getInstance(), "field_1715", "resourcePackContainerManager");
|
||||
rps.addCreator(new ResourcePackCreator() {
|
||||
|
||||
@Override
|
||||
public <T extends ResourcePackContainer> void registerContainer(Map<String, T> var1, Factory<T> factory) {
|
||||
NativeImage img = null;
|
||||
try {
|
||||
img = NativeImage.read(dummyPack.openRoot("icon.png"));
|
||||
} catch (IOException e) {
|
||||
LogManager.getLogger().error("Could not load blur's icon.png", e);
|
||||
}
|
||||
@SuppressWarnings("unchecked")
|
||||
T var3 = (T) new ClientResourcePackContainer("blur", true, () -> dummyPack, new LiteralText(dummyPack.getName()), new LiteralText("Default shaders for Blur"),
|
||||
ResourcePackCompatibility.COMPATIBLE, ResourcePackContainer.InsertionPosition.BOTTOM, true, img);
|
||||
if (var3 != null) {
|
||||
var1.put("blur", var3);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
instance = this;
|
||||
}
|
||||
public static final Blur INSTANCE = new Blur();
|
||||
|
||||
@Override
|
||||
public void onInitializeClient() {
|
||||
@@ -101,24 +60,19 @@ public class Blur implements ClientModInitializer {
|
||||
}
|
||||
colorFirst = Integer.parseUnsignedInt(configs.gradientStartColor, 16);
|
||||
colorSecond = Integer.parseUnsignedInt(configs.gradientEndColor, 16);
|
||||
}
|
||||
|
||||
public void registerReloadListeners(ReloadableResourceManager manager) {
|
||||
manager.addPack(dummyPack);
|
||||
ShaderEffectRenderCallback.EVENT.register((deltaTick) -> {
|
||||
if (MinecraftClient.getInstance().currentScreen != null) {
|
||||
blurProgress.set(getProgress());
|
||||
blur.render(deltaTick);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void onScreenChange(Screen newGui) {
|
||||
if (_listShaders == null) {
|
||||
_listShaders = ReflectionHelper.getField(ShaderEffect.class, "field_1497", "passes");
|
||||
}
|
||||
if (MinecraftClient.getInstance().world != null) {
|
||||
GameRenderer er = MinecraftClient.getInstance().gameRenderer;
|
||||
boolean excluded = newGui == null || ArrayUtils.contains(configs.blurExclusions, newGui.getClass().getName());
|
||||
if (!er.isShaderEnabled() && !excluded) {
|
||||
((MixinGameRenderer) er).invokeLoadShader(new Identifier("shaders/post/fade_in_blur.json"));
|
||||
if (!excluded) {
|
||||
start = System.currentTimeMillis();
|
||||
} else if (er.isShaderEnabled() && excluded) {
|
||||
er.disableShader();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -131,31 +85,13 @@ public class Blur implements ClientModInitializer {
|
||||
return Math.min((System.currentTimeMillis() - start) / (float) configs.fadeTimeMillis, 1);
|
||||
}
|
||||
|
||||
public void onPostRenderTick() {
|
||||
if (MinecraftClient.getInstance().currentScreen != null && MinecraftClient.getInstance().gameRenderer.isShaderEnabled()) {
|
||||
ShaderEffect sg = MinecraftClient.getInstance().gameRenderer.getShader();
|
||||
try {
|
||||
@SuppressWarnings("unchecked")
|
||||
List<PostProcessShader> shaders = (List<PostProcessShader>) _listShaders.get(sg);
|
||||
for (PostProcessShader s : shaders) {
|
||||
GlUniform su = s.getProgram().getUniformByName("Progress");
|
||||
if (su != null) {
|
||||
su.set(getProgress());
|
||||
}
|
||||
}
|
||||
} catch (IllegalArgumentException | IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
float prog = INSTANCE.getProgress();
|
||||
a *= prog;
|
||||
r *= prog;
|
||||
g *= prog;
|
||||
|
||||
Reference in New Issue
Block a user