123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- 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];
- print(method.name + " " + method.desc);
- if (method.name.equals(targetMethodName) && method.desc.equals(targetMethodDesc))
- {
- transform(method);
- break;
- }
- }
- return classNode;
- }
- }
- };
- }
- function transform(method)
- {
- print("Match found " + method.name + " " + method.desc);
- var instrList = method.instructions;
-
- /*instrList.remove(instrList.get(2));
- instrList.insert(instrList.get(1), new VarInsnNode(Opcodes.ALOAD, 0));
- instrList.insert(instrList.get(2), new MethodInsnNode(Opcodes.INVOKESTATIC, "me/kcm/events/Hooks",
- "onGetTabListDisplayName", "(Lnet/minecraft/entity/player/EntityPlayerMP;)Lnet/minecraft/util/text/ITextComponent;", false));*/
-
- 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")
- {
- print("_________________________________________");
- for(var j = -10; j < 10; j++)
- {
- printInstr(instrList.get(i + j));
- }
-
- 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",
- // "newPlayerList", "(Lnet/minecraft/server/dedicated/DedicatedServer;)Lnet/minecraft/server/dedicated/DedicatedPlayerList;", false));
- //instrList.insert(instrList.get(i - 3), new MethodInsnNode(Opcodes.INVOKESTATIC, "me/kcm/events/Hooks",
- // "newPlayerList", "()Lnet/minecraft/server/dedicated/DedicatedPlayerList;", false));
- instrList.insert(instrList.get(i - 4), new MethodInsnNode(Opcodes.INVOKESTATIC, "me/kcm/events/Hooks",
- "setPlayerList", "(Lnet/minecraft/server/dedicated/DedicatedServer;)V", false));
-
- print("_________________________________________");
- for(var j = -10; j < 10; j++)
- {
- printInstr(instrList.get(i + j));
- }
- break;
- }
- }
- }
- function printInstr(instr)
- {
- if(instr.getOpcode() == -1)
- {
- return;
- }
- var out = "> ";
- out += instr.getOpcode();
- out += "_";
- out += instr.getType();
-
- if(instr instanceof VarInsnNode)
- {
- out += " Var: " + instr.var;
- }
- else if(instr instanceof MethodInsnNode)
- {
- out += " " + instr.owner + "." + instr.name + ":" + instr.desc;
- }
- else if(instr instanceof FieldInsnNode)
- {
- out += " " + instr.owner + "." + instr.name + ":" + instr.desc;
- }
- //out += " " + instr;
- print(out);
- }
|