package codechicken.lib.tool; import codechicken.lib.asm.ASMHelper; import org.objectweb.asm.ClassReader; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; import org.objectweb.asm.commons.Remapper; import org.objectweb.asm.commons.RemappingMethodAdapter; import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.MethodNode; import java.util.Iterator; public class MCStripTransformer { public static class ReferenceDetector extends Remapper { boolean found = false; @Override public String map(String typeName) { if (typeName.startsWith("net/minecraft") || !typeName.contains("/")) { found = true; } return typeName; } } public static byte[] transform(byte[] bytes) { ClassNode cnode = ASMHelper.createClassNode(bytes, ClassReader.EXPAND_FRAMES); boolean changed = false; Iterator<MethodNode> it = cnode.methods.iterator(); while (it.hasNext()) { MethodNode mnode = it.next(); ReferenceDetector r = new ReferenceDetector(); mnode.accept(new RemappingMethodAdapter(mnode.access, mnode.desc, new MethodVisitor(Opcodes.ASM4) { }, r)); if (r.found) { it.remove(); changed = true; } } if (changed) { bytes = ASMHelper.createBytes(cnode, 0); } return bytes; } }