From 79cf2cb271c0ce87005f851bbeb7c9662b07cf66 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 25 Nov 2021 19:24:34 -0500 Subject: [PATCH] Add gim clan chat types --- .../net/runelite/api/ChatMessageType.java | 7 ++- .../java/net/runelite/api/MenuAction.java | 5 ++ .../client/chat/ChatCommandManager.java | 1 + .../client/chat/ChatMessageManager.java | 22 ++++++++ .../plugins/chatfilter/ChatFilterPlugin.java | 1 + .../chathistory/ChatHistoryPlugin.java | 54 ++++++++++++------- .../plugins/chathistory/ChatboxTab.java | 24 ++++----- .../ChatNotificationsPlugin.java | 1 + .../client/plugins/emojis/EmojiPlugin.java | 1 + 9 files changed, 84 insertions(+), 32 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/ChatMessageType.java b/runelite-api/src/main/java/net/runelite/api/ChatMessageType.java index 998e70de6a..d631395b89 100644 --- a/runelite-api/src/main/java/net/runelite/api/ChatMessageType.java +++ b/runelite-api/src/main/java/net/runelite/api/ChatMessageType.java @@ -179,6 +179,8 @@ public enum ChatMessageType CLAN_GIM_FORM_GROUP(111), CLAN_GIM_GROUP_WITH(112), + CLAN_GIM_CHAT(-1), + CLAN_GIM_MESSAGE(-1), /** * An unknown message type. */ @@ -192,7 +194,10 @@ public enum ChatMessageType { for (ChatMessageType chatMessageType : values()) { - CHAT_MESSAGE_TYPES.put(chatMessageType.type, chatMessageType); + if (chatMessageType.type != -1) + { + CHAT_MESSAGE_TYPES.put(chatMessageType.type, chatMessageType); + } } } diff --git a/runelite-api/src/main/java/net/runelite/api/MenuAction.java b/runelite-api/src/main/java/net/runelite/api/MenuAction.java index e389a3c588..033eaeedc6 100644 --- a/runelite-api/src/main/java/net/runelite/api/MenuAction.java +++ b/runelite-api/src/main/java/net/runelite/api/MenuAction.java @@ -231,6 +231,11 @@ public enum MenuAction */ SPELL_CAST_ON_WIDGET(58), + /** + * Menu action for high priority runelite options + */ + RUNELITE_HIGH_PRIORITY(999), + /** * Menu action triggered by examining an object. */ diff --git a/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java b/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java index ff4d8481d9..25404b6040 100644 --- a/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java +++ b/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java @@ -100,6 +100,7 @@ public class ChatCommandManager implements ChatboxInputListener case PRIVATECHATOUT: case CLAN_CHAT: case CLAN_GUEST_CHAT: + case CLAN_GIM_CHAT: break; default: return; diff --git a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java index 9012aa8227..d5ac3525af 100644 --- a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java +++ b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java @@ -153,6 +153,8 @@ public class ChatMessageManager break; case CLAN_CHAT: case CLAN_MESSAGE: + case CLAN_GIM_CHAT: + case CLAN_GIM_MESSAGE: usernameColor = isChatboxTransparent ? chatColorConfig.transparentClanChatUsernames() : chatColorConfig.opaqueClanChatUsernames(); senderColor = isChatboxTransparent ? chatColorConfig.transparentClanChannelName() : chatColorConfig.opaqueClanChannelName(); break; @@ -247,6 +249,7 @@ public class ChatMessageManager case FRIENDSCHAT: case CLAN_CHAT: case CLAN_GUEST_CHAT: + case CLAN_GIM_CHAT: return JagexColors.CHAT_FC_TEXT_OPAQUE_BACKGROUND; case ITEM_EXAMINE: case OBJECT_EXAMINE: @@ -255,6 +258,7 @@ public class ChatMessageManager case FRIENDSCHATNOTIFICATION: case CLAN_MESSAGE: case CLAN_GUEST_MESSAGE: + case CLAN_GIM_MESSAGE: return JagexColors.CHAT_GAME_EXAMINE_TEXT_OPAQUE_BACKGROUND; } } @@ -272,6 +276,7 @@ public class ChatMessageManager case FRIENDSCHAT: case CLAN_CHAT: case CLAN_GUEST_CHAT: + case CLAN_GIM_CHAT: return JagexColors.CHAT_FC_TEXT_TRANSPARENT_BACKGROUND; case ITEM_EXAMINE: case OBJECT_EXAMINE: @@ -280,6 +285,7 @@ public class ChatMessageManager case FRIENDSCHATNOTIFICATION: case CLAN_MESSAGE: case CLAN_GUEST_MESSAGE: + case CLAN_GIM_MESSAGE: return JagexColors.CHAT_GAME_EXAMINE_TEXT_TRANSPARENT_BACKGROUND; } } @@ -373,21 +379,29 @@ public class ChatMessageManager { cacheColor(new ChatColor(ChatColorType.NORMAL, chatColorConfig.opaqueClanChatInfo(), false), ChatMessageType.CLAN_MESSAGE); + cacheColor(new ChatColor(ChatColorType.NORMAL, chatColorConfig.opaqueClanChatInfo(), false), + ChatMessageType.CLAN_GIM_MESSAGE); } if (chatColorConfig.opaqueClanChatInfoHighlight() != null) { cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.opaqueClanChatInfoHighlight(), false), ChatMessageType.CLAN_MESSAGE); + cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.opaqueClanChatInfoHighlight(), false), + ChatMessageType.CLAN_GIM_MESSAGE); } if (chatColorConfig.opaqueClanChatMessage() != null) { cacheColor(new ChatColor(ChatColorType.NORMAL, chatColorConfig.opaqueClanChatMessage(), false), ChatMessageType.CLAN_CHAT); + cacheColor(new ChatColor(ChatColorType.NORMAL, chatColorConfig.opaqueClanChatMessage(), false), + ChatMessageType.CLAN_GIM_CHAT); } if (chatColorConfig.opaqueClanChatMessageHighlight() != null) { cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.opaqueClanChatMessageHighlight(), false), ChatMessageType.CLAN_CHAT); + cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.opaqueClanChatMessageHighlight(), false), + ChatMessageType.CLAN_GIM_CHAT); } if (chatColorConfig.opaqueClanChatGuestInfo() != null) @@ -555,21 +569,29 @@ public class ChatMessageManager { cacheColor(new ChatColor(ChatColorType.NORMAL, chatColorConfig.transparentClanChatInfo(), true), ChatMessageType.CLAN_MESSAGE); + cacheColor(new ChatColor(ChatColorType.NORMAL, chatColorConfig.transparentClanChatInfo(), true), + ChatMessageType.CLAN_GIM_MESSAGE); } if (chatColorConfig.transparentClanChatInfoHighlight() != null) { cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.transparentClanChatInfoHighlight(), true), ChatMessageType.CLAN_MESSAGE); + cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.transparentClanChatInfoHighlight(), true), + ChatMessageType.CLAN_GIM_MESSAGE); } if (chatColorConfig.transparentClanChatMessage() != null) { cacheColor(new ChatColor(ChatColorType.NORMAL, chatColorConfig.transparentClanChatMessage(), true), ChatMessageType.CLAN_CHAT); + cacheColor(new ChatColor(ChatColorType.NORMAL, chatColorConfig.transparentClanChatMessage(), true), + ChatMessageType.CLAN_GIM_CHAT); } if (chatColorConfig.transparentClanChatMessageHighlight() != null) { cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.transparentClanChatMessageHighlight(), true), ChatMessageType.CLAN_CHAT); + cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.transparentClanChatMessageHighlight(), true), + ChatMessageType.CLAN_GIM_CHAT); } if (chatColorConfig.transparentClanChatGuestInfo() != null) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java index ab0e0e7149..39d736d4c5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java @@ -188,6 +188,7 @@ public class ChatFilterPlugin extends Plugin case FRIENDSCHAT: case CLAN_CHAT: case CLAN_GUEST_CHAT: + case CLAN_GIM_CHAT: if (shouldFilterPlayerMessage(Text.removeTags(name))) { message = censorMessage(name, message); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java index 3313caf91c..bab6a35ff4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java @@ -28,7 +28,6 @@ package net.runelite.client.plugins.chathistory; import com.google.common.base.Strings; import com.google.common.collect.EvictingQueue; import com.google.inject.Provides; -import java.awt.Color; import java.awt.Toolkit; import java.awt.datatransfer.StringSelection; import java.awt.event.KeyEvent; @@ -63,7 +62,6 @@ 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.ColorUtil; import net.runelite.client.util.Text; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; @@ -177,6 +175,7 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener case FRIENDSCHAT: case CLAN_GUEST_CHAT: case CLAN_CHAT: + case CLAN_GIM_CHAT: case CONSOLE: messageQueue.offer(chatMessage.getMessageNode()); } @@ -266,35 +265,37 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener @Subscribe public void onMenuEntryAdded(MenuEntryAdded entry) { - final ChatboxTab tab = ChatboxTab.of(entry.getActionParam1()); + if (entry.getType() != MenuAction.CC_OP.getId()) + { + return; + } - if (tab == null || tab.getAfter() == null || !config.clearHistory() || !Text.removeTags(entry.getOption()).equals(tab.getAfter())) + ChatboxTab tab = ChatboxTab.of(entry.getActionParam1()); + if (tab == null || tab.getAfter() == null || !config.clearHistory() || !entry.getOption().endsWith(tab.getAfter())) { return; } final MenuEntry clearEntry = new MenuEntry(); clearEntry.setTarget(""); - clearEntry.setType(MenuAction.RUNELITE.getId()); + clearEntry.setType(MenuAction.RUNELITE_HIGH_PRIORITY.getId()); clearEntry.setParam0(entry.getActionParam0()); clearEntry.setParam1(entry.getActionParam1()); - if (tab == ChatboxTab.GAME) - { - // keep type as the original CC_OP to correctly group "Game: Clear history" with - // other tab "Game: *" options. - clearEntry.setType(entry.getType()); - } - - final StringBuilder messageBuilder = new StringBuilder(); - + final StringBuilder optionBuilder = new StringBuilder(); if (tab != ChatboxTab.ALL) { - messageBuilder.append(ColorUtil.wrapWithColorTag(tab.getName() + ": ", Color.YELLOW)); + // Pull tab name from menu since Trade/Group is variable + String option = entry.getOption(); + int idx = option.indexOf(':'); + if (idx != -1) + { + optionBuilder.append(option, 0, idx).append(": "); + } } - messageBuilder.append(CLEAR_HISTORY); - clearEntry.setOption(messageBuilder.toString()); + optionBuilder.append(CLEAR_HISTORY); + clearEntry.setOption(optionBuilder.toString()); final MenuEntry[] menuEntries = client.getMenuEntries(); client.setMenuEntries(ArrayUtils.insert(menuEntries.length - 1, menuEntries, clearEntry)); @@ -330,7 +331,7 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener boolean removed = false; for (ChatMessageType msgType : tab.getMessageTypes()) { - final ChatLineBuffer lineBuffer = client.getChatLineMap().get(msgType.getType()); + final ChatLineBuffer lineBuffer = client.getChatLineMap().get(toRealType(msgType).getType()); if (lineBuffer == null) { continue; @@ -339,7 +340,8 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener final MessageNode[] lines = lineBuffer.getLines().clone(); for (final MessageNode line : lines) { - if (line != null) + // check the type because gim and clan chat are shared in the same line buffer + if (line != null && line.getType() == msgType) { lineBuffer.removeMessageNode(line); removed = true; @@ -354,6 +356,20 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener } } + private ChatMessageType toRealType(ChatMessageType type) + { + switch (type) + { + // gim chat/message are actually in the clan chat/message line buffers + case CLAN_GIM_CHAT: + return ChatMessageType.CLAN_CHAT; + case CLAN_GIM_MESSAGE: + return ChatMessageType.CLAN_MESSAGE; + default: + return type; + } + } + @Override public void keyPressed(KeyEvent e) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatboxTab.java b/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatboxTab.java index a0ad48f287..3040438eef 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatboxTab.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatboxTab.java @@ -35,46 +35,46 @@ import net.runelite.api.widgets.WidgetInfo; enum ChatboxTab { - ALL("All", "Switch tab", WidgetInfo.CHATBOX_TAB_ALL, + ALL("Switch tab", WidgetInfo.CHATBOX_TAB_ALL, ChatMessageType.values()), // null 'after' var since we're not adding to menu - PRIVATE("Private", null, WidgetInfo.CHATBOX_TAB_PRIVATE, + PRIVATE(null, WidgetInfo.CHATBOX_TAB_PRIVATE, ChatMessageType.PRIVATECHAT, ChatMessageType.PRIVATECHATOUT, ChatMessageType.MODPRIVATECHAT, ChatMessageType.LOGINLOGOUTNOTIFICATION), // null 'after' var since we're not adding to menu - PUBLIC("Public", null, WidgetInfo.CHATBOX_TAB_PUBLIC, + PUBLIC(null, WidgetInfo.CHATBOX_TAB_PUBLIC, ChatMessageType.PUBLICCHAT, ChatMessageType.AUTOTYPER, ChatMessageType.MODCHAT, ChatMessageType.MODAUTOTYPER), - GAME("Game", "Game: Filter", WidgetInfo.CHATBOX_TAB_GAME, + GAME("Filter", WidgetInfo.CHATBOX_TAB_GAME, ChatMessageType.GAMEMESSAGE, ChatMessageType.ENGINE, ChatMessageType.BROADCAST, ChatMessageType.SNAPSHOTFEEDBACK, ChatMessageType.ITEM_EXAMINE, ChatMessageType.NPC_EXAMINE, ChatMessageType.OBJECT_EXAMINE, ChatMessageType.FRIENDNOTIFICATION, ChatMessageType.IGNORENOTIFICATION, ChatMessageType.CONSOLE, ChatMessageType.SPAM, ChatMessageType.PLAYERRELATED, ChatMessageType.TENSECTIMEOUT, ChatMessageType.WELCOME, ChatMessageType.UNKNOWN), - CHANNEL("Channel", null, WidgetInfo.CHATBOX_TAB_CHANNEL, + CHANNEL(null, WidgetInfo.CHATBOX_TAB_CHANNEL, ChatMessageType.FRIENDSCHATNOTIFICATION, ChatMessageType.FRIENDSCHAT, ChatMessageType.CHALREQ_FRIENDSCHAT), - CLAN("Clan", null, WidgetInfo.CHATBOX_TAB_CLAN, - ChatMessageType.CLAN_CHAT, ChatMessageType.CLAN_MESSAGE, ChatMessageType.CLAN_GUEST_CHAT, ChatMessageType.CLAN_GUEST_MESSAGE), + CLAN(null, WidgetInfo.CHATBOX_TAB_CLAN, + ChatMessageType.CLAN_CHAT, ChatMessageType.CLAN_MESSAGE, + ChatMessageType.CLAN_GUEST_CHAT, ChatMessageType.CLAN_GUEST_MESSAGE), - TRADE("Trade", "Trade: Show none", WidgetInfo.CHATBOX_TAB_TRADE, - ChatMessageType.TRADE_SENT, ChatMessageType.TRADEREQ, ChatMessageType.TRADE, ChatMessageType.CHALREQ_TRADE), + TRADE_GROUP("Show none", WidgetInfo.CHATBOX_TAB_TRADE, + ChatMessageType.TRADE_SENT, ChatMessageType.TRADEREQ, ChatMessageType.TRADE, ChatMessageType.CHALREQ_TRADE, + ChatMessageType.CLAN_GIM_CHAT, ChatMessageType.CLAN_GIM_MESSAGE), ; private static final Map TAB_MESSAGE_TYPES; - private final String name; @Nullable private final String after; private final int widgetId; private final ChatMessageType[] messageTypes; - ChatboxTab(String name, String after, WidgetInfo widgetId, ChatMessageType... messageTypes) + ChatboxTab(String after, WidgetInfo widgetId, ChatMessageType... messageTypes) { - this.name = name; this.after = after; this.widgetId = widgetId.getId(); this.messageTypes = messageTypes; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsPlugin.java index c13e87c38b..9f74205102 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsPlugin.java @@ -211,6 +211,7 @@ public class ChatNotificationsPlugin extends Plugin case FRIENDSCHAT: case CLAN_CHAT: case CLAN_GUEST_CHAT: + case CLAN_GIM_CHAT: case AUTOTYPER: case MODAUTOTYPER: if (client.getLocalPlayer() != null && Text.toJagexName(Text.removeTags(chatMessage.getName())).equals(client.getLocalPlayer().getName())) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java index 03866ee5c3..39d022c3e7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java @@ -126,6 +126,7 @@ public class EmojiPlugin extends Plugin case FRIENDSCHAT: case CLAN_CHAT: case CLAN_GUEST_CHAT: + case CLAN_GIM_CHAT: case PRIVATECHAT: case PRIVATECHATOUT: case MODPRIVATECHAT: