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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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(() ->
|
||||
|
||||
Reference in New Issue
Block a user