var transformerName = "Dedicated Server Transformer"; var ASMAPI = Java.type('net.minecraftforge.coremod.api.ASMAPI'); var Opcodes = Java.type('org.objectweb.asm.Opcodes'); var VarInsnNode = Java.type("org.objectweb.asm.tree.VarInsnNode"); var MethodInsnNode = Java.type("org.objectweb.asm.tree.MethodInsnNode"); var LineNumberNode = Java.type("org.objectweb.asm.tree.LineNumberNode"); function initializeCoreMod() { return { transformerName: { 'target': { 'type': 'CLASS', 'name': 'net.minecraft.server.dedicated.DedicatedServer' }, 'transformer': function (classNode) { var methods = classNode.methods; var targetMethodName = ASMAPI.mapMethod("func_71197_b"); // init var targetMethodDesc = "()Z"; for (var i in methods) { var method = methods[i]; if (method.name.equals(targetMethodName) && method.desc.equals(targetMethodDesc)) { transform(method); break; } } return classNode; } } }; } function transform(method) { var instrList = method.instructions; for(var i = 0; i < instrList.size(); ++i) { var instr = instrList.get(i); if(instr.getOpcode() == 183 && instr instanceof MethodInsnNode && instr.owner == "net/minecraft/server/dedicated/DedicatedPlayerList") { instrList.remove(instrList.get(i - 4)); instrList.remove(instrList.get(i - 4)); instrList.remove(instrList.get(i - 4)); instrList.remove(instrList.get(i - 4)); instrList.remove(instrList.get(i - 4)); instrList.remove(instrList.get(i - 4)); instrList.insert(instrList.get(i - 5), new VarInsnNode(Opcodes.ALOAD, 0)); instrList.insert(instrList.get(i - 4), new MethodInsnNode(Opcodes.INVOKESTATIC, "me/kcm/events/Hooks", "setPlayerList", "(Lnet/minecraft/server/dedicated/DedicatedServer;)V", false)); break; } } }