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;
//import com.openosrs.injector.InjectUtil;
import com.openosrs.injector.InjectUtil;
import com.openosrs.injector.injection.InjectData;
import com.openosrs.injector.injectors.AbstractInjector;
import java.util.List;
import java.util.ListIterator;
import net.runelite.asm.ClassFile;
import net.runelite.asm.Field;
import net.runelite.asm.Method;
import net.runelite.asm.attributes.Code;
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.BAStore;
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.InvokeSpecial;
import net.runelite.asm.attributes.code.instructions.InvokeStatic;
@@ -40,7 +43,7 @@ public class RuneliteMenuEntry extends AbstractInjector
{
addInvoke("newRuneliteMenuEntry", true);
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)
@@ -75,7 +78,7 @@ public class RuneliteMenuEntry extends AbstractInjector
ins.add(new Return(instructions, InstructionType.ARETURN));
}
private void addSwap(Method method)
private void addSwap(Method method, Field field)
{
final ClassFile clientVanilla = inject.toVanilla(
inject.getDeobfuscated()
@@ -84,16 +87,33 @@ public class RuneliteMenuEntry extends AbstractInjector
Instructions ins = method.getCode().getInstructions();
ListIterator<Instruction> iterator = ins.getInstructions().listIterator();
int found = 0;
while (iterator.hasNext())
{
Instruction i = iterator.next();
if (found < 4)
{
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")));
iterator.add(i1);
@@ -102,4 +122,5 @@ public class RuneliteMenuEntry extends AbstractInjector
return;
}
}
}
}