12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 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/Hooks",
- "setPlayerList", "(Lnet/minecraft/server/dedicated/DedicatedServer;)V", false));
- break;
- }
- }
- }
|