NetworkManager.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637
  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. function initializeCoreMod() {
  7. return {
  8. "light-overlay-forge": {
  9. 'target': {
  10. 'type': 'CLASS',
  11. 'name': 'net.minecraft.network.NetworkManager'
  12. },
  13. 'transformer': function (classNode) {
  14. var processPacket = ASMAPI.mapMethod("func_197664_a");
  15. for (i in classNode.methods) {
  16. var method = classNode.methods[i];
  17. if (method.name === processPacket) {
  18. var instructions = method.instructions;
  19. var insnArray = instructions.toArray();
  20. for (j in insnArray) {
  21. var instruction = insnArray[j];
  22. if (instruction instanceof LabelNode) {
  23. instructions.insertBefore(instruction, new LabelNode());
  24. instructions.insertBefore(instruction, new VarInsnNode(Opcodes.ALOAD, 0));
  25. instructions.insertBefore(instruction, new MethodInsnNode(Opcodes.INVOKESTATIC, "me/shedaniel/lightoverlay/LightOverlay", "processPacket", "(Lnet/minecraft/network/IPacket;)V", false));
  26. break;
  27. }
  28. }
  29. break;
  30. }
  31. }
  32. return classNode;
  33. }
  34. }
  35. }
  36. }