Initial Commit

This commit is contained in:
tterrag1098
2017-05-24 02:27:43 -04:00
commit 026fb74bd0
11 changed files with 560 additions and 0 deletions

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

View 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;
}
}

View 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;
}
}

View 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 ]
}
]
}
]
}