Package codechicken.lib.tool

Source Code of codechicken.lib.tool.MCStripTransformer$ReferenceDetector

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

Related Classes of codechicken.lib.tool.MCStripTransformer$ReferenceDetector

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.