NetworkManager.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. var Opcodes = Java.type("org.objectweb.asm.Opcodes");
  2. var FieldNode = Java.type("org.objectweb.asm.tree.FieldNode");
  3. var InsnNode = Java.type("org.objectweb.asm.tree.InsnNode");
  4. var JumpInsnNode = Java.type("org.objectweb.asm.tree.JumpInsnNode");
  5. var LabelNode = Java.type("org.objectweb.asm.tree.LabelNode");
  6. var VarInsnNode = Java.type("org.objectweb.asm.tree.VarInsnNode");
  7. var MethodInsnNode = Java.type("org.objectweb.asm.tree.MethodInsnNode");
  8. var ASMAPI = Java.type("net.minecraftforge.coremod.api.ASMAPI");
  9. function initializeCoreMod() {
  10. return {
  11. "smooth-scrolling-everywhere": {
  12. 'target': {
  13. 'type': 'CLASS',
  14. 'name': 'net.minecraft.network.NetworkManager'
  15. },
  16. 'transformer': function (classNode) {
  17. var processPacket = ASMAPI.mapMethod("func_197664_a");
  18. for (i in classNode.methods) {
  19. var method = classNode.methods[i];
  20. if (method.name === processPacket) {
  21. var instructions = method.instructions;
  22. var insnArray = instructions.toArray();
  23. for (j in insnArray) {
  24. var instruction = insnArray[j];
  25. if (instruction instanceof LabelNode) {
  26. instructions.insertBefore(instruction, new LabelNode());
  27. instructions.insertBefore(instruction, new VarInsnNode(Opcodes.ALOAD, 0));
  28. instructions.insertBefore(instruction, new MethodInsnNode(Opcodes.INVOKESTATIC, "me/shedaniel/lightoverlay/LightOverlay", "processPacket", "(Lnet/minecraft/network/IPacket;)V", false));
  29. break;
  30. }
  31. }
  32. break;
  33. }
  34. }
  35. return classNode;
  36. }
  37. }
  38. }
  39. }