project(injector): Add back swapMenuEntries

This commit is contained in:
Owain van Brakel
2022-05-11 15:01:23 +02:00
parent 7f25d14cc3
commit 69234931db

View File

@@ -8,11 +8,13 @@
package com.openosrs.injector.injectors.raw; package com.openosrs.injector.injectors.raw;
//import com.openosrs.injector.InjectUtil; //import com.openosrs.injector.InjectUtil;
import com.openosrs.injector.InjectUtil;
import com.openosrs.injector.injection.InjectData; import com.openosrs.injector.injection.InjectData;
import com.openosrs.injector.injectors.AbstractInjector; import com.openosrs.injector.injectors.AbstractInjector;
import java.util.List; import java.util.List;
import java.util.ListIterator; import java.util.ListIterator;
import net.runelite.asm.ClassFile; import net.runelite.asm.ClassFile;
import net.runelite.asm.Field;
import net.runelite.asm.Method; import net.runelite.asm.Method;
import net.runelite.asm.attributes.Code; import net.runelite.asm.attributes.Code;
import net.runelite.asm.attributes.code.Instruction; import net.runelite.asm.attributes.code.Instruction;
@@ -20,6 +22,7 @@ import net.runelite.asm.attributes.code.InstructionType;
import net.runelite.asm.attributes.code.Instructions; import net.runelite.asm.attributes.code.Instructions;
import net.runelite.asm.attributes.code.instructions.BAStore; import net.runelite.asm.attributes.code.instructions.BAStore;
import net.runelite.asm.attributes.code.instructions.Dup; import net.runelite.asm.attributes.code.instructions.Dup;
import net.runelite.asm.attributes.code.instructions.GetStatic;
import net.runelite.asm.attributes.code.instructions.ILoad; import net.runelite.asm.attributes.code.instructions.ILoad;
import net.runelite.asm.attributes.code.instructions.InvokeSpecial; import net.runelite.asm.attributes.code.instructions.InvokeSpecial;
import net.runelite.asm.attributes.code.instructions.InvokeStatic; import net.runelite.asm.attributes.code.instructions.InvokeStatic;
@@ -40,7 +43,7 @@ public class RuneliteMenuEntry extends AbstractInjector
{ {
addInvoke("newRuneliteMenuEntry", true); addInvoke("newRuneliteMenuEntry", true);
addInvoke("newBareRuneliteMenuEntry", false); addInvoke("newBareRuneliteMenuEntry", false);
//addSwap(InjectUtil.findMethod(inject, "incrementMenuEntries")); addSwap(InjectUtil.findMethod(inject, "menu"), InjectUtil.findField(inject, "menuShiftClick", "Client"));
} }
private void addInvoke(String methodName, boolean iload) private void addInvoke(String methodName, boolean iload)
@@ -75,7 +78,7 @@ public class RuneliteMenuEntry extends AbstractInjector
ins.add(new Return(instructions, InstructionType.ARETURN)); ins.add(new Return(instructions, InstructionType.ARETURN));
} }
private void addSwap(Method method) private void addSwap(Method method, Field field)
{ {
final ClassFile clientVanilla = inject.toVanilla( final ClassFile clientVanilla = inject.toVanilla(
inject.getDeobfuscated() inject.getDeobfuscated()
@@ -84,22 +87,40 @@ public class RuneliteMenuEntry extends AbstractInjector
Instructions ins = method.getCode().getInstructions(); Instructions ins = method.getCode().getInstructions();
ListIterator<Instruction> iterator = ins.getInstructions().listIterator(); ListIterator<Instruction> iterator = ins.getInstructions().listIterator();
int found = 0;
while (iterator.hasNext()) while (iterator.hasNext())
{ {
Instruction i = iterator.next(); Instruction i = iterator.next();
if (!(i instanceof BAStore)) if (found < 4)
{ {
continue; if (!(i instanceof GetStatic))
{
continue;
}
if (((GetStatic) i).getField().getName().equals(field.getName()))
{
found += 1;
}
} }
else
{
if (!(i instanceof BAStore))
{
continue;
}
ILoad i1 = new ILoad(ins, 2); ILoad i1 = new ILoad(ins, 3);
InvokeStatic i2 = new InvokeStatic(ins, new net.runelite.asm.pool.Method(clientVanilla.getPoolClass(), "swapMenuEntries", new Signature("(I)V"))); InvokeStatic i2 = new InvokeStatic(ins, new net.runelite.asm.pool.Method(clientVanilla.getPoolClass(), "swapMenuEntries", new Signature("(I)V")));
iterator.add(i1); iterator.add(i1);
iterator.add(i2); iterator.add(i2);
return; return;
}
} }
} }
} }