mirror of
https://github.com/GTNewHorizons/CodeChickenCore.git
synced 2026-11-11 15:57:42 +00:00
45 lines
1.4 KiB
Java
45 lines
1.4 KiB
Java
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;
|
|
}
|
|
}
|