diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscoreConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscoreConfig.java index 89d9632850..8ba792f5e6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscoreConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscoreConfig.java @@ -74,4 +74,15 @@ public interface HiscoreConfig extends Config { return true; } + + @ConfigItem( + position = 5, + keyName = "bountylookup", + name = "Bounty lookup", + description = "Automatically lookup the stats of your bounty hunter target" + ) + default boolean bountylookup() + { + return false; + } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java index f6f32b631a..fc1f68eb95 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java @@ -31,13 +31,17 @@ import com.google.inject.Provides; import java.awt.image.BufferedImage; import java.lang.reflect.InvocationTargetException; import java.util.concurrent.ScheduledExecutorService; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.annotation.Nullable; import javax.inject.Inject; import javax.inject.Provider; import javax.swing.SwingUtilities; +import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.MenuAction; import net.runelite.api.MenuEntry; +import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.PlayerMenuOptionClicked; @@ -64,6 +68,7 @@ public class HiscorePlugin extends Plugin private static final String KICK_OPTION = "Kick"; private static final ImmutableList BEFORE_OPTIONS = ImmutableList.of("Add friend", "Remove friend", KICK_OPTION); private static final ImmutableList AFTER_OPTIONS = ImmutableList.of("Message"); + private static final Pattern BOUNTY_PATTERN = Pattern.compile("You've been assigned a target: (.*)"); @Inject @Nullable @@ -201,6 +206,31 @@ public class HiscorePlugin extends Plugin } } + @Subscribe + public void onPlayerMenuOptionClicked(PlayerMenuOptionClicked event) + { + if (event.getMenuOption().equals(LOOKUP)) + { + lookupPlayer(Text.removeTags(event.getMenuTarget())); + } + } + + @Subscribe + public void onChatMessage(ChatMessage event) + { + if (!config.bountylookup() || !event.getType().equals(ChatMessageType.SERVER)) + { + return; + } + + String message = event.getMessage(); + Matcher m = BOUNTY_PATTERN.matcher(message); + if (m.matches()) + { + lookupPlayer(m.group(1)); + } + } + private void insertMenuEntry(MenuEntry newEntry, MenuEntry[] entries, boolean after) { MenuEntry[] newMenu = ObjectArrays.concat(entries, newEntry); @@ -214,30 +244,26 @@ public class HiscorePlugin extends Plugin client.setMenuEntries(newMenu); } - @Subscribe - public void onLookupMenuClicked(PlayerMenuOptionClicked event) + private void lookupPlayer(String playerName) { - if (event.getMenuOption().equals(LOOKUP)) + executor.execute(() -> { - executor.execute(() -> + try { - try + SwingUtilities.invokeAndWait(() -> { - SwingUtilities.invokeAndWait(() -> + if (!navButton.isSelected()) { - if (!navButton.isSelected()) - { - navButton.getOnSelect().run(); - } - }); - } - catch (InterruptedException | InvocationTargetException e) - { - throw new RuntimeException(e); - } + navButton.getOnSelect().run(); + } + }); + } + catch (InterruptedException | InvocationTargetException e) + { + throw new RuntimeException(e); + } - hiscorePanel.lookup(Text.removeTags(event.getMenuTarget())); - }); - } + hiscorePanel.lookup(playerName); + }); } }