|
@@ -4,6 +4,10 @@ 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");
|
|
|
+var FieldInsnNode = Java.type("org.objectweb.asm.tree.FieldInsnNode");
|
|
|
+var JumpInsnNode = Java.type("org.objectweb.asm.tree.JumpInsnNode");
|
|
|
+var LabelNode = Java.type("org.objectweb.asm.tree.LabelNode");
|
|
|
+var InsnNode = Java.type("org.objectweb.asm.tree.InsnNode");
|
|
|
|
|
|
function initializeCoreMod() {
|
|
|
return {
|
|
@@ -18,13 +22,11 @@ function initializeCoreMod() {
|
|
|
var targetMethodName = ASMAPI.mapMethod("func_71197_b"); // init
|
|
|
var targetMethodDesc = "()Z";
|
|
|
|
|
|
- for (var i in methods)
|
|
|
- {
|
|
|
+ for (var i in methods) {
|
|
|
var method = methods[i];
|
|
|
|
|
|
print(method.name + " " + method.desc);
|
|
|
- if (method.name.equals(targetMethodName) && method.desc.equals(targetMethodDesc))
|
|
|
- {
|
|
|
+ if (method.name.equals(targetMethodName) && method.desc.equals(targetMethodDesc)) {
|
|
|
transform(method);
|
|
|
break;
|
|
|
}
|
|
@@ -35,45 +37,40 @@ function initializeCoreMod() {
|
|
|
};
|
|
|
}
|
|
|
|
|
|
-function transform(method)
|
|
|
-{
|
|
|
+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)
|
|
|
- {
|
|
|
+
|
|
|
+ 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")
|
|
|
- {
|
|
|
+ if (instr.getOpcode() == 183 && instr instanceof MethodInsnNode && instr.owner == "net/minecraft/server/dedicated/DedicatedPlayerList") {
|
|
|
print("_________________________________________");
|
|
|
- for(var j = -10; j < 10; j++)
|
|
|
- {
|
|
|
+ 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",
|
|
|
+ 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++)
|
|
|
- {
|
|
|
+ for (var j = -10; j < 10; j++) {
|
|
|
printInstr(instrList.get(i + j));
|
|
|
}
|
|
|
break;
|
|
@@ -81,29 +78,25 @@ function transform(method)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-function printInstr(instr)
|
|
|
-{
|
|
|
- if(instr.getOpcode() == -1)
|
|
|
- {
|
|
|
+function printInstr(instr) {
|
|
|
+ if (instr.getOpcode() == -1) {
|
|
|
return;
|
|
|
}
|
|
|
var out = "> ";
|
|
|
out += instr.getOpcode();
|
|
|
out += "_";
|
|
|
out += instr.getType();
|
|
|
-
|
|
|
- if(instr instanceof VarInsnNode)
|
|
|
- {
|
|
|
+
|
|
|
+ if (instr instanceof VarInsnNode) {
|
|
|
out += " Var: " + instr.var;
|
|
|
}
|
|
|
- else if(instr instanceof MethodInsnNode)
|
|
|
- {
|
|
|
+ else if (instr instanceof MethodInsnNode) {
|
|
|
out += " " + instr.owner + "." + instr.name + ":" + instr.desc;
|
|
|
}
|
|
|
- else if(instr instanceof FieldInsnNode)
|
|
|
- {
|
|
|
+ else if (instr instanceof FieldInsnNode) {
|
|
|
out += " " + instr.owner + "." + instr.name + ":" + instr.desc;
|
|
|
+ } else if (instr instanceof JumpInsnNode) {
|
|
|
+ out += " " + instr.label + " " + instr.label.getLabel();
|
|
|
}
|
|
|
- //out += " " + instr;
|
|
|
print(out);
|
|
|
}
|