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 }