diff --git a/transformer/AppEngASMTransformer.java b/transformer/AppEngASMTransformer.java index a5dc1510..99776f5d 100644 --- a/transformer/AppEngASMTransformer.java +++ b/transformer/AppEngASMTransformer.java @@ -4,6 +4,7 @@ import java.util.Iterator; import net.minecraft.launchwrapper.IClassTransformer; +import org.apache.logging.log4j.Level; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.Opcodes; @@ -15,9 +16,13 @@ import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; import org.objectweb.asm.tree.VarInsnNode; +import appeng.core.AELog; + import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; +import cpw.mods.fml.relauncher.FMLRelaunchLog; + public class AppEngASMTransformer implements IClassTransformer { @@ -31,88 +36,86 @@ public class AppEngASMTransformer implements IClassTransformer @Override public byte[] transform(String name, String transformedName, byte[] basicClass) { - if ( publicShit.containsKey( transformedName ) ) + try { - ClassNode classNode = new ClassNode(); - ClassReader classReader = new ClassReader( basicClass ); - classReader.accept( classNode, 0 ); - - for (String Set : publicShit.get( transformedName )) + if ( transformedName != null && publicShit.containsKey( transformedName ) ) { - makePublic( classNode, Set ); - } - - // CALL VIRUAL! - if ( transformedName.equals( "net.minecraft.client.gui.inventory.GuiContainer" ) ) - { - for (MethodNode mn : classNode.methods) + ClassNode classNode = new ClassNode(); + ClassReader classReader = new ClassReader( basicClass ); + classReader.accept( classNode, 0 ); + + for (String Set : publicShit.get( transformedName )) { - if ( mn.name.equals( "func_146977_a" ) || (mn.name.equals( "a" ) && mn.desc.equals( "(Lzk;)V" )) ) - { - MethodNode newNode = new MethodNode( Opcodes.ACC_PUBLIC, "func_146977_a_original", mn.desc, mn.signature, new String[0] ); - newNode.instructions.add( new VarInsnNode( Opcodes.ALOAD, 0 ) ); - newNode.instructions.add( new VarInsnNode( Opcodes.ALOAD, 1 ) ); - newNode.instructions.add( new MethodInsnNode( Opcodes.INVOKESPECIAL, classNode.name, mn.name, mn.desc ) ); - newNode.instructions.add( new InsnNode( Opcodes.RETURN ) ); - classNode.methods.add( newNode ); - break; - } + makePublic( classNode, Set ); } - - for (MethodNode mn : classNode.methods) + + // CALL VIRUAL! + if ( transformedName.equals( "net.minecraft.client.gui.inventory.GuiContainer" ) ) { - if ( mn.name.equals( "drawScreen" ) || (mn.name.equals( "a" ) && mn.desc.equals( "(IIF)V" )) ) + for (MethodNode mn : classNode.methods) { - Iterator i = mn.instructions.iterator(); - while (i.hasNext()) + if ( mn.name.equals( "func_146977_a" ) || (mn.name.equals( "a" ) && mn.desc.equals( "(Lzk;)V" )) ) { - AbstractInsnNode in = i.next(); - if ( in.getOpcode() == Opcodes.INVOKESPECIAL ) + MethodNode newNode = new MethodNode( Opcodes.ACC_PUBLIC, "func_146977_a_original", mn.desc, mn.signature, new String[0] ); + newNode.instructions.add( new VarInsnNode( Opcodes.ALOAD, 0 ) ); + newNode.instructions.add( new VarInsnNode( Opcodes.ALOAD, 1 ) ); + newNode.instructions.add( new MethodInsnNode( Opcodes.INVOKESPECIAL, classNode.name, mn.name, mn.desc ) ); + newNode.instructions.add( new InsnNode( Opcodes.RETURN ) ); + log(newNode.name+newNode.desc+" - New Method"); + classNode.methods.add( newNode ); + break; + } + } + + for (MethodNode mn : classNode.methods) + { + if ( mn.name.equals( "drawScreen" ) || (mn.name.equals( "a" ) && mn.desc.equals( "(IIF)V" )) ) + { + Iterator i = mn.instructions.iterator(); + while (i.hasNext()) { - MethodInsnNode n = (MethodInsnNode) in; - if ( n.name.equals( "func_146977_a" ) || (n.name.equals( "a" ) && n.desc.equals( "(Lzk;)V" )) ) + AbstractInsnNode in = i.next(); + if ( in.getOpcode() == Opcodes.INVOKESPECIAL ) { - mn.instructions.insertBefore( n, new MethodInsnNode( Opcodes.INVOKEVIRTUAL, n.owner, n.name, n.desc ) ); - mn.instructions.remove( in ); - break; + MethodInsnNode n = (MethodInsnNode) in; + if ( n.name.equals( "func_146977_a" ) || (n.name.equals( "a" ) && n.desc.equals( "(Lzk;)V" )) ) + { + log(n.name+n.desc+" - Invoke Virtual"); + mn.instructions.insertBefore( n, new MethodInsnNode( Opcodes.INVOKEVIRTUAL, n.owner, n.name, n.desc ) ); + mn.instructions.remove( in ); + break; + } } } } } } + + ClassWriter writer = new ClassWriter( ClassWriter.COMPUTE_MAXS ); + classNode.accept( writer ); + return writer.toByteArray(); } - - ClassWriter writer = new ClassWriter( ClassWriter.COMPUTE_MAXS ); - classNode.accept( writer ); - return writer.toByteArray(); } - + catch( Throwable t ) {} + return basicClass; } + private void log(String string) + { + FMLRelaunchLog.log("AE2-CORE", Level.INFO, string ); + } + private void makePublic(ClassNode classNode, String set) { - for (MethodNode mn : classNode.methods) { if ( mn.name.equals( set ) ) { - mn.access = getFixedAccess( mn.access ); + mn.access = Opcodes.ACC_PUBLIC; + log(mn.name+mn.desc+" - Public"); } } - - for (FieldNode mn : classNode.fields) - { - if ( mn.name.equals( set ) ) - { - mn.access = getFixedAccess( mn.access ); - } - } - } - private int getFixedAccess(int access) - { - return Opcodes.ACC_PUBLIC; - } } diff --git a/transformer/AppEngATTransformer.java b/transformer/AppEngATTransformer.java deleted file mode 100644 index e5674890..00000000 --- a/transformer/AppEngATTransformer.java +++ /dev/null @@ -1,14 +0,0 @@ -package appeng.transformer; - -import net.minecraft.launchwrapper.IClassTransformer; - -public class AppEngATTransformer implements IClassTransformer -{ - - @Override - public byte[] transform(String name, String transformedName, byte[] basicClass) - { - return basicClass; - } - -} diff --git a/transformer/AppEngCore.java b/transformer/AppEngCore.java index f7316fc3..6be5e740 100644 --- a/transformer/AppEngCore.java +++ b/transformer/AppEngCore.java @@ -44,7 +44,7 @@ public class AppEngCore extends DummyModContainer implements IFMLLoadingPlugin @Override public String[] getASMTransformerClass() { - return new String[] { "appeng.transformer.AppEngASMTransformer" }; + return null;//return new String[] { "appeng.transformer.AppEngASMTransformer" }; } @Override @@ -97,7 +97,6 @@ public class AppEngCore extends DummyModContainer implements IFMLLoadingPlugin @Override public String getAccessTransformerClass() { - // TODO Auto-generated method stub - return null; + return "appeng.transformer.AppEngASMTransformer" ; } }