diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptID.java b/runelite-api/src/main/java/net/runelite/api/ScriptID.java index 099ebc1537..c2762be1a3 100644 --- a/runelite-api/src/main/java/net/runelite/api/ScriptID.java +++ b/runelite-api/src/main/java/net/runelite/api/ScriptID.java @@ -199,6 +199,12 @@ public final class ScriptID @ScriptArguments(integer = 15) public static final int FRIENDS_CHAT_CHANNEL_REBUILD = 1658; + /** + * Builds the widget that holds all of the players inside a clan chat + */ + @ScriptArguments(integer = 7) + public static final int CLAN_SIDEPANEL_DRAW = 4396; + /** * Builds the widget for making an offer in Grand Exchange */ diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index 7e4588ace8..0b69d793ab 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -921,11 +921,15 @@ public final class WidgetID static class Clan { + static final int LAYER = 0; + static final int HEADER = 1; static final int MEMBERS = 6; } static class ClanGuest { + static final int LAYER = 0; + static final int HEADER = 1; static final int MEMBERS = 6; } } diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index 8e43b14e66..b5b91a7827 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -552,7 +552,12 @@ public enum WidgetInfo TEMPOROSS_STATUS_INDICATOR(WidgetID.TEMPOROSS_GROUP_ID, WidgetID.TemporossStatus.STATUS_INDICATOR), + CLAN_LAYER(WidgetID.CLAN_GROUP_ID, WidgetID.Clan.LAYER), + CLAN_HEADER(WidgetID.CLAN_GROUP_ID, WidgetID.Clan.HEADER), CLAN_MEMBER_LIST(WidgetID.CLAN_GROUP_ID, WidgetID.Clan.MEMBERS), + + CLAN_GUEST_LAYER(WidgetID.CLAN_GUEST_GROUP_ID, WidgetID.ClanGuest.LAYER), + CLAN_GUEST_HEADER(WidgetID.CLAN_GUEST_GROUP_ID, WidgetID.ClanGuest.HEADER), CLAN_GUEST_MEMBER_LIST(WidgetID.CLAN_GUEST_GROUP_ID, WidgetID.ClanGuest.MEMBERS), POH_TREASURE_CHEST_INVENTORY_CONTAINER(WidgetID.POH_TREASURE_CHEST_INVENTORY_GROUP_ID, 0), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelConfig.java index eeffc30f4d..66739bf5a4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelConfig.java @@ -206,6 +206,18 @@ public interface ChatChannelConfig extends Config return false; } + @ConfigItem( + keyName = "clanChatShowOnlineMemberCount", + name = "Show Online Member Count", + description = "Shows the number of online clan members at the end of the clan's name.", + position = 1, + section = clanChatSection + ) + default boolean clanChatShowOnlineMemberCount() + { + return false; + } + @ConfigItem( keyName = "guestClanChatShowJoinLeave", name = "Show Join/Leave", @@ -217,4 +229,16 @@ public interface ChatChannelConfig extends Config { return false; } + + @ConfigItem( + keyName = "guestClanChatShowOnlineMemberCount", + name = "Show Online Member Count", + description = "Shows the number of online guest clan members at the end of the clan's name.", + position = 1, + section = guestClanChatSection + ) + default boolean guestClanChatShowOnlineMemberCount() + { + return false; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelPlugin.java index 25ac07f449..d1277b981d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelPlugin.java @@ -145,6 +145,8 @@ public class ChatChannelPlugin extends Plugin { clientThread.invoke(() -> colorIgnoredPlayers(config.showIgnoresColor())); } + + rebuildClanTitle(); } @Override @@ -153,6 +155,7 @@ public class ChatChannelPlugin extends Plugin chats = null; clientThread.invoke(() -> colorIgnoredPlayers(Color.WHITE)); rebuildFriendsChat(); + rebuildClanTitle(); } @Subscribe @@ -167,6 +170,8 @@ public class ChatChannelPlugin extends Plugin Color ignoreColor = config.showIgnores() ? config.showIgnoresColor() : Color.WHITE; clientThread.invoke(() -> colorIgnoredPlayers(ignoreColor)); + + rebuildClanTitle(); } } @@ -606,6 +611,18 @@ public class ChatChannelPlugin extends Plugin chatTitle.setText(chatTitle.getText() + " (" + friendsChatManager.getCount() + "/100)"); } } + else if (event.getScriptId() == ScriptID.CLAN_SIDEPANEL_DRAW) + { + if (config.clanChatShowOnlineMemberCount()) + { + updateClanTitle(WidgetInfo.CLAN_HEADER, client.getClanChannel()); + } + + if (config.guestClanChatShowOnlineMemberCount()) + { + updateClanTitle(WidgetInfo.CLAN_GUEST_HEADER, client.getGuestClanChannel()); + } + } } private void insertRankIcon(final ChatMessage message) @@ -740,4 +757,35 @@ public class ChatChannelPlugin extends Plugin listWidget.setTextColor(ignoreColor.getRGB()); } } + + private void rebuildClanTitle() + { + clientThread.invokeLater(() -> + { + Widget w = client.getWidget(WidgetInfo.CLAN_LAYER); + if (w != null) + { + client.runScript(w.getOnVarTransmitListener()); + } + }); + + clientThread.invokeLater(() -> + { + Widget w = client.getWidget(WidgetInfo.CLAN_GUEST_LAYER); + if (w != null) + { + client.runScript(w.getOnVarTransmitListener()); + } + }); + } + + private void updateClanTitle(WidgetInfo widget, ClanChannel channel) + { + Widget header = client.getWidget(widget); + if (header != null && channel != null) + { + Widget title = header.getChild(0); + title.setText(title.getText() + " (" + channel.getMembers().size() + ")"); + } + } }