bank plugin: add ctrl+f hotkey to initiate bank search

Co-authored-by: melkypie <5113962+melkypie@users.noreply.github.com>
Co-authored-by: Adam <Adam@sigterm.info>
This commit is contained in:
trimbe
2019-10-27 16:09:25 -04:00
committed by Adam
parent 514995d140
commit 87f5e98a08
4 changed files with 101 additions and 0 deletions

View File

@@ -299,4 +299,18 @@ public final class ScriptID
@ScriptArguments()
public static final int BANKMAIN_SEARCHING = 514;
/**
* Toggles the bank search
*
* <ul>
* <li>int 1 (must be 1 or script immediately returns)</li>
* </ul>
*
* Also takes 17 widget IDs corresponding to various bank widgets.
* These can be retrieved from the onInvTransmitListener of BANK_ITEM_CONTAINER. Note that this array also
* contains the script ID for the bank layout script in the first index
*/
@ScriptArguments(integer = 18)
public static final int BANKMAIN_SEARCH_TOGGLE = 281;
}

View File

@@ -25,9 +25,12 @@
*/
package net.runelite.client.plugins.bank;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Keybind;
@ConfigGroup("bank")
public interface BankConfig extends Config
@@ -119,4 +122,15 @@ public interface BankConfig extends Config
{
return false;
}
@ConfigItem(
keyName = "searchKeybind",
name = "Search Shortcut",
description = "Keyboard shortcut for initiating a bank search",
position = 9
)
default Keybind searchKeybind()
{
return new Keybind(KeyEvent.VK_F, InputEvent.CTRL_DOWN_MASK);
}
}

View File

@@ -30,6 +30,7 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multiset;
import com.google.inject.Provides;
import java.awt.event.KeyEvent;
import java.text.ParseException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -59,8 +60,11 @@ import static net.runelite.api.widgets.WidgetInfo.TO_CHILD;
import static net.runelite.api.widgets.WidgetInfo.TO_GROUP;
import net.runelite.client.callback.ClientThread;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.config.Keybind;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.game.ItemManager;
import net.runelite.client.input.KeyListener;
import net.runelite.client.input.KeyManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.util.QuantityFormatter;
@@ -98,19 +102,61 @@ public class BankPlugin extends Plugin
@Inject
private BankSearch bankSearch;
@Inject
private KeyManager keyManager;
private boolean forceRightClickFlag;
private Multiset<Integer> itemQuantities; // bank item quantities for bank value search
private String searchString;
private final KeyListener searchHotkeyListener = new KeyListener()
{
@Override
public void keyTyped(KeyEvent e)
{
}
@Override
public void keyPressed(KeyEvent e)
{
Keybind keybind = config.searchKeybind();
if (keybind.matches(e))
{
Widget bankContainer = client.getWidget(WidgetInfo.BANK_ITEM_CONTAINER);
if (bankContainer == null || bankContainer.isSelfHidden())
{
return;
}
log.debug("Search hotkey pressed");
bankSearch.initSearch();
e.consume();
}
}
@Override
public void keyReleased(KeyEvent e)
{
}
};
@Provides
BankConfig getConfig(ConfigManager configManager)
{
return configManager.getConfig(BankConfig.class);
}
@Override
protected void startUp()
{
keyManager.registerKeyListener(searchHotkeyListener);
}
@Override
protected void shutDown()
{
keyManager.unregisterKeyListener(searchHotkeyListener);
clientThread.invokeLater(() -> bankSearch.reset(false));
forceRightClickFlag = false;
itemQuantities = null;

View File

@@ -35,6 +35,7 @@ import net.runelite.api.vars.InputType;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.callback.ClientThread;
import org.apache.commons.lang3.ArrayUtils;
@Singleton
public class BankSearch
@@ -69,6 +70,32 @@ public class BankSearch
client.runScript(scriptArgs);
}
public void initSearch()
{
clientThread.invoke(() ->
{
Widget bankContainer = client.getWidget(WidgetInfo.BANK_ITEM_CONTAINER);
if (bankContainer == null || bankContainer.isHidden())
{
return;
}
Object[] bankBuildArgs = bankContainer.getOnInvTransmitListener();
if (bankBuildArgs == null)
{
return;
}
// the search toggle script requires 1 as its first argument
Object[] searchToggleArgs = ArrayUtils.insert(1, bankBuildArgs, 1);
searchToggleArgs[0] = ScriptID.BANKMAIN_SEARCH_TOGGLE;
// reset search to clear tab tags and also allow us to initiate a new search while searching
reset(true);
client.runScript(searchToggleArgs);
});
}
public void reset(boolean closeChat)
{
clientThread.invoke(() ->