package openmods.asm; import com.google.common.base.Preconditions; import cpw.mods.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper; import net.minecraft.launchwrapper.Launch; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.ClassWriter; public class VisitorHelper { public abstract static class TransformProvider { private final int flags; public TransformProvider(int flags) { this.flags = flags; } public abstract ClassVisitor createVisitor(String name, ClassVisitor cv); } public static byte[] apply(byte[] bytes, String name, TransformProvider context) { Preconditions.checkNotNull(bytes); ClassReader cr = new ClassReader(bytes); ClassWriter cw = new ClassWriter(cr, context.flags); ClassVisitor mod = context.createVisitor(name, cw); try { cr.accept(mod, 0); return cw.toByteArray(); } catch (StopTransforming e) { return bytes; } } public static boolean useSrgNames() { Boolean deobfuscated = (Boolean)Launch.blackboard.get("fml.deobfuscatedEnvironment"); return deobfuscated == null || !deobfuscated; } public static String getMappedName(String clsName) { return useSrgNames()? FMLDeobfuscatingRemapper.INSTANCE.unmap(clsName) : clsName; } }