diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index 2dfcce94dc..922e39c42f 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -1743,12 +1743,6 @@ public interface Client extends GameShell */ void setUnhiddenCasts(Set casts); - /** - * Sorts the current menu entries in the same way the client does this. - * The last entry will be the left click one after this. - */ - void sortMenuEntries(); - /** * Add player to friendlist */ diff --git a/runelite-api/src/main/java/net/runelite/api/events/MenuOpened.java b/runelite-api/src/main/java/net/runelite/api/events/MenuOpened.java index bd05ba5ee8..b697153738 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/MenuOpened.java +++ b/runelite-api/src/main/java/net/runelite/api/events/MenuOpened.java @@ -33,6 +33,13 @@ import lombok.Data; @Data public class MenuOpened implements Event { + /** + * This should be set to true if anything about the menu + * in menuEntries is changed, so the changes can be + * propagated through to the client. + */ + private boolean modified; + /** * The menu entries in the newly opened menu. *

diff --git a/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java b/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java index ef1c5e3720..120de0a69d 100644 --- a/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java +++ b/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java @@ -240,7 +240,7 @@ public class MenuManager // Need to set the event entries to prevent conflicts event.setMenuEntries(arrayEntries); - client.setMenuEntries(arrayEntries); + event.setModified(true); } private void onMenuEntryAdded(MenuEntryAdded event) @@ -256,21 +256,20 @@ public class MenuManager int widgetId = event.getActionParam1(); Collection options = managedMenuOptions.get(widgetId); - MenuEntry[] menuEntries = client.getMenuEntries(); for (WidgetMenuOption currentMenu : options) { if (!menuContainsCustomMenu(currentMenu))//Don't add if we have already added it to this widget { - menuEntries = Arrays.copyOf(menuEntries, menuEntries.length + 1); - - MenuEntry menuEntry = menuEntries[menuEntries.length - 1] = new MenuEntry(); - menuEntry.setOption(currentMenu.getMenuOption()); - menuEntry.setParam1(widgetId); - menuEntry.setTarget(currentMenu.getMenuTarget()); - menuEntry.setOpcode(MenuOpcode.RUNELITE.getId()); - - client.setMenuEntries(menuEntries); + client.insertMenuItem( + currentMenu.getMenuOption(), + currentMenu.getMenuTarget(), + MenuOpcode.RUNELITE.getId(), + 0, + 0, + widgetId, + false + ); } } } @@ -293,8 +292,6 @@ public class MenuManager return null; } - client.sortMenuEntries(); - firstEntry = null; MenuEntry[] entries = new MenuEntry[menuOptionCount + priorityEntries.size()]; System.arraycopy(client.getMenuEntries(), 0, entries, 0, menuOptionCount); @@ -873,7 +870,6 @@ public class MenuManager // Backwards so we swap with the otherwise highest one // Count - 2 so we don't compare the entry against itself - outer: for (int i = menuOptionCount - 2; i > 0; i--) { final MenuEntry entry = entries[i]; @@ -887,7 +883,7 @@ public class MenuManager entries[i] = first; entries[menuOptionCount - 1] = entry; firstEntry = entry; - break outer; + return; } } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpPlugin.java index d569090a93..c0c7c4e5e0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpPlugin.java @@ -35,9 +35,8 @@ import net.runelite.api.Actor; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.GameState; -import net.runelite.api.MenuOpcode; import static net.runelite.api.MenuOpcode.MENU_ACTION_DEPRIORITIZE_OFFSET; -import net.runelite.api.MenuEntry; +import static net.runelite.api.MenuOpcode.NPC_SECOND_OPTION; import net.runelite.api.NPC; import net.runelite.api.NpcID; import net.runelite.api.Varbits; @@ -66,7 +65,6 @@ import net.runelite.client.ui.overlay.OverlayManager; @Slf4j public class CorpPlugin extends Plugin { - private static final int NPC_SECTION_ACTION = MenuOpcode.NPC_SECOND_OPTION.getId(); private static final String ATTACK = "Attack"; private static final String DARK_ENERGY_CORE = "Dark energy core"; @@ -244,27 +242,23 @@ public class CorpPlugin extends Plugin players.add(source); } - private void onMenuEntryAdded(MenuEntryAdded menuEntryAdded) + private void onMenuEntryAdded(MenuEntryAdded event) { - if (menuEntryAdded.getType() != NPC_SECTION_ACTION - || !this.leftClickCore || !menuEntryAdded.getOption().equals(ATTACK)) + if (event.getType() != NPC_SECOND_OPTION.getId() + || !this.leftClickCore || !event.getOption().equals(ATTACK)) { return; } - final int npcIndex = menuEntryAdded.getIdentifier(); + final int npcIndex = event.getIdentifier(); final NPC npc = client.getCachedNPCs()[npcIndex]; if (npc == null || !npc.getName().equals(DARK_ENERGY_CORE)) { return; } - // since this is the menu entry add event, this is the last menu entry - MenuEntry[] menuEntries = client.getMenuEntries(); - MenuEntry menuEntry = menuEntries[menuEntries.length - 1]; - - menuEntry.setOpcode(NPC_SECTION_ACTION + MENU_ACTION_DEPRIORITIZE_OFFSET); - client.setMenuEntries(menuEntries); + event.getMenuEntry().setOpcode(NPC_SECOND_OPTION.getId() + MENU_ACTION_DEPRIORITIZE_OFFSET); + event.setWasModified(true); } private void onConfigChanged(ConfigChanged configChanged) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java index 1197f43379..0710de3019 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java @@ -388,8 +388,7 @@ public class DevToolsPlugin extends Plugin if (EXAMINE_MENU_ACTIONS.contains(action)) { - MenuEntry[] entries = client.getMenuEntries(); - MenuEntry entry = entries[entries.length - 1]; + final MenuEntry entry = event.getMenuEntry(); final int identifier = event.getIdentifier(); String info = "ID: "; @@ -411,7 +410,7 @@ public class DevToolsPlugin extends Plugin } entry.setTarget(entry.getTarget() + " " + ColorUtil.prependColorTag("(" + info + ")", JagexColors.MENU_TARGET)); - client.setMenuEntries(entries); + event.setWasModified(true); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java index 844bfd34a6..bada2cd5b7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java @@ -28,7 +28,6 @@ package net.runelite.client.plugins.friendnotes; import com.google.common.base.Strings; -import com.google.common.collect.ObjectArrays; import java.awt.Color; import javax.annotation.Nullable; import javax.inject.Inject; @@ -38,7 +37,6 @@ import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.Friend; import net.runelite.api.MenuOpcode; -import net.runelite.api.MenuEntry; import net.runelite.api.Nameable; import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuOptionClicked; @@ -185,16 +183,16 @@ public class FriendNotesPlugin extends Plugin setHoveredFriend(Text.toJagexName(Text.removeTags(event.getTarget()))); // Build "Add Note" or "Edit Note" menu entry - final MenuEntry addNote = new MenuEntry(); - addNote.setOption(hoveredFriend == null || hoveredFriend.getNote() == null ? ADD_NOTE : EDIT_NOTE); - addNote.setOpcode(MenuOpcode.RUNELITE.getId()); - addNote.setTarget(event.getTarget()); //Preserve color codes here - addNote.setParam0(event.getActionParam0()); - addNote.setParam1(event.getActionParam1()); - // Add menu entry - final MenuEntry[] menuEntries = ObjectArrays.concat(client.getMenuEntries(), addNote); - client.setMenuEntries(menuEntries); + client.insertMenuItem( + hoveredFriend == null || hoveredFriend.getNote() == null ? ADD_NOTE : EDIT_NOTE, + event.getTarget(), + MenuOpcode.RUNELITE.getId(), + 0, + event.getActionParam0(), + event.getActionParam1(), + false + ); } else if (hoveredFriend != null) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/friendtagging/FriendTaggingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendtagging/FriendTaggingPlugin.java index f4cf9bafe0..0421d1761e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/friendtagging/FriendTaggingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendtagging/FriendTaggingPlugin.java @@ -10,7 +10,6 @@ package net.runelite.client.plugins.friendtagging; import com.google.common.base.Strings; -import com.google.common.collect.ObjectArrays; import java.awt.Toolkit; import java.awt.datatransfer.StringSelection; import java.util.Arrays; @@ -25,7 +24,6 @@ import net.runelite.api.Client; import net.runelite.api.Friend; import net.runelite.api.Ignore; import net.runelite.api.MenuOpcode; -import net.runelite.api.MenuEntry; import net.runelite.api.Nameable; import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuOptionClicked; @@ -129,16 +127,17 @@ public class FriendTaggingPlugin extends Plugin String friendName = Text.removeTags(event.getTarget()); // Build "Add Note" or "Edit Note" menu entry - final MenuEntry entry = new MenuEntry(); - entry.setOption(friendName == null || getTag(friendName) == null ? ADD_TAG : DELETE_TAG); - entry.setOpcode(MenuOpcode.RUNELITE.getId()); - entry.setTarget(event.getTarget()); //Preserve color codes here - entry.setParam0(event.getActionParam0()); - entry.setParam1(event.getActionParam1()); - + client.insertMenuItem( + friendName == null || getTag(friendName) == null ? ADD_TAG : DELETE_TAG, + event.getTarget(), + MenuOpcode.RUNELITE.getId(), + 0, + event.getActionParam0(), + event.getActionParam1(), + false + ); // Add menu entry - final MenuEntry[] menuEntries = ObjectArrays.concat(client.getMenuEntries(), entry); - client.setMenuEntries(menuEntries); + // jk it is already added } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java index 6879ea59f6..493963e654 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java @@ -431,8 +431,7 @@ public class GrandExchangePlugin extends Plugin return; } - final MenuEntry[] entries = client.getMenuEntries(); - final MenuEntry menuEntry = entries[entries.length - 1]; + final MenuEntry menuEntry = event.getMenuEntry(); final int widgetId = menuEntry.getParam1(); final int groupId = WidgetInfo.TO_GROUP(widgetId); @@ -450,7 +449,7 @@ public class GrandExchangePlugin extends Plugin case WidgetID.SHOP_INVENTORY_GROUP_ID: menuEntry.setOption(SEARCH_GRAND_EXCHANGE); menuEntry.setOpcode(MenuOpcode.RUNELITE.getId()); - client.setMenuEntries(entries); + event.setWasModified(true); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java index f81a205640..3a7b49609c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java @@ -951,8 +951,7 @@ public class GroundItemsPlugin extends Plugin return; } - MenuEntry[] menuEntries = client.getMenuEntries(); - MenuEntry lastEntry = menuEntries[menuEntries.length - 1]; + final MenuEntry lastEntry = event.getMenuEntry(); int quantity = 1; Node current = tileItemPile.getBottom(); @@ -986,6 +985,7 @@ public class GroundItemsPlugin extends Plugin { final String optionText = telegrabEntry ? "Cast" : "Take"; lastEntry.setOption(ColorUtil.prependColorTag(optionText, color)); + event.setWasModified(true); } if (mode == BOTH || mode == NAME) @@ -1005,43 +1005,20 @@ public class GroundItemsPlugin extends Plugin } lastEntry.setTarget(target); + event.setWasModified(true); } } if (this.showMenuItemQuantities && itemComposition.isStackable() && quantity > 1) { lastEntry.setTarget(lastEntry.getTarget() + " (" + quantity + ")"); + event.setWasModified(true); } if (this.removeIgnored && event.getOption().equals("Take") && hiddenItemList.contains(Text.removeTags(event.getTarget()))) { - menuEntries = removeOption(event.getOption(), event.getTarget()); + client.setMenuOptionCount(client.getMenuOptionCount() - 1); } - - client.setMenuEntries(menuEntries); - } - } - - private MenuEntry[] removeOption(String option, String target) - { - MenuEntry[] entries = client.getMenuEntries(); - int j = 0; - if (entries.length > 1) - { - MenuEntry[] newEntries = new MenuEntry[entries.length - 1]; - for (MenuEntry entry : entries) - { - if (!(entry.getOption().equals(option) && entry.getTarget().equals(target))) - { - newEntries[j++] = entry; - } - } - - return newEntries; - } - else - { - return entries; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/inventorytags/InventoryTagsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/inventorytags/InventoryTagsPlugin.java index c8aab211e9..c6e7dd75c4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/inventorytags/InventoryTagsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/inventorytags/InventoryTagsPlugin.java @@ -31,7 +31,6 @@ import java.awt.Color; import java.util.List; import javax.inject.Inject; import javax.inject.Singleton; -import net.runelite.api.Client; import net.runelite.api.MenuOpcode; import net.runelite.api.MenuEntry; import net.runelite.api.events.ConfigChanged; @@ -92,9 +91,6 @@ public class InventoryTagsPlugin extends Plugin private static final List GROUPS = ImmutableList.of(SETNAME_GROUP_8, SETNAME_GROUP_7, SETNAME_GROUP_6, SETNAME_GROUP_5, SETNAME_GROUP_4, SETNAME_GROUP_3, SETNAME_GROUP_2, SETNAME_GROUP_1); - @Inject - private Client client; - @Inject private ConfigManager configManager; @@ -254,7 +250,7 @@ public class InventoryTagsPlugin extends Plugin // Need to set the event entries to prevent conflicts event.setMenuEntries(menuList); - client.setMenuEntries(menuList); + event.setModified(true); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java index 5b915d4753..6e2cf4ea1c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java @@ -424,6 +424,7 @@ public class MenuEntrySwapperPlugin extends Plugin return; } + // TODO: Remove this? This makes everything here only work in wildy lol if (!(MiscUtils.getWildernessLevelFrom(client, localPlayer.getWorldLocation()) >= 0)) { return; @@ -508,9 +509,8 @@ public class MenuEntrySwapperPlugin extends Plugin menu_entries.add(entry); } - MenuEntry[] updated_menu_entries = new MenuEntry[menu_entries.size()]; - updated_menu_entries = menu_entries.toArray(updated_menu_entries); - client.setMenuEntries(updated_menu_entries); + event.setMenuEntries(menu_entries.toArray(new MenuEntry[0])); + event.setModified(true); } public void onMenuEntryAdded(MenuEntryAdded event) diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java index da6f33d83a..9cb9c68639 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java @@ -109,47 +109,4 @@ public abstract class MenuMixin implements RSClient } } } - - @Inject - @Override - public void sortMenuEntries() - { - int count = getMenuOptionCount() - 1; - int[] menuOpcodes = getMenuOpcodes(); - String[] menuTargetNames = getMenuTargets(); - String[] menuActions = getMenuOptions(); - int[] menuArguments0 = getMenuIdentifiers(); - int[] menuArguments1 = getMenuArguments1(); - int[] menuArguments2 = getMenuArguments2(); - boolean[] menuShiftClick = getMenuForceLeftClick(); - - int tmp; - for (int i = 0; i < count; ++i) - { - if (menuOpcodes[i] < 1000 && menuOpcodes[i + 1] > 1000) - { - String var3 = menuTargetNames[i]; - menuTargetNames[i] = menuTargetNames[i + 1]; - menuTargetNames[i + 1] = var3; - String var4 = menuActions[i]; - menuActions[i] = menuActions[i + 1]; - menuActions[i + 1] = var4; - tmp = menuOpcodes[i]; - menuOpcodes[i] = menuOpcodes[i + 1]; - menuOpcodes[i + 1] = tmp; - tmp = menuArguments1[i]; - menuArguments1[i] = menuArguments1[i + 1]; - menuArguments1[i + 1] = tmp; - tmp = menuArguments2[i]; - menuArguments2[i] = menuArguments2[i + 1]; - menuArguments2[i + 1] = tmp; - tmp = menuArguments0[i]; - menuArguments0[i] = menuArguments0[i + 1]; - menuArguments0[i + 1] = tmp; - boolean var6 = menuShiftClick[i]; - menuShiftClick[i] = menuShiftClick[i + 1]; - menuShiftClick[i + 1] = var6; - } - } - } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java index 08a548ef32..c30b8c76aa 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -1419,10 +1419,14 @@ public abstract class RSClientMixin implements RSClient @MethodHook("openMenu") public void menuOpened(int x, int y) { - sortMenuEntries(); final MenuOpened event = new MenuOpened(); event.setMenuEntries(getMenuEntries()); callbacks.post(MenuOpened.class, event); + + if (event.isModified()) + { + setMenuEntries(event.getMenuEntries()); + } } @Inject diff --git a/runescape-client/src/main/java/Client.java b/runescape-client/src/main/java/Client.java index 586bc7644f..5cd11074ac 100644 --- a/runescape-client/src/main/java/Client.java +++ b/runescape-client/src/main/java/Client.java @@ -5411,131 +5411,133 @@ public final class Client extends GameShell implements Usernamed { garbageValue = "1" ) final void method1293() { - WorldMapID.method537(); - if (class188.dragInventoryWidget == null) { - if (clickedWidget == null) { - int var2; - int var4; - int var5; - int var10; - int var19; - label274: { - int var1 = MouseHandler.MouseHandler_lastButton; - int var3; - int var6; - int var8; - if (isMenuOpen) { - if (var1 != 1 && (FriendSystem.mouseCam || var1 != 4)) { - var2 = MouseHandler.MouseHandler_x; - var3 = MouseHandler.MouseHandler_y; - if (var2 < MilliClock.menuX - 10 || var2 > World.menuWidth + MilliClock.menuX + 10 || var3 < class96.menuY - 10 || var3 > class1.menuHeight + class96.menuY + 10) { - isMenuOpen = false; - FloorDecoration.method2786(MilliClock.menuX, class96.menuY, World.menuWidth, class1.menuHeight); - } - } + WorldMapID.sortMenuEntries(); + if (class188.dragInventoryWidget != null) { + return; + } + if (clickedWidget != null) { + return; + } + int var2; + int var4; + int var5; + int var10; + int var19; + label274: { + int var1 = MouseHandler.MouseHandler_lastButton; + int var3; + int var6; + int var8; + if (isMenuOpen) { + if (var1 != 1 && (FriendSystem.mouseCam || var1 != 4)) { + var2 = MouseHandler.MouseHandler_x; + var3 = MouseHandler.MouseHandler_y; + if (var2 < MilliClock.menuX - 10 || var2 > World.menuWidth + MilliClock.menuX + 10 || var3 < class96.menuY - 10 || var3 > class1.menuHeight + class96.menuY + 10) { + isMenuOpen = false; + FloorDecoration.method2786(MilliClock.menuX, class96.menuY, World.menuWidth, class1.menuHeight); + } + } - if (var1 == 1 || !FriendSystem.mouseCam && var1 == 4) { - var2 = MilliClock.menuX; - var3 = class96.menuY; - var4 = World.menuWidth; - var5 = MouseHandler.MouseHandler_lastPressedX; - var6 = MouseHandler.MouseHandler_lastPressedY; - int var18 = -1; + if (var1 == 1 || !FriendSystem.mouseCam && var1 == 4) { + var2 = MilliClock.menuX; + var3 = class96.menuY; + var4 = World.menuWidth; + var5 = MouseHandler.MouseHandler_lastPressedX; + var6 = MouseHandler.MouseHandler_lastPressedY; + int var18 = -1; - for (var8 = 0; var8 < menuOptionsCount; ++var8) { - var19 = var3 + (menuOptionsCount - 1 - var8) * 15 + 31; - if (var5 > var2 && var5 < var4 + var2 && var6 > var19 - 13 && var6 < var19 + 3) { - var18 = var8; - } - } - - if (var18 != -1 && var18 >= 0) { - var8 = menuArguments1[var18]; - var19 = menuArguments2[var18]; - var10 = menuOpcodes[var18]; - int var17 = menuIdentifiers[var18]; - String var12 = menuActions[var18]; - String var13 = menuTargets[var18]; - SecureRandomFuture.menuAction(var8, var19, var10, var17, var12, var13, MouseHandler.MouseHandler_lastPressedX, MouseHandler.MouseHandler_lastPressedY); - } - - isMenuOpen = false; - FloorDecoration.method2786(MilliClock.menuX, class96.menuY, World.menuWidth, class1.menuHeight); - } - } else { - var2 = Player.getNewestMenuIdx(); - if ((var1 == 1 || !FriendSystem.mouseCam && var1 == 4) && var2 >= 0) { - var3 = menuOpcodes[var2]; - if (var3 == 39 || var3 == 40 || var3 == 41 || var3 == 42 || var3 == 43 || var3 == 33 || var3 == 34 || var3 == 35 || var3 == 36 || var3 == 37 || var3 == 38 || var3 == 1005) { - var4 = menuArguments1[var2]; - var5 = menuArguments2[var2]; - Widget var14 = WorldMapElement.getWidget(var5); - var8 = ParamDefinition.getWidgetClickMask(var14); - boolean var7 = (var8 >> 28 & 1) != 0; - if (var7) { - break label274; - } - - var10 = ParamDefinition.getWidgetClickMask(var14); - boolean var9 = (var10 >> 29 & 1) != 0; - if (var9) { - break label274; - } - } - } - - if ((var1 == 1 || !FriendSystem.mouseCam && var1 == 4) && this.shouldLeftClickOpenMenu()) { - var1 = 2; - } - - if ((var1 == 1 || !FriendSystem.mouseCam && var1 == 4) && menuOptionsCount > 0 && var2 >= 0) { - var3 = menuArguments1[var2]; - var4 = menuArguments2[var2]; - var5 = menuOpcodes[var2]; - var6 = menuIdentifiers[var2]; - String var15 = menuActions[var2]; - String var16 = menuTargets[var2]; - SecureRandomFuture.menuAction(var3, var4, var5, var6, var15, var16, MouseHandler.MouseHandler_lastPressedX, MouseHandler.MouseHandler_lastPressedY); - } - - if (var1 == 2 && menuOptionsCount > 0) { - this.openMenu(MouseHandler.MouseHandler_lastPressedX, MouseHandler.MouseHandler_lastPressedY); + for (var8 = 0; var8 < menuOptionsCount; ++var8) { + var19 = var3 + (menuOptionsCount - 1 - var8) * 15 + 31; + if (var5 > var2 && var5 < var4 + var2 && var6 > var19 - 13 && var6 < var19 + 3) { + var18 = var8; } } - return; + if (var18 != -1 && var18 >= 0) { + var8 = menuArguments1[var18]; + var19 = menuArguments2[var18]; + var10 = menuOpcodes[var18]; + int var17 = menuIdentifiers[var18]; + String var12 = menuActions[var18]; + String var13 = menuTargets[var18]; + SecureRandomFuture.menuAction(var8, var19, var10, var17, var12, var13, MouseHandler.MouseHandler_lastPressedX, MouseHandler.MouseHandler_lastPressedY); + } + + isMenuOpen = false; + FloorDecoration.method2786(MilliClock.menuX, class96.menuY, World.menuWidth, class1.menuHeight); + } + } else { + var2 = Player.getNewestMenuIdx(); + if ((var1 == 1 || !FriendSystem.mouseCam && var1 == 4) && var2 >= 0) { + var3 = menuOpcodes[var2]; + if (var3 == 39 || var3 == 40 || var3 == 41 || var3 == 42 || var3 == 43 || var3 == 33 || var3 == 34 || var3 == 35 || var3 == 36 || var3 == 37 || var3 == 38 || var3 == 1005) { + var4 = menuArguments1[var2]; + var5 = menuArguments2[var2]; + Widget var14 = WorldMapElement.getWidget(var5); + var8 = ParamDefinition.getWidgetClickMask(var14); + boolean var7 = (var8 >> 28 & 1) != 0; + if (var7) { + break label274; + } + + var10 = ParamDefinition.getWidgetClickMask(var14); + boolean var9 = (var10 >> 29 & 1) != 0; + if (var9) { + break label274; + } + } } - if (class188.dragInventoryWidget != null && !field867 && menuOptionsCount > 0 && !this.shouldLeftClickOpenMenu()) { - var19 = field732; - var10 = field744; - MenuAction var11 = class1.tempMenuAction; - SecureRandomFuture.menuAction(var11.argument1, var11.argument2, var11.opcode, var11.argument0, var11.action, var11.action, var19, var10); - class1.tempMenuAction = null; + if ((var1 == 1 || !FriendSystem.mouseCam && var1 == 4) && this.shouldLeftClickOpenMenu()) { + var1 = 2; } - field867 = false; - itemDragDuration = 0; - if (class188.dragInventoryWidget != null) { - FriendSystem.invalidateWidget(class188.dragInventoryWidget); + if ((var1 == 1 || !FriendSystem.mouseCam && var1 == 4) && menuOptionsCount > 0 && var2 >= 0) { + var3 = menuArguments1[var2]; + var4 = menuArguments2[var2]; + var5 = menuOpcodes[var2]; + var6 = menuIdentifiers[var2]; + String var15 = menuActions[var2]; + String var16 = menuTargets[var2]; + SecureRandomFuture.menuAction(var3, var4, var5, var6, var15, var16, MouseHandler.MouseHandler_lastPressedX, MouseHandler.MouseHandler_lastPressedY); } - class188.dragInventoryWidget = WorldMapElement.getWidget(var5); - dragItemSlotSource = var4; - field732 = MouseHandler.MouseHandler_lastPressedX; - field744 = MouseHandler.MouseHandler_lastPressedY; - if (var2 >= 0) { - class1.tempMenuAction = new MenuAction(); - class1.tempMenuAction.argument1 = menuArguments1[var2]; - class1.tempMenuAction.argument2 = menuArguments2[var2]; - class1.tempMenuAction.opcode = menuOpcodes[var2]; - class1.tempMenuAction.argument0 = menuIdentifiers[var2]; - class1.tempMenuAction.action = menuActions[var2]; + if (var1 == 2 && menuOptionsCount > 0) { + this.openMenu(MouseHandler.MouseHandler_lastPressedX, MouseHandler.MouseHandler_lastPressedY); } - - FriendSystem.invalidateWidget(class188.dragInventoryWidget); } + + return; } + + if (class188.dragInventoryWidget != null && !field867 && menuOptionsCount > 0 && !this.shouldLeftClickOpenMenu()) { + var19 = field732; + var10 = field744; + MenuAction var11 = class1.tempMenuAction; + SecureRandomFuture.menuAction(var11.argument1, var11.argument2, var11.opcode, var11.argument0, var11.action, var11.action, var19, var10); + class1.tempMenuAction = null; + } + + field867 = false; + itemDragDuration = 0; + if (class188.dragInventoryWidget != null) { + FriendSystem.invalidateWidget(class188.dragInventoryWidget); + } + + class188.dragInventoryWidget = WorldMapElement.getWidget(var5); + dragItemSlotSource = var4; + field732 = MouseHandler.MouseHandler_lastPressedX; + field744 = MouseHandler.MouseHandler_lastPressedY; + if (var2 >= 0) { + class1.tempMenuAction = new MenuAction(); + class1.tempMenuAction.argument1 = menuArguments1[var2]; + class1.tempMenuAction.argument2 = menuArguments2[var2]; + class1.tempMenuAction.opcode = menuOpcodes[var2]; + class1.tempMenuAction.argument0 = menuIdentifiers[var2]; + class1.tempMenuAction.action = menuActions[var2]; + } + + FriendSystem.invalidateWidget(class188.dragInventoryWidget); } @ObfuscatedName("hf") diff --git a/runescape-client/src/main/java/WorldMapID.java b/runescape-client/src/main/java/WorldMapID.java index 15fa97bfb9..b44e489c22 100644 --- a/runescape-client/src/main/java/WorldMapID.java +++ b/runescape-client/src/main/java/WorldMapID.java @@ -60,7 +60,8 @@ public class WorldMapID { signature = "(S)V", garbageValue = "-6260" ) - static final void method537() { + @Export("sortMenuEntries") + static final void sortMenuEntries() { boolean var0 = false; while (!var0) {