diff --git a/src/main/java/org/ultramine/server/UltraminePlugin.java b/src/main/java/org/ultramine/server/UltraminePlugin.java index 4bbd9e8..b81b91c 100644 --- a/src/main/java/org/ultramine/server/UltraminePlugin.java +++ b/src/main/java/org/ultramine/server/UltraminePlugin.java @@ -5,6 +5,8 @@ import java.io.File; import java.util.Map; +import net.minecraft.launchwrapper.LaunchClassLoader; + public class UltraminePlugin implements IFMLLoadingPlugin { public static File location; @@ -12,7 +14,9 @@ @Override public String[] getASMTransformerClass() { - return new String[0]; + return new String[]{ + "org.ultramine.server.asm.transformers.Compat172BlockSend" + }; } @Override @@ -31,6 +35,7 @@ public void injectData(Map data) { location = (File)data.get("coremodLocation"); + ((LaunchClassLoader)this.getClass().getClassLoader()).addTransformerExclusion("org.ultramine.server.asm."); } @Override diff --git a/src/main/java/org/ultramine/server/asm/transformers/Compat172BlockSend.java b/src/main/java/org/ultramine/server/asm/transformers/Compat172BlockSend.java new file mode 100644 index 0000000..563e3cb --- /dev/null +++ b/src/main/java/org/ultramine/server/asm/transformers/Compat172BlockSend.java @@ -0,0 +1,51 @@ +package org.ultramine.server.asm.transformers; + +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; + +import net.minecraft.launchwrapper.IClassTransformer; + +public class Compat172BlockSend implements IClassTransformer +{ + @Override + public byte[] transform(String name, String transformedName, byte[] basicClass) + { + if(name.startsWith("ttftcuts.atg.")) + { + ClassReader reader = new ClassReader(basicClass); + ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS); + + ClassVisitor visitor = new ChangeDescVisitor(writer); + + reader.accept(visitor, 0); + return writer.toByteArray(); + } + + return basicClass; + } + + public static class ChangeDescVisitor extends ClassVisitor + { + private ChangeDescVisitor(ClassVisitor cv) + { + super(Opcodes.ASM4, cv); + } + + @Override + public MethodVisitor visitMethod(int mAccess, final String mName, final String mDesc, String mSignature, String[] mExceptions) + { + return new MethodVisitor(Opcodes.ASM4, super.visitMethod(mAccess, mName, mDesc, mSignature, mExceptions)) + { + public void visitFieldInsn(int opcode, String owner, String name, String desc) + { + if(opcode == Opcodes.GETSTATIC && owner.equals("net/minecraft/init/Blocks") && name.equals("field_150354_m") && desc.equals("Lnet/minecraft/block/Block;")) + desc = "Lnet/minecraft/block/BlockSand;"; + super.visitFieldInsn(opcode, owner, name, desc); + } + }; + } + } +}