mirror of
https://github.com/Motschen/Blur.git
synced 2025-12-16 11:45:09 +01:00
Initial Commit
This commit is contained in:
50
src/main/java/com/tterrag/blurbg/BlurBG.java
Normal file
50
src/main/java/com/tterrag/blurbg/BlurBG.java
Normal file
@@ -0,0 +1,50 @@
|
||||
package com.tterrag.blurbg;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiChat;
|
||||
import net.minecraft.client.renderer.EntityRenderer;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.event.GuiOpenEvent;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.common.config.Configuration;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.common.Mod.EventHandler;
|
||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
|
||||
@Mod(modid = "blurbg", name = "BlurBG")
|
||||
public class BlurBG {
|
||||
|
||||
private String[] blurExclusions;
|
||||
|
||||
@EventHandler
|
||||
public void preInit(FMLPreInitializationEvent event) {
|
||||
MinecraftForge.EVENT_BUS.register(this);
|
||||
|
||||
Configuration config = new Configuration(new File(event.getModConfigurationDirectory(), "blurbg.cfg"));
|
||||
|
||||
blurExclusions = config.getStringList("guiExclusions", Configuration.CATEGORY_GENERAL, new String[] {
|
||||
GuiChat.class.getName(),
|
||||
}, "A list of classes to be excluded from the blur shader.");
|
||||
|
||||
config.save();
|
||||
}
|
||||
|
||||
@SuppressWarnings("null")
|
||||
@SubscribeEvent
|
||||
public void onGuiChange(GuiOpenEvent event) {
|
||||
if (Minecraft.getMinecraft().world != null) {
|
||||
EntityRenderer er = Minecraft.getMinecraft().entityRenderer;
|
||||
if (!er.isShaderActive() && event.getGui() != null && !ArrayUtils.contains(blurExclusions, event.getGui().getClass().getName())) {
|
||||
er.loadShader(new ResourceLocation("blurbg", "shaders/post/blur.json"));
|
||||
} else if (er.isShaderActive() && event.getGui() == null) {
|
||||
er.stopUseShader();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
32
src/main/java/com/tterrag/blurbg/BlurBGPlugin.java
Normal file
32
src/main/java/com/tterrag/blurbg/BlurBGPlugin.java
Normal file
@@ -0,0 +1,32 @@
|
||||
package com.tterrag.blurbg;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin;
|
||||
|
||||
public class BlurBGPlugin implements IFMLLoadingPlugin {
|
||||
|
||||
@Override
|
||||
public String[] getASMTransformerClass() {
|
||||
return new String[] { "com.tterrag.blurbg.BlurBGTransformer" };
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getModContainerClass() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSetupClass() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectData(Map<String, Object> data) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTransformerClass() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
65
src/main/java/com/tterrag/blurbg/BlurBGTransformer.java
Normal file
65
src/main/java/com/tterrag/blurbg/BlurBGTransformer.java
Normal file
@@ -0,0 +1,65 @@
|
||||
package com.tterrag.blurbg;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.objectweb.asm.ClassReader;
|
||||
import org.objectweb.asm.ClassWriter;
|
||||
import org.objectweb.asm.Opcodes;
|
||||
import org.objectweb.asm.tree.AbstractInsnNode;
|
||||
import org.objectweb.asm.tree.ClassNode;
|
||||
import org.objectweb.asm.tree.LdcInsnNode;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class BlurBGTransformer implements IClassTransformer {
|
||||
|
||||
private static final String GUI_SCREEN_CLASS_NAME = "net.minecraft.client.gui.GuiScreen";
|
||||
|
||||
private static final String DRAW_WORLD_BAGKGROUND_METHOD = "drawWorldBackground";
|
||||
private static final String DRAW_WORLD_BAGKGROUND_METHOD_OBF = "func_146270_b";
|
||||
|
||||
@Override
|
||||
public byte[] transform(String name, String transformedName, byte[] basicClass) {
|
||||
if (transformedName.equals(GUI_SCREEN_CLASS_NAME)) {
|
||||
System.out.println("Transforming Class [" + transformedName + "], Method [" + DRAW_WORLD_BAGKGROUND_METHOD + "]");
|
||||
|
||||
ClassNode classNode = new ClassNode();
|
||||
ClassReader classReader = new ClassReader(basicClass);
|
||||
classReader.accept(classNode, 0);
|
||||
|
||||
Iterator<MethodNode> methods = classNode.methods.iterator();
|
||||
|
||||
while (methods.hasNext()) {
|
||||
MethodNode m = methods.next();
|
||||
if (m.name.equals(DRAW_WORLD_BAGKGROUND_METHOD) || m.name.equals(DRAW_WORLD_BAGKGROUND_METHOD_OBF)) {
|
||||
for (int i = 0; i < m.instructions.size(); i++) {
|
||||
AbstractInsnNode next = m.instructions.get(i);
|
||||
|
||||
// if (next.getOpcode() == Opcodes.INVOKEVIRTUAL && ((MethodInsnNode)next).name.equals(DRAW_GRADIENT_RECT_METHOD_NAME)) {
|
||||
// while (!(next instanceof LabelNode)) {
|
||||
// m.instructions.remove(next);
|
||||
// next = m.instructions.get(--i);
|
||||
// }
|
||||
// break;
|
||||
// }
|
||||
if (next.getOpcode() == Opcodes.LDC) {
|
||||
// TODO make this configurable?
|
||||
((LdcInsnNode)next).cst = ((LdcInsnNode)next.getNext()).cst = 0x66000000;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
|
||||
classNode.accept(cw);
|
||||
System.out.println("Transforming " + transformedName + " Finished.");
|
||||
return cw.toByteArray();
|
||||
}
|
||||
|
||||
return basicClass;
|
||||
}
|
||||
|
||||
}
|
||||
67
src/main/resources/assets/blurbg/shaders/post/blur.json
Normal file
67
src/main/resources/assets/blurbg/shaders/post/blur.json
Normal file
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"targets": [
|
||||
"swap"
|
||||
],
|
||||
"passes": [
|
||||
{
|
||||
"name": "blur",
|
||||
"intarget": "minecraft:main",
|
||||
"outtarget": "swap",
|
||||
"uniforms": [
|
||||
{
|
||||
"name": "BlurDir",
|
||||
"values": [ 1.0, 0.0 ]
|
||||
},
|
||||
{
|
||||
"name": "Radius",
|
||||
"values": [ 20.0 ]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "blur",
|
||||
"intarget": "swap",
|
||||
"outtarget": "minecraft:main",
|
||||
"uniforms": [
|
||||
{
|
||||
"name": "BlurDir",
|
||||
"values": [ 0.0, 1.0 ]
|
||||
},
|
||||
{
|
||||
"name": "Radius",
|
||||
"values": [ 20.0 ]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "blur",
|
||||
"intarget": "minecraft:main",
|
||||
"outtarget": "swap",
|
||||
"uniforms": [
|
||||
{
|
||||
"name": "BlurDir",
|
||||
"values": [ 1.0, 0.0 ]
|
||||
},
|
||||
{
|
||||
"name": "Radius",
|
||||
"values": [ 20.0 ]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "blur",
|
||||
"intarget": "swap",
|
||||
"outtarget": "minecraft:main",
|
||||
"uniforms": [
|
||||
{
|
||||
"name": "BlurDir",
|
||||
"values": [ 0.0, 1.0 ]
|
||||
},
|
||||
{
|
||||
"name": "Radius",
|
||||
"values": [ 20.0 ]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user