diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index 2b1a570014..de7049bd0d 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -203,6 +203,8 @@ public class WidgetID static final int CONTENT_CONTAINER = 9; static final int ITEM_CONTAINER = 12; static final int SEARCH_BUTTON_BACKGROUND = 39; + static final int DEPOSIT_INVENTORY = 41; + static final int DEPOSIT_EQUIPMENT = 43; static final int INCINERATOR = 45; static final int INCINERATOR_CONFIRM = 46; } diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index 43b240cade..42b05cd904 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -128,6 +128,8 @@ public enum WidgetInfo BANK_INCINERATOR(WidgetID.BANK_GROUP_ID, WidgetID.Bank.INCINERATOR), BANK_INCINERATOR_CONFIRM(WidgetID.BANK_GROUP_ID, WidgetID.Bank.INCINERATOR_CONFIRM), BANK_CONTENT_CONTAINER(WidgetID.BANK_GROUP_ID, WidgetID.Bank.CONTENT_CONTAINER), + BANK_DEPOSIT_EQUIPMENT(WidgetID.BANK_GROUP_ID, WidgetID.Bank.DEPOSIT_EQUIPMENT), + BANK_DEPOSIT_INVENTORY(WidgetID.BANK_GROUP_ID, WidgetID.Bank.DEPOSIT_INVENTORY), GRAND_EXCHANGE_WINDOW_CONTAINER(WidgetID.GRAND_EXCHANGE_GROUP_ID, WidgetID.GrandExchange.WINDOW_CONTAINER), GRAND_EXCHANGE_OFFER_CONTAINER(WidgetID.GRAND_EXCHANGE_GROUP_ID, WidgetID.GrandExchange.OFFER_CONTAINER), 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 83b4ab81f2..3b4ed54918 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 @@ -32,6 +32,9 @@ import java.awt.event.MouseWheelEvent; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; import javax.inject.Inject; import javax.inject.Singleton; import lombok.Getter; @@ -80,6 +83,8 @@ public class TabInterface private static final String VIEW_TAB = "View tag tab"; private static final String CHANGE_ICON = "Change icon"; private static final String REMOVE_TAG = "Remove-tag"; + private static final String TAG_GEAR = "Tag-equipment"; + private static final String TAG_INVENTORY = "Tag-inventory"; private static final int TAB_HEIGHT = 40; private static final int TAB_WIDTH = 39; private static final int BUTTON_HEIGHT = 20; @@ -314,15 +319,7 @@ public class TabInterface && event.getActionParam1() == WidgetInfo.BANK_ITEM_CONTAINER.getId() && event.getOption().equals("Examine")) { - MenuEntry removeTag = new MenuEntry(); - removeTag.setParam0(event.getActionParam0()); - removeTag.setParam1(event.getActionParam1()); - removeTag.setTarget(event.getTarget()); - removeTag.setOption(REMOVE_TAG + " (" + activeTab.getTag() + ")"); - removeTag.setType(MenuAction.RUNELITE.getId()); - removeTag.setIdentifier(event.getIdentifier()); - entries = Arrays.copyOf(entries, entries.length + 1); - entries[entries.length - 1] = removeTag; + entries = createMenuEntry(event, REMOVE_TAG + " (" + activeTab.getTag() + ")", event.getTarget(), entries); client.setMenuEntries(entries); } else if (iconToSet != null && (entry.getOption().startsWith("Withdraw-") || entry.getOption().equals("Release"))) @@ -331,6 +328,30 @@ public class TabInterface entry.setOption(CHANGE_ICON + " (" + iconToSet.getTag() + ")"); client.setMenuEntries(entries); } + else if (event.getActionParam1() == WidgetInfo.BANK_DEPOSIT_INVENTORY.getId() + && event.getOption().equals("Deposit inventory")) + { + entries = createMenuEntry(event, TAG_INVENTORY, event.getTarget(), entries); + + if (activeTab != null) + { + entries = createMenuEntry(event, TAG_INVENTORY, ColorUtil.wrapWithColorTag(activeTab.getTag(), HILIGHT_COLOR), entries); + } + + 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); + + if (activeTab != null) + { + entries = createMenuEntry(event, TAG_GEAR, ColorUtil.wrapWithColorTag(activeTab.getTag(), HILIGHT_COLOR), entries); + } + + client.setMenuEntries(entries); + } } public void handleClick(MenuOptionClicked event) @@ -383,6 +404,48 @@ public class TabInterface tagManager.removeTag(itemId, activeTab.getTag()); doSearch(InputType.SEARCH, TAG_SEARCH + activeTab.getTag()); } + else if (event.getMenuAction() == MenuAction.RUNELITE + && (event.getMenuOption().equals(TAG_INVENTORY) || event.getMenuOption().equals(TAG_GEAR))) + { + event.consume(); + boolean inventory = event.getMenuOption().equals(TAG_INVENTORY); + ItemContainer container = client.getItemContainer(inventory ? InventoryID.INVENTORY : InventoryID.EQUIPMENT); + + if (container == null) + { + return; + } + + List items = Arrays.stream(container.getItems()) + .filter(Objects::nonNull) + .map(i -> itemManager.canonicalize(i.getId())) + .collect(Collectors.toList()); + + if (activeTab != null && event.getMenuTarget() != null && Text.removeTags(event.getMenuTarget()).equals(activeTab.getTag())) + { + for (Integer item : items) + { + tagManager.addTag(item, activeTab.getTag()); + } + + openTag(TAG_SEARCH + activeTab.getTag()); + } + else + { + chatboxInputManager.openInputWindow((inventory ? "Inventory " : "Equipment ") + "tags:", "", (newTags) -> + { + if (!Objects.equals(newTags, client.getVar(VarClientStr.INPUT_TEXT)) || Strings.isNullOrEmpty(newTags)) + { + return; + } + + for (Integer item : items) + { + tagManager.setTagString(item, newTags); + } + }); + } + } else { switch (event.getMenuOption()) @@ -819,4 +882,18 @@ public class TabInterface Widget searchBackground = client.getWidget(WidgetInfo.BANK_SEARCH_BUTTON_BACKGROUND); searchBackground.setSpriteId(SpriteID.EQUIPMENT_SLOT_TILE); } + + private static MenuEntry[] createMenuEntry(MenuEntryAdded event, String option, String target, MenuEntry[] entries) + { + final MenuEntry entry = new MenuEntry(); + entry.setParam0(event.getActionParam0()); + entry.setParam1(event.getActionParam1()); + entry.setTarget(target); + entry.setOption(option); + entry.setType(MenuAction.RUNELITE.getId()); + entry.setIdentifier(event.getIdentifier()); + entries = Arrays.copyOf(entries, entries.length + 1); + entries[entries.length - 1] = entry; + return entries; + } }