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