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()
|
@ScriptArguments()
|
||||||
public static final int BANKMAIN_SEARCHING = 514;
|
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;
|
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.Config;
|
||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
import net.runelite.client.config.Keybind;
|
||||||
|
|
||||||
@ConfigGroup("bank")
|
@ConfigGroup("bank")
|
||||||
public interface BankConfig extends Config
|
public interface BankConfig extends Config
|
||||||
@@ -119,4 +122,15 @@ public interface BankConfig extends Config
|
|||||||
{
|
{
|
||||||
return false;
|
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.HashMultiset;
|
||||||
import com.google.common.collect.Multiset;
|
import com.google.common.collect.Multiset;
|
||||||
import com.google.inject.Provides;
|
import com.google.inject.Provides;
|
||||||
|
import java.awt.event.KeyEvent;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
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 static net.runelite.api.widgets.WidgetInfo.TO_GROUP;
|
||||||
import net.runelite.client.callback.ClientThread;
|
import net.runelite.client.callback.ClientThread;
|
||||||
import net.runelite.client.config.ConfigManager;
|
import net.runelite.client.config.ConfigManager;
|
||||||
|
import net.runelite.client.config.Keybind;
|
||||||
import net.runelite.client.eventbus.Subscribe;
|
import net.runelite.client.eventbus.Subscribe;
|
||||||
import net.runelite.client.game.ItemManager;
|
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.Plugin;
|
||||||
import net.runelite.client.plugins.PluginDescriptor;
|
import net.runelite.client.plugins.PluginDescriptor;
|
||||||
import net.runelite.client.util.QuantityFormatter;
|
import net.runelite.client.util.QuantityFormatter;
|
||||||
@@ -98,19 +102,61 @@ public class BankPlugin extends Plugin
|
|||||||
@Inject
|
@Inject
|
||||||
private BankSearch bankSearch;
|
private BankSearch bankSearch;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private KeyManager keyManager;
|
||||||
|
|
||||||
private boolean forceRightClickFlag;
|
private boolean forceRightClickFlag;
|
||||||
private Multiset<Integer> itemQuantities; // bank item quantities for bank value search
|
private Multiset<Integer> itemQuantities; // bank item quantities for bank value search
|
||||||
private String searchString;
|
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
|
@Provides
|
||||||
BankConfig getConfig(ConfigManager configManager)
|
BankConfig getConfig(ConfigManager configManager)
|
||||||
{
|
{
|
||||||
return configManager.getConfig(BankConfig.class);
|
return configManager.getConfig(BankConfig.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void startUp()
|
||||||
|
{
|
||||||
|
keyManager.registerKeyListener(searchHotkeyListener);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void shutDown()
|
protected void shutDown()
|
||||||
{
|
{
|
||||||
|
keyManager.unregisterKeyListener(searchHotkeyListener);
|
||||||
clientThread.invokeLater(() -> bankSearch.reset(false));
|
clientThread.invokeLater(() -> bankSearch.reset(false));
|
||||||
forceRightClickFlag = false;
|
forceRightClickFlag = false;
|
||||||
itemQuantities = null;
|
itemQuantities = null;
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import net.runelite.api.vars.InputType;
|
|||||||
import net.runelite.api.widgets.Widget;
|
import net.runelite.api.widgets.Widget;
|
||||||
import net.runelite.api.widgets.WidgetInfo;
|
import net.runelite.api.widgets.WidgetInfo;
|
||||||
import net.runelite.client.callback.ClientThread;
|
import net.runelite.client.callback.ClientThread;
|
||||||
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class BankSearch
|
public class BankSearch
|
||||||
@@ -69,6 +70,32 @@ public class BankSearch
|
|||||||
client.runScript(scriptArgs);
|
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)
|
public void reset(boolean closeChat)
|
||||||
{
|
{
|
||||||
clientThread.invoke(() ->
|
clientThread.invoke(() ->
|
||||||
|
|||||||
Reference in New Issue
Block a user