Merge pull request #769 from Lucwousin/baaaaaaaaaaaaaaaaaa

menumanager: fix menu swaps not working when left clicking items
This commit is contained in:
Ganom
2019-06-27 15:18:11 -04:00
committed by GitHub
10 changed files with 477 additions and 416 deletions

View File

@@ -42,6 +42,11 @@ public class AALoad extends Instruction implements ArrayLoad
super(instructions, type); super(instructions, type);
} }
public AALoad(Instructions instructions)
{
super(instructions, InstructionType.AALOAD);
}
@Override @Override
public InstructionContext execute(Frame frame) public InstructionContext execute(Frame frame)
{ {

View File

@@ -99,6 +99,11 @@ public class InjectUtil
if (hint != null) if (hint != null)
{ {
ClassFile c = inject.getDeobfuscated().findClass(hint); ClassFile c = inject.getDeobfuscated().findClass(hint);
if (c == null)
{
throw new InjectionException("Class " + hint + " doesn't exist. (check capitalization)");
}
for (Field f : c.getFields()) for (Field f : c.getFields())
{ {
if (!f.getName().equals(name)) if (!f.getName().equals(name))

View File

@@ -70,4 +70,17 @@ public class MenuEntry
* This is used for shift click * This is used for shift click
*/ */
private boolean forceLeftClick; private boolean forceLeftClick;
public static MenuEntry copy(MenuEntry src)
{
return new MenuEntry(
src.getOption(),
src.getTarget(),
src.getIdentifier(),
src.getType(),
src.getParam0(),
src.getParam1(),
src.isForceLeftClick()
);
}
} }

View File

@@ -42,10 +42,15 @@ import net.runelite.api.MenuEntry;
@Data @Data
public class MenuOptionClicked public class MenuOptionClicked
{ {
public MenuOptionClicked(MenuEntry entry)
{
menuEntry = entry;
}
/** /**
* The actual MenuEntry object representing what was clicked * The actual MenuEntry object representing what was clicked
*/ */
private final MenuEntry menuEntry; private MenuEntry menuEntry;
/** /**
* The option text added to the menu. * The option text added to the menu.

View File

@@ -72,6 +72,16 @@ public class ComparableEntry
this.strictTarget = strictTarget; this.strictTarget = strictTarget;
} }
// This is only used for type checking, which is why it has everything but target
// target sometimes changes to option.
public ComparableEntry(MenuEntry e)
{
this.option = e.getOption();
this.id = e.getIdentifier();
this.type = e.getType();
this.strictOption = true;
}
boolean matches(MenuEntry entry) boolean matches(MenuEntry entry)
{ {
String opt = Text.standardize(entry.getOption()); String opt = Text.standardize(entry.getOption());

View File

@@ -39,6 +39,7 @@ import java.util.Set;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.MenuAction; import net.runelite.api.MenuAction;
@@ -96,7 +97,7 @@ public class MenuManager
private final Set<ComparableEntry> hiddenEntries = new HashSet<>(); private final Set<ComparableEntry> hiddenEntries = new HashSet<>();
private final Map<ComparableEntry, ComparableEntry> swaps = new HashMap<>(); private final Map<ComparableEntry, ComparableEntry> swaps = new HashMap<>();
private final Map<MenuEntry, Integer> originalTypes = new HashMap<>(); private EntryTypeMapping originalType;
@Inject @Inject
private MenuManager(Client client, EventBus eventBus) private MenuManager(Client client, EventBus eventBus)
@@ -227,7 +228,7 @@ public class MenuManager
@Subscribe @Subscribe
private void onClientTick(ClientTick event) private void onClientTick(ClientTick event)
{ {
originalTypes.clear(); originalType = null;
client.sortMenuEntries(); client.sortMenuEntries();
final MenuEntry[] oldentries = client.getMenuEntries(); final MenuEntry[] oldentries = client.getMenuEntries();
@@ -273,8 +274,9 @@ public class MenuManager
int newType = getLeftClickType(type); int newType = getLeftClickType(type);
if (newType != -1 && newType != type) if (newType != -1 && newType != type)
{ {
MenuEntry original = MenuEntry.copy(e);
e.setType(newType); e.setType(newType);
originalTypes.put(e, type); originalType = new EntryTypeMapping(new ComparableEntry(e), original);
} }
} }
@@ -409,18 +411,18 @@ public class MenuManager
@Subscribe @Subscribe
public void onMenuOptionClicked(MenuOptionClicked event) public void onMenuOptionClicked(MenuOptionClicked event)
{ {
if (originalTypes.containsKey(event.getMenuEntry()) && // Type is changed in check
!event.getTarget().equals("do not edit")) if (originalType != null && originalType.check(event))
{ {
event.consume(); event.consume();
client.invokeMenuAction( client.invokeMenuAction(
event.getActionParam0(), event.getActionParam0(),
event.getActionParam1(), event.getActionParam1(),
originalTypes.get(event.getMenuEntry()), event.getType(),
event.getIdentifier(), event.getIdentifier(),
event.getOption(),
"do not edit", "do not edit",
event.getTarget(),
client.getMouseCanvasPosition().getX(), client.getMouseCanvasPosition().getX(),
client.getMouseCanvasPosition().getY() client.getMouseCanvasPosition().getY()
); );
@@ -749,4 +751,24 @@ public class MenuManager
{ {
hiddenEntries.remove(entry); hiddenEntries.remove(entry);
} }
@AllArgsConstructor
private class EntryTypeMapping
{
private final ComparableEntry comparable;
private final MenuEntry target;
private boolean check(MenuOptionClicked event)
{
MenuEntry entry = event.getMenuEntry();
if (!entry.getTarget().equals(entry.getOption()) && !comparable.matches(entry))
{
return false;
}
event.setMenuEntry(target);
return true;
}
}
} }

File diff suppressed because it is too large Load Diff

View File

@@ -4262,7 +4262,7 @@ public final class Client extends GameShell implements Usernamed {
} else if(menuOptionsCount > 0) { } else if(menuOptionsCount > 0) {
var3 = __client_ja; var3 = __client_ja;
var4 = __client_je; var4 = __client_je;
class231.method4520(UnitPriceComparator.tempMenuAction, var3, var4); class231.processTempMenuAction(UnitPriceComparator.tempMenuAction, var3, var4);
UnitPriceComparator.tempMenuAction = null; UnitPriceComparator.tempMenuAction = null;
} }
@@ -6216,7 +6216,7 @@ public final class Client extends GameShell implements Usernamed {
if(DevicePcmPlayerProvider.dragInventoryWidget != null && !__client_jl && menuOptionsCount > 0 && !this.shouldLeftClickOpenMenu()) { if(DevicePcmPlayerProvider.dragInventoryWidget != null && !__client_jl && menuOptionsCount > 0 && !this.shouldLeftClickOpenMenu()) {
int var10 = __client_ja; int var10 = __client_ja;
int var11 = __client_je; int var11 = __client_je;
class231.method4520(UnitPriceComparator.tempMenuAction, var10, var11); class231.processTempMenuAction(UnitPriceComparator.tempMenuAction, var10, var11);
UnitPriceComparator.tempMenuAction = null; UnitPriceComparator.tempMenuAction = null;
} }
@@ -6448,7 +6448,7 @@ public final class Client extends GameShell implements Usernamed {
} else if(menuOptionsCount > 0) { } else if(menuOptionsCount > 0) {
int var13 = widgetClickX + __client_nk; int var13 = widgetClickX + __client_nk;
int var14 = widgetClickY + __client_np; int var14 = widgetClickY + __client_np;
class231.method4520(UnitPriceComparator.tempMenuAction, var13, var14); class231.processTempMenuAction(UnitPriceComparator.tempMenuAction, var13, var14);
UnitPriceComparator.tempMenuAction = null; UnitPriceComparator.tempMenuAction = null;
} }

View File

@@ -543,14 +543,14 @@ public class class171 {
signature = "(IIIILjava/lang/String;I)V", signature = "(IIIILjava/lang/String;I)V",
garbageValue = "49247882" garbageValue = "49247882"
) )
static void method3494(int var0, int var1, int var2, int var3, String var4) { static void method3494(int opIndex, int parentID, int childID, int itemID, String target) {
Widget var5 = class204.getWidgetChild(var1, var2); Widget var5 = class204.getWidgetChild(parentID, childID);
if(var5 != null) { if(var5 != null) {
if(var5.onOp != null) { if(var5.onOp != null) {
ScriptEvent var6 = new ScriptEvent(); ScriptEvent var6 = new ScriptEvent();
var6.widget = var5; var6.widget = var5;
var6.opIndex = var0; var6.opIndex = opIndex;
var6.targetName = var4; var6.targetName = target;
var6.args0 = var5.onOp; var6.args0 = var5.onOp;
AbstractIndexCache.runScript(var6); AbstractIndexCache.runScript(var6);
} }
@@ -562,87 +562,87 @@ public class class171 {
if(var11) { if(var11) {
int var8 = class1.getWidgetClickMask(var5); int var8 = class1.getWidgetClickMask(var5);
int var9 = var0 - 1; int var9 = opIndex - 1;
boolean var7 = (var8 >> var9 + 1 & 1) != 0; boolean var7 = (var8 >> var9 + 1 & 1) != 0;
if(var7) { if(var7) {
PacketBufferNode var10; PacketBufferNode var10;
if(var0 == 1) { if(opIndex == 1) {
var10 = Interpreter.method1915(ClientPacket.__gs_bi, Client.packetWriter.isaacCipher); var10 = Interpreter.method1915(ClientPacket.__gs_bi, Client.packetWriter.isaacCipher);
var10.packetBuffer.writeInt(var1); var10.packetBuffer.writeInt(parentID);
var10.packetBuffer.writeShort(var2); var10.packetBuffer.writeShort(childID);
var10.packetBuffer.writeShort(var3); var10.packetBuffer.writeShort(itemID);
Client.packetWriter.__q_167(var10); Client.packetWriter.__q_167(var10);
} }
if(var0 == 2) { if(opIndex == 2) {
var10 = Interpreter.method1915(ClientPacket.__gs_b, Client.packetWriter.isaacCipher); var10 = Interpreter.method1915(ClientPacket.__gs_b, Client.packetWriter.isaacCipher);
var10.packetBuffer.writeInt(var1); var10.packetBuffer.writeInt(parentID);
var10.packetBuffer.writeShort(var2); var10.packetBuffer.writeShort(childID);
var10.packetBuffer.writeShort(var3); var10.packetBuffer.writeShort(itemID);
Client.packetWriter.__q_167(var10); Client.packetWriter.__q_167(var10);
} }
if(var0 == 3) { if(opIndex == 3) {
var10 = Interpreter.method1915(ClientPacket.__gs_aa, Client.packetWriter.isaacCipher); var10 = Interpreter.method1915(ClientPacket.__gs_aa, Client.packetWriter.isaacCipher);
var10.packetBuffer.writeInt(var1); var10.packetBuffer.writeInt(parentID);
var10.packetBuffer.writeShort(var2); var10.packetBuffer.writeShort(childID);
var10.packetBuffer.writeShort(var3); var10.packetBuffer.writeShort(itemID);
Client.packetWriter.__q_167(var10); Client.packetWriter.__q_167(var10);
} }
if(var0 == 4) { if(opIndex == 4) {
var10 = Interpreter.method1915(ClientPacket.__gs_y, Client.packetWriter.isaacCipher); var10 = Interpreter.method1915(ClientPacket.__gs_y, Client.packetWriter.isaacCipher);
var10.packetBuffer.writeInt(var1); var10.packetBuffer.writeInt(parentID);
var10.packetBuffer.writeShort(var2); var10.packetBuffer.writeShort(childID);
var10.packetBuffer.writeShort(var3); var10.packetBuffer.writeShort(itemID);
Client.packetWriter.__q_167(var10); Client.packetWriter.__q_167(var10);
} }
if(var0 == 5) { if(opIndex == 5) {
var10 = Interpreter.method1915(ClientPacket.__gs_ad, Client.packetWriter.isaacCipher); var10 = Interpreter.method1915(ClientPacket.__gs_ad, Client.packetWriter.isaacCipher);
var10.packetBuffer.writeInt(var1); var10.packetBuffer.writeInt(parentID);
var10.packetBuffer.writeShort(var2); var10.packetBuffer.writeShort(childID);
var10.packetBuffer.writeShort(var3); var10.packetBuffer.writeShort(itemID);
Client.packetWriter.__q_167(var10); Client.packetWriter.__q_167(var10);
} }
if(var0 == 6) { if(opIndex == 6) {
var10 = Interpreter.method1915(ClientPacket.__gs_br, Client.packetWriter.isaacCipher); var10 = Interpreter.method1915(ClientPacket.__gs_br, Client.packetWriter.isaacCipher);
var10.packetBuffer.writeInt(var1); var10.packetBuffer.writeInt(parentID);
var10.packetBuffer.writeShort(var2); var10.packetBuffer.writeShort(childID);
var10.packetBuffer.writeShort(var3); var10.packetBuffer.writeShort(itemID);
Client.packetWriter.__q_167(var10); Client.packetWriter.__q_167(var10);
} }
if(var0 == 7) { if(opIndex == 7) {
var10 = Interpreter.method1915(ClientPacket.__gs_cu, Client.packetWriter.isaacCipher); var10 = Interpreter.method1915(ClientPacket.__gs_cu, Client.packetWriter.isaacCipher);
var10.packetBuffer.writeInt(var1); var10.packetBuffer.writeInt(parentID);
var10.packetBuffer.writeShort(var2); var10.packetBuffer.writeShort(childID);
var10.packetBuffer.writeShort(var3); var10.packetBuffer.writeShort(itemID);
Client.packetWriter.__q_167(var10); Client.packetWriter.__q_167(var10);
} }
if(var0 == 8) { if(opIndex == 8) {
var10 = Interpreter.method1915(ClientPacket.__gs_a, Client.packetWriter.isaacCipher); var10 = Interpreter.method1915(ClientPacket.__gs_a, Client.packetWriter.isaacCipher);
var10.packetBuffer.writeInt(var1); var10.packetBuffer.writeInt(parentID);
var10.packetBuffer.writeShort(var2); var10.packetBuffer.writeShort(childID);
var10.packetBuffer.writeShort(var3); var10.packetBuffer.writeShort(itemID);
Client.packetWriter.__q_167(var10); Client.packetWriter.__q_167(var10);
} }
if(var0 == 9) { if(opIndex == 9) {
var10 = Interpreter.method1915(ClientPacket.__gs_cj, Client.packetWriter.isaacCipher); var10 = Interpreter.method1915(ClientPacket.__gs_cj, Client.packetWriter.isaacCipher);
var10.packetBuffer.writeInt(var1); var10.packetBuffer.writeInt(parentID);
var10.packetBuffer.writeShort(var2); var10.packetBuffer.writeShort(childID);
var10.packetBuffer.writeShort(var3); var10.packetBuffer.writeShort(itemID);
Client.packetWriter.__q_167(var10); Client.packetWriter.__q_167(var10);
} }
if(var0 == 10) { if(opIndex == 10) {
var10 = Interpreter.method1915(ClientPacket.__gs_m, Client.packetWriter.isaacCipher); var10 = Interpreter.method1915(ClientPacket.__gs_m, Client.packetWriter.isaacCipher);
var10.packetBuffer.writeInt(var1); var10.packetBuffer.writeInt(parentID);
var10.packetBuffer.writeShort(var2); var10.packetBuffer.writeShort(childID);
var10.packetBuffer.writeShort(var3); var10.packetBuffer.writeShort(itemID);
Client.packetWriter.__q_167(var10); Client.packetWriter.__q_167(var10);
} }

View File

@@ -178,7 +178,8 @@ public enum class231 implements Enumerated {
signature = "(Lcs;IIB)V", signature = "(Lcs;IIB)V",
garbageValue = "1" garbageValue = "1"
) )
static final void method4520(MenuAction var0, int var1, int var2) { @Export("processTempMenuAction")
static final void processTempMenuAction(MenuAction var0, int var1, int var2) {
Actor.menuAction(var0.argument1, var0.argument2, var0.opcode, var0.argument0, var0.action, var0.action, var1, var2); Actor.menuAction(var0.argument1, var0.argument2, var0.opcode, var0.argument0, var0.action, var0.action, var1, var2);
} }