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 5cc4563b16..2dfcce94dc 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -1763,8 +1763,13 @@ public interface Client extends GameShell void setModulus(BigInteger modulus); - /* + /** * Returns the max item index + 1 from cache */ int getItemCount(); + + /** + * Adds a MenuEntry to the current menu. + */ + void insertMenuItem(String action, String target, int opcode, int identifier, int argument1, int argument2, boolean forceLeftClick); } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java index 20bcf9a9a8..3343450b86 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java @@ -35,7 +35,6 @@ import java.awt.event.KeyEvent; import java.awt.event.MouseWheelEvent; import java.text.ParseException; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -50,7 +49,6 @@ import net.runelite.api.ItemDefinition; import net.runelite.api.ItemContainer; import net.runelite.api.ItemID; import net.runelite.api.MenuOpcode; -import net.runelite.api.MenuEntry; import net.runelite.api.VarClientInt; import net.runelite.api.VarClientStr; import net.runelite.api.events.ConfigChanged; @@ -275,8 +273,7 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis { case "lineSpace": // prevent Y value being incremented to account for line separators - intStack[intStackSize - 1] = 0; - break; + // fallthrough case "tabTextSpace": // prevent Y value being incremented to account for "Tab x" text intStack[intStackSize - 1] = 0; @@ -322,8 +319,6 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis private void onMenuEntryAdded(MenuEntryAdded event) { - MenuEntry[] entries = client.getMenuEntries(); - if (event.getActionParam1() == WidgetInfo.BANK_ITEM_CONTAINER.getId() && event.getOption().equals("Examine")) { @@ -338,16 +333,15 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis text += " (" + tagCount + ")"; } - MenuEntry editTags = new MenuEntry(); - editTags.setParam0(event.getActionParam0()); - editTags.setParam1(event.getActionParam1()); - editTags.setTarget(event.getTarget()); - editTags.setOption(text); - editTags.setOpcode(MenuOpcode.RUNELITE.getId()); - editTags.setIdentifier(event.getIdentifier()); - entries = Arrays.copyOf(entries, entries.length + 1); - entries[entries.length - 1] = editTags; - client.setMenuEntries(entries); + client.insertMenuItem( + text, + event.getTarget(), + MenuOpcode.RUNELITE.getId(), + event.getIdentifier(), + event.getActionParam0(), + event.getActionParam1(), + false + ); } tabInterface.handleAdd(event); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java index 5e071cc74b..6870af1e76 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java @@ -535,39 +535,31 @@ public class TabInterface return; } - MenuEntry[] entries = client.getMenuEntries(); - MenuEntry entry = entries[entries.length - 1]; - if (activeTab != null && event.getActionParam1() == WidgetInfo.BANK_ITEM_CONTAINER.getId() && event.getOption().equals("Examine")) { - entries = createMenuEntry(event, REMOVE_TAG + " (" + activeTab.getTag() + ")", event.getTarget(), entries); - client.setMenuEntries(entries); + insertMenuEntry(event, REMOVE_TAG + " (" + activeTab.getTag() + ")", event.getTarget()); } else if (event.getActionParam1() == WidgetInfo.BANK_DEPOSIT_INVENTORY.getId() && event.getOption().equals("Deposit inventory")) { - entries = createMenuEntry(event, TAG_INVENTORY, event.getTarget(), entries); + insertMenuEntry(event, TAG_INVENTORY, event.getTarget()); if (activeTab != null) { - entries = createMenuEntry(event, TAG_INVENTORY, ColorUtil.wrapWithColorTag(activeTab.getTag(), HILIGHT_COLOR), entries); + insertMenuEntry(event, TAG_INVENTORY, ColorUtil.wrapWithColorTag(activeTab.getTag(), HILIGHT_COLOR)); } - - client.setMenuEntries(entries); } else if (event.getActionParam1() == WidgetInfo.BANK_DEPOSIT_EQUIPMENT.getId() && event.getOption().equals("Deposit worn items")) { - entries = createMenuEntry(event, TAG_GEAR, event.getTarget(), entries); + insertMenuEntry(event, TAG_GEAR, event.getTarget()); if (activeTab != null) { - entries = createMenuEntry(event, TAG_GEAR, ColorUtil.wrapWithColorTag(activeTab.getTag(), HILIGHT_COLOR), entries); + insertMenuEntry(event, TAG_GEAR, ColorUtil.wrapWithColorTag(activeTab.getTag(), HILIGHT_COLOR)); } - - client.setMenuEntries(entries); } } @@ -580,8 +572,8 @@ public class TabInterface if (chatboxPanelManager.getCurrentInput() != null && event.getMenuOpcode() != MenuOpcode.CANCEL - && !event.getMenuEntry().equals(SCROLL_UP) - && !event.getMenuEntry().equals(SCROLL_DOWN)) + && !event.getOption().equals(SCROLL_UP) + && !event.getOption().equals(SCROLL_DOWN)) { chatboxPanelManager.close(); } @@ -1058,17 +1050,16 @@ public class TabInterface searchBackground.setSpriteId(SpriteID.EQUIPMENT_SLOT_TILE); } - private static MenuEntry[] createMenuEntry(MenuEntryAdded event, String option, String target, MenuEntry[] entries) + private void insertMenuEntry(MenuEntryAdded event, String option, String target) { - final MenuEntry entry = new MenuEntry(); - entry.setParam0(event.getActionParam0()); - entry.setParam1(event.getActionParam1()); - entry.setTarget(target); - entry.setOption(option); - entry.setOpcode(MenuOpcode.RUNELITE.getId()); - entry.setIdentifier(event.getIdentifier()); - entries = Arrays.copyOf(entries, entries.length + 1); - entries[entries.length - 1] = entry; - return entries; + client.insertMenuItem( + option, + target, + MenuOpcode.RUNELITE.getId(), + event.getIdentifier(), + event.getActionParam0(), + event.getActionParam1(), + false + ); } } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java index 2e3c84cdf5..2e4e0fa829 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java @@ -1050,4 +1050,8 @@ public interface RSClient extends RSGameShell, Client @Import("ItemDefinition_fileCount") int getItemCount(); + + @Import("insertMenuItem") + @Override + void insertMenuItem(String action, String target, int opcode, int identifier, int argument1, int argument2, boolean forceLeftClick); } \ No newline at end of file