summaryrefslogtreecommitdiff
path: root/ihl_coremod
diff options
context:
space:
mode:
Diffstat (limited to 'ihl_coremod')
-rw-r--r--ihl_coremod/IHLCoremod.java48
-rw-r--r--ihl_coremod/IHLCoremodContainer.java29
-rw-r--r--ihl_coremod/WorldRendererClassTransformer.java22
-rw-r--r--ihl_coremod/WorldRendererClassVisitor.java25
-rw-r--r--ihl_coremod/WorldRendererRenderBlocksInitMethodVisitor.java34
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);
+ }
+ }
+}