]> git.lizzy.rs Git - LightOverlay.git/blob - forge/src/main/resources/META-INF/WorldRenderer.js
5f29014913494d38246dfa4e49610bebec6c880a
[LightOverlay.git] / forge / src / main / resources / META-INF / WorldRenderer.js
1 var Opcodes = Java.type("org.objectweb.asm.Opcodes");
2 var LabelNode = Java.type("org.objectweb.asm.tree.LabelNode");
3 var VarInsnNode = Java.type("org.objectweb.asm.tree.VarInsnNode");
4 var MethodInsnNode = Java.type("org.objectweb.asm.tree.MethodInsnNode");
5 var ASMAPI = Java.type("net.minecraftforge.coremod.api.ASMAPI");
6
7 function initializeCoreMod() {
8     return {
9         "light-overlay-forge": {
10             'target': {
11                 'type': 'CLASS',
12                 'name': 'net.minecraft.client.renderer.debug.DebugRenderer'
13             },
14             'transformer': function (classNode) {
15                 var render = ASMAPI.mapMethod("func_229019_a_");
16                 var setupTerrain = ASMAPI.mapMethod("func_228437_a_");
17                 for (var i in classNode.methods) {
18                     var method = classNode.methods[i];
19                     if (method.name === render) {
20                         var instructions = method.instructions;
21                         var insnArray = instructions.toArray();
22                         for (j in insnArray) {
23                             var instruction = insnArray[j];
24                             if (instruction instanceof LabelNode) {
25                                 instructions.insertBefore(instruction, new LabelNode());
26                                 instructions.insertBefore(instruction, new VarInsnNode(Opcodes.ALOAD, 0));
27                                 instructions.insertBefore(instruction, new MethodInsnNode(Opcodes.INVOKESTATIC, "me/shedaniel/lightoverlay/forge/LightOverlayClient", "renderWorldLast", "()V", false));
28                                 break;
29                             }
30                         }
31                         break;
32                     } else if (method.name === setupTerrain) {
33                         var instructions = method.instructions;
34                         instructions.insertBefore(new LabelNode());
35                         instructions.insertBefore(new VarInsnNode(Opcodes.ALOAD, 2));
36                         instructions.insertBefore(new MethodInsnNode(Opcodes.INVOKESTATIC, "me/shedaniel/lightoverlay/forge/LightOverlayClient", "updateFrustum", "(Lnet/minecraft/client/renderer/culling/ClippingHelper;)V", false));
37                     }
38                 }
39                 return classNode;
40             }
41         }
42     }
43 }