playerlist.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. var transformerName = "Dedicated Server Transformer";
  2. var ASMAPI = Java.type('net.minecraftforge.coremod.api.ASMAPI');
  3. var Opcodes = Java.type('org.objectweb.asm.Opcodes');
  4. var VarInsnNode = Java.type("org.objectweb.asm.tree.VarInsnNode");
  5. var MethodInsnNode = Java.type("org.objectweb.asm.tree.MethodInsnNode");
  6. var LineNumberNode = Java.type("org.objectweb.asm.tree.LineNumberNode");
  7. function initializeCoreMod() {
  8. return {
  9. transformerName: {
  10. 'target': {
  11. 'type': 'CLASS',
  12. 'name': 'net.minecraft.server.dedicated.DedicatedServer'
  13. },
  14. 'transformer': function (classNode) {
  15. var methods = classNode.methods;
  16. var targetMethodName = ASMAPI.mapMethod("func_71197_b"); // init
  17. var targetMethodDesc = "()Z";
  18. for (var i in methods)
  19. {
  20. var method = methods[i];
  21. if (method.name.equals(targetMethodName) && method.desc.equals(targetMethodDesc))
  22. {
  23. transform(method);
  24. break;
  25. }
  26. }
  27. return classNode;
  28. }
  29. }
  30. };
  31. }
  32. function transform(method)
  33. {
  34. var instrList = method.instructions;
  35. for(var i = 0; i < instrList.size(); ++i)
  36. {
  37. var instr = instrList.get(i);
  38. if(instr.getOpcode() == 183 && instr instanceof MethodInsnNode && instr.owner == "net/minecraft/server/dedicated/DedicatedPlayerList")
  39. {
  40. instrList.remove(instrList.get(i - 4));
  41. instrList.remove(instrList.get(i - 4));
  42. instrList.remove(instrList.get(i - 4));
  43. instrList.remove(instrList.get(i - 4));
  44. instrList.remove(instrList.get(i - 4));
  45. instrList.remove(instrList.get(i - 4));
  46. instrList.insert(instrList.get(i - 5), new VarInsnNode(Opcodes.ALOAD, 0));
  47. instrList.insert(instrList.get(i - 4), new MethodInsnNode(Opcodes.INVOKESTATIC, "me/kcm/events/Hooks",
  48. "setPlayerList", "(Lnet/minecraft/server/dedicated/DedicatedServer;)V", false));
  49. break;
  50. }
  51. }
  52. }