001    package cpw.mods.fml.common.asm;
002    
003    import org.objectweb.asm.ClassReader;
004    import org.objectweb.asm.ClassWriter;
005    import org.objectweb.asm.Opcodes;
006    import org.objectweb.asm.Type;
007    import org.objectweb.asm.tree.ClassNode;
008    
009    import cpw.mods.fml.common.registry.BlockProxy;
010    import cpw.mods.fml.relauncher.IClassTransformer;
011    
012    public class ASMTransformer implements IClassTransformer
013    {
014        @Override
015        public byte[] transform(String name, byte[] bytes)
016        {
017            if ("net.minecraft.src.Block".equals(name))
018            {
019                ClassReader cr = new ClassReader(bytes);
020                ClassNode cn = new ClassNode(Opcodes.ASM4);
021                cr.accept(cn, ClassReader.EXPAND_FRAMES);
022                cn.interfaces.add(Type.getInternalName(BlockProxy.class));
023                ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
024                cn.accept(cw);
025                return cw.toByteArray();
026            }
027            
028            return bytes;
029        }
030    
031    }