banktags: add tag searching for ge search

This commit is contained in:
Ron Young
2019-10-07 09:23:58 -05:00
committed by Adam
parent b4780dd762
commit 80398ae186

View File

@@ -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:<br>" +
"(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<Integer> 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)
{