diff options
Diffstat (limited to 'ihl_coremod')
| -rw-r--r-- | ihl_coremod/IHLCoremod.java | 48 | ||||
| -rw-r--r-- | ihl_coremod/IHLCoremodContainer.java | 29 | ||||
| -rw-r--r-- | ihl_coremod/WorldRendererClassTransformer.java | 22 | ||||
| -rw-r--r-- | ihl_coremod/WorldRendererClassVisitor.java | 25 | ||||
| -rw-r--r-- | ihl_coremod/WorldRendererRenderBlocksInitMethodVisitor.java | 34 |
5 files changed, 158 insertions, 0 deletions
diff --git a/ihl_coremod/IHLCoremod.java b/ihl_coremod/IHLCoremod.java new file mode 100644 index 0000000..300e27d --- /dev/null +++ b/ihl_coremod/IHLCoremod.java @@ -0,0 +1,48 @@ +package ihl_coremod; + +import java.util.Map; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import cpw.mods.fml.relauncher.IFMLLoadingPlugin; + +@IFMLLoadingPlugin.Name(value = "IHL CoreMod") +@IFMLLoadingPlugin.MCVersion(value = "1.7.10") +@IFMLLoadingPlugin.TransformerExclusions(value = "ihl_coremod.") +@IFMLLoadingPlugin.SortingIndex(value = 0) +public class IHLCoremod implements IFMLLoadingPlugin{ + public static Logger log; + + public IHLCoremod() + { + log = LogManager.getLogger("IHLCoremod"); + log.info("IHL coremod logger created."); + } + + @Override + public String[] getASMTransformerClass() { + return new String[] {WorldRendererClassTransformer.class.getName()}; + } + + @Override + public String getModContainerClass() { + return IHLCoremodContainer.class.getName(); + } + + @Override + public String getSetupClass() { + return null; + } + + @Override + public void injectData(Map<String, Object> data) { + + } + + @Override + public String getAccessTransformerClass() { + return null; + } + +} diff --git a/ihl_coremod/IHLCoremodContainer.java b/ihl_coremod/IHLCoremodContainer.java new file mode 100644 index 0000000..c33a58e --- /dev/null +++ b/ihl_coremod/IHLCoremodContainer.java @@ -0,0 +1,29 @@ +package ihl_coremod; + +import java.util.Arrays; + +import com.google.common.eventbus.EventBus; + +import cpw.mods.fml.common.DummyModContainer; +import cpw.mods.fml.common.LoadController; +import cpw.mods.fml.common.ModMetadata; + +public class IHLCoremodContainer extends DummyModContainer { + + public IHLCoremodContainer() { + super(new ModMetadata()); + ModMetadata myMeta = super.getMetadata(); + myMeta.authorList = Arrays.asList(new String[] { "Foghrye4" }); + myMeta.description = "Core mod for ASM tweaks"; + myMeta.modId = "ihl_coremod"; + myMeta.version = "1.0"; + myMeta.name = "IHL core mod"; + } + + @Override + public boolean registerBus(EventBus bus, LoadController controller) + { + bus.register(this); + return true; + } +} diff --git a/ihl_coremod/WorldRendererClassTransformer.java b/ihl_coremod/WorldRendererClassTransformer.java new file mode 100644 index 0000000..14d0ce0 --- /dev/null +++ b/ihl_coremod/WorldRendererClassTransformer.java @@ -0,0 +1,22 @@ +package ihl_coremod; + +import net.minecraft.launchwrapper.IClassTransformer; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.Opcodes; + +public class WorldRendererClassTransformer implements IClassTransformer { + + @Override + public byte[] transform(String name, String transformedName, byte[] basicClass) { + if (name.equals("blo")) { + IHLCoremod.log.info("net.minecraft.client.renderer.WorldRenderer founded."); + ClassReader cr = new ClassReader(basicClass); + ClassWriter cw = new ClassWriter(cr, 0); + WorldRendererClassVisitor cv = new WorldRendererClassVisitor(Opcodes.ASM4, cw); + cr.accept(cv, 0); + return cw.toByteArray(); + } + return basicClass; + } +} diff --git a/ihl_coremod/WorldRendererClassVisitor.java b/ihl_coremod/WorldRendererClassVisitor.java new file mode 100644 index 0000000..89ab49b --- /dev/null +++ b/ihl_coremod/WorldRendererClassVisitor.java @@ -0,0 +1,25 @@ +package ihl_coremod; + +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Type; + +import net.minecraft.client.renderer.RenderBlocks; + +public class WorldRendererClassVisitor extends ClassVisitor { + + public WorldRendererClassVisitor(int api, ClassVisitor cv) { + super(api, cv); + } + + @Override + public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { + MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); + if (name.equals("a") && desc.equals("(Lsv;)V")) { + IHLCoremod.log.info("Sucessfully founded updateRenderer(Lnet/minecraft/entity/EntityLivingBase;)V"); + IHLCoremod.log.info("Trying intercept: "+Type.getInternalName(RenderBlocks.class)+".<init>"); + return new WorldRendererRenderBlocksInitMethodVisitor(this.api, mv); + } + return mv; + } +} diff --git a/ihl_coremod/WorldRendererRenderBlocksInitMethodVisitor.java b/ihl_coremod/WorldRendererRenderBlocksInitMethodVisitor.java new file mode 100644 index 0000000..18c655a --- /dev/null +++ b/ihl_coremod/WorldRendererRenderBlocksInitMethodVisitor.java @@ -0,0 +1,34 @@ +package ihl_coremod; + +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; + +public class WorldRendererRenderBlocksInitMethodVisitor extends MethodVisitor { + + private static final String RENDER_BLOCK_EXT_TYPE = "ihl/model/RenderBlocksExt"; + private static final String RENDER_BLOCK_TYPE = "blm"; + + public WorldRendererRenderBlocksInitMethodVisitor(int api, MethodVisitor mv) { + super(api, mv); + } + + @Override + public void visitTypeInsn(int opcode, String type) { + if (opcode == Opcodes.NEW && type.equals(RENDER_BLOCK_TYPE)) { + IHLCoremod.log.info("Sucessfully intercept new RenderBlocks instruction."); + super.visitTypeInsn(opcode, RENDER_BLOCK_EXT_TYPE); + } else { + super.visitTypeInsn(opcode, type); + } + } + + @Override + public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { + if (owner.equals(RENDER_BLOCK_TYPE) && name.equals("<init>")) { + IHLCoremod.log.info("Sucessfully intercept RenderBlocks.<init> method."); + super.visitMethodInsn(opcode, RENDER_BLOCK_EXT_TYPE, name, desc, itf); + } else { + super.visitMethodInsn(opcode, owner, name, desc, itf); + } + } +} |
