diff --git a/injector/src/main/java/com/openosrs/injector/injectors/raw/RuneliteMenuEntry.java b/injector/src/main/java/com/openosrs/injector/injectors/raw/RuneliteMenuEntry.java index 1c75888a0b..428c612163 100644 --- a/injector/src/main/java/com/openosrs/injector/injectors/raw/RuneliteMenuEntry.java +++ b/injector/src/main/java/com/openosrs/injector/injectors/raw/RuneliteMenuEntry.java @@ -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,22 +87,40 @@ public class RuneliteMenuEntry extends AbstractInjector Instructions ins = method.getCode().getInstructions(); ListIterator iterator = ins.getInstructions().listIterator(); + + int found = 0; + while (iterator.hasNext()) { 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); - InvokeStatic i2 = new InvokeStatic(ins, new net.runelite.asm.pool.Method(clientVanilla.getPoolClass(), "swapMenuEntries", new Signature("(I)V"))); + 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); - iterator.add(i2); + iterator.add(i1); + iterator.add(i2); - return; + return; + } } } }