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 e0a795e1aa..26e2612955 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 @@ -27,12 +27,15 @@ package net.runelite.client.plugins.banktags; import com.google.common.collect.Lists; +import com.google.common.primitives.Shorts; import com.google.inject.Provides; import java.awt.event.KeyEvent; import java.awt.event.MouseWheelEvent; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Set; +import java.util.TreeSet; import java.util.List; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -50,6 +53,7 @@ import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.DraggingWidgetChanged; import net.runelite.api.events.FocusChanged; import net.runelite.api.events.GameTick; +import net.runelite.api.events.GrandExchangeSearched; import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.ScriptCallbackEvent; @@ -62,6 +66,7 @@ import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.ItemManager; +import net.runelite.client.game.ItemVariationMapping; import net.runelite.client.game.SpriteManager; import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.input.KeyListener; @@ -93,6 +98,8 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis public static final String TAG_TABS_CONFIG = "tagtabs"; public static final String VAR_TAG_SUFFIX = "*"; + private static final int MAX_RESULT_COUNT = 250; + private static final String SEARCH_BANK_INPUT_TEXT = "Show items whose names or tags contain the following text:
" + "(To show only tagged items, start your search with 'tag:')"; @@ -248,6 +255,33 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis shiftPressed = false; } + @Subscribe + public void onGrandExchangeSearched(GrandExchangeSearched event) + { + final String input = client.getVar(VarClientStr.INPUT_TEXT); + if (!input.startsWith(TAG_SEARCH)) + { + return; + } + + event.consume(); + + final String tag = input.substring(TAG_SEARCH.length()).trim(); + final Set ids = tagManager.getItemsForTag(tag) + .stream() + .mapToInt(Math::abs) + .mapToObj(ItemVariationMapping::getVariations) + .flatMap(Collection::stream) + .distinct() + .filter(i -> itemManager.getItemComposition(i).isTradeable()) + .limit(MAX_RESULT_COUNT) + .collect(Collectors.toCollection(TreeSet::new)); + + client.setGeSearchResultIndex(0); + client.setGeSearchResultCount(ids.size()); + client.setGeSearchResultIds(Shorts.toArray(ids)); + } + @Subscribe public void onScriptCallbackEvent(ScriptCallbackEvent event) {