diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsConfig.java index 9186a6106b..30fc30ab96 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsConfig.java @@ -124,6 +124,39 @@ public interface ChatCommandsConfig extends Config @ConfigItem( position = 8, + keyName = "bh", + name = "BH Command", + description = "Configures whether the Bounty Hunter - Hunter command is enabled
!bh" + ) + default boolean bh() + { + return true; + } + + @ConfigItem( + position = 9, + keyName = "bhRogue", + name = "BH Rogue Command", + description = "Configures whether the Bounty Hunter - Rogue command is enabled
!bhrogue" + ) + default boolean bhRogue() + { + return true; + } + + @ConfigItem( + position = 10, + keyName = "lms", + name = "LMS Command", + description = "Configures whether the Last Man Standing command is enabled
!lms" + ) + default boolean lms() + { + return true; + } + + @ConfigItem( + position = 11, keyName = "clearSingleWord", name = "Clear Single Word", description = "Enable hot key to clear single word at a time" @@ -134,7 +167,7 @@ public interface ChatCommandsConfig extends Config } @ConfigItem( - position = 9, + position = 12, keyName = "clearEntireChatBox", name = "Clear Chat Box", description = "Enable hotkey to clear entire chat box" diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java index 283b09b750..10f6da6f98 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java @@ -99,7 +99,10 @@ public class ChatCommandsPlugin extends Plugin private static final String TOTAL_LEVEL_COMMAND_STRING = "!total"; private static final String PRICE_COMMAND_STRING = "!price"; private static final String LEVEL_COMMAND_STRING = "!lvl"; + private static final String BOUNTY_HUNTER_HUNTER_COMMAND = "!bh"; + private static final String BOUNTY_HUNTER_ROGUE_COMMAND = "!bhrogue"; private static final String CLUES_COMMAND_STRING = "!clues"; + private static final String LAST_MAN_STANDING_COMMAND = "!lms"; private static final String KILLCOUNT_COMMAND_STRING = "!kc"; private static final String CMB_COMMAND_STRING = "!cmb"; private static final String QP_COMMAND_STRING = "!qp"; @@ -151,7 +154,10 @@ public class ChatCommandsPlugin extends Plugin chatCommandManager.registerCommandAsync(CMB_COMMAND_STRING, this::combatLevelLookup); chatCommandManager.registerCommand(PRICE_COMMAND_STRING, this::itemPriceLookup); chatCommandManager.registerCommandAsync(LEVEL_COMMAND_STRING, this::playerSkillLookup); + chatCommandManager.registerCommandAsync(BOUNTY_HUNTER_HUNTER_COMMAND, this::bountyHunterHunterLookup); + chatCommandManager.registerCommandAsync(BOUNTY_HUNTER_ROGUE_COMMAND, this::bountyHunterRogueLookup); chatCommandManager.registerCommandAsync(CLUES_COMMAND_STRING, this::clueLookup); + chatCommandManager.registerCommandAsync(LAST_MAN_STANDING_COMMAND, this::lastManStandingLookup); chatCommandManager.registerCommandAsync(KILLCOUNT_COMMAND_STRING, this::killCountLookup, this::killCountSubmit); chatCommandManager.registerCommandAsync(QP_COMMAND_STRING, this::questPointsLookup, this::questPointsSubmit); chatCommandManager.registerCommandAsync(PB_COMMAND, this::personalBestLookup, this::personalBestSubmit); @@ -1055,6 +1061,102 @@ public class ChatCommandsPlugin extends Plugin } } + private void bountyHunterHunterLookup(ChatMessage chatMessage, String message) + { + if (!config.bh()) + { + return; + } + + minigameLookup(chatMessage, HiscoreSkill.BOUNTY_HUNTER_HUNTER); + } + + private void bountyHunterRogueLookup(ChatMessage chatMessage, String message) + { + if (!config.bhRogue()) + { + return; + } + + minigameLookup(chatMessage, HiscoreSkill.BOUNTY_HUNTER_ROGUE); + } + + private void lastManStandingLookup(ChatMessage chatMessage, String message) + { + if (!config.lms()) + { + return; + } + + minigameLookup(chatMessage, HiscoreSkill.LAST_MAN_STANDING); + } + + private void minigameLookup(ChatMessage chatMessage, HiscoreSkill minigame) + { + try + { + final Skill hiscoreSkill; + final HiscoreLookup lookup = getCorrectLookupFor(chatMessage); + final HiscoreResult result = hiscoreClient.lookup(lookup.getName(), lookup.getEndpoint()); + + if (result == null) + { + log.warn("error looking up {} score: not found", minigame.getName().toLowerCase()); + return; + } + + switch (minigame) + { + case BOUNTY_HUNTER_HUNTER: + hiscoreSkill = result.getBountyHunterHunter(); + break; + case BOUNTY_HUNTER_ROGUE: + hiscoreSkill = result.getBountyHunterRogue(); + break; + case LAST_MAN_STANDING: + hiscoreSkill = result.getLastManStanding(); + break; + default: + log.warn("error looking up {} score: not implemented", minigame.getName().toLowerCase()); + return; + } + + int score = hiscoreSkill.getLevel(); + if (score == -1) + { + return; + } + + ChatMessageBuilder chatMessageBuilder = new ChatMessageBuilder() + .append(ChatColorType.NORMAL) + .append(minigame.getName()) + .append(" Score: ") + .append(ChatColorType.HIGHLIGHT) + .append(Integer.toString(score)); + + int rank = hiscoreSkill.getRank(); + if (rank != -1) + { + chatMessageBuilder.append(ChatColorType.NORMAL) + .append(" Rank: ") + .append(ChatColorType.HIGHLIGHT) + .append(String.format("%,d", rank)); + } + + String response = chatMessageBuilder.build(); + + log.debug("Setting response {}", response); + final MessageNode messageNode = chatMessage.getMessageNode(); + messageNode.setRuneLiteFormatMessage(response); + chatMessageManager.update(messageNode); + client.refreshChat(); + } + catch (IOException ex) + { + log.warn("error looking up {}", minigame.getName().toLowerCase(), ex); + } + } + private void clueLookup(ChatMessage chatMessage, String message) { if (!config.clue())