diff --git a/runelite-api/src/main/java/net/runelite/api/SpriteID.java b/runelite-api/src/main/java/net/runelite/api/SpriteID.java index 77cae9b584..3721e8689a 100644 --- a/runelite-api/src/main/java/net/runelite/api/SpriteID.java +++ b/runelite-api/src/main/java/net/runelite/api/SpriteID.java @@ -1579,6 +1579,7 @@ public final class SpriteID public static final int HEALTHBAR_DEFAULT_BACK_140PX = 2189; public static final int HEALTHBAR_DEFAULT_FRONT_160PX = 2190; public static final int HEALTHBAR_DEFAULT_BACK_160PX = 2191; + public static final int TAB_CLAN_CHAT = 2307; public static final int WIKI_DESELECTED = 2420; public static final int WIKI_SELECTED = 2421; public static final int FRIENDS_CHAT_RANK_SMILEY_FRIEND = 2825; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/team/TeamConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/team/TeamConfig.java index 4de3ffeae1..8f46f59101 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/team/TeamConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/team/TeamConfig.java @@ -48,6 +48,13 @@ public interface TeamConfig extends Config ) String friendsChatSection = "friendsChatSection"; + @ConfigSection( + name = "Clan Chat", + description = "Configuration for clan chat", + position = 30 + ) + String clanChatSection = "clanChatSection"; + @ConfigItem( keyName = "teamCapesOverlay", name = "Team cape overlay", @@ -83,4 +90,16 @@ public interface TeamConfig extends Config { return false; } + + @ConfigItem( + keyName = "clanChatMemberCounter", + name = "Clan Chat Members Counter", + description = "Show the amount of clan chat members near you.", + position = 0, + section = clanChatSection + ) + default boolean clanChatMemberCounter() + { + return false; + } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/team/TeamPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/team/TeamPlugin.java index 071065d023..4d78816524 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/team/TeamPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/team/TeamPlugin.java @@ -105,7 +105,9 @@ public class TeamPlugin extends Plugin private final BiMap players = HashBiMap.create(); private int friendsChatCount; + private int clanChatCount; private MembersIndicator friendsChatIndicator; + private MembersIndicator clanChatIndicator; @Provides TeamConfig provideConfig(ConfigManager configManager) @@ -129,7 +131,9 @@ public class TeamPlugin extends Plugin playerTeam.clear(); players.clear(); removeFriendsChatCounter(); + removeClanChatCounter(); friendsChatCount = 0; + clanChatCount = 0; } @Subscribe @@ -145,6 +149,15 @@ public class TeamPlugin extends Plugin { removeFriendsChatCounter(); } + + if (config.clanChatMemberCounter()) + { + clientThread.invoke(this::addClanChatCounter); + } + else + { + removeClanChatCounter(); + } } } @@ -157,6 +170,7 @@ public class TeamPlugin extends Plugin { players.clear(); removeFriendsChatCounter(); + removeClanChatCounter(); } } @@ -175,6 +189,12 @@ public class TeamPlugin extends Plugin ++friendsChatCount; addFriendsChatCounter(); } + + if (player.isClanMember()) + { + ++clanChatCount; + addClanChatCounter(); + } } } @@ -201,6 +221,17 @@ public class TeamPlugin extends Plugin } } } + + if (player.isClanMember()) + { + if (clanChatCount > 0) + { + if (--clanChatCount == 0) + { + removeClanChatCounter(); + } + } + } } @Subscribe @@ -256,6 +287,33 @@ public class TeamPlugin extends Plugin } } + @Subscribe + public void onClanChannelChanged(ClanChannelChanged event) + { + if (!event.isGuest()) + { + removeClanChatCounter(); + clanChatCount = 0; + + ClanChannel clanChannel = event.getClanChannel(); + if (clanChannel != null) + { + for (ClanChannelMember member : clanChannel.getMembers()) + { + final String memberName = Text.toJagexName(member.getName()); + + final Player player = players.get(memberName); + if (player != null) + { + ++clanChatCount; + } + } + + addClanChatCounter(); + } + } + } + @Subscribe public void onFriendsChatMemberJoined(FriendsChatMemberJoined event) { @@ -296,6 +354,46 @@ public class TeamPlugin extends Plugin } } + @Subscribe + public void onClanMemberJoined(ClanMemberJoined clanMemberJoined) + { + final ClanChannelMember member = clanMemberJoined.getClanMember(); + + if (member.getWorld() == client.getWorld()) + { + final String memberName = Text.toJagexName(member.getName()); + + final Player player = players.get(memberName); + if (player != null) + { + ++clanChatCount; + addClanChatCounter(); + } + } + } + + @Subscribe + public void onClanMemberLeft(ClanMemberLeft clanMemberLeft) + { + final ClanChannelMember member = clanMemberLeft.getClanMember(); + + if (member.getWorld() == client.getWorld()) + { + final String memberName = Text.toJagexName(member.getName()); + final Player player = players.get(memberName); + if (player != null) + { + if (clanChatCount > 0) + { + if (--clanChatCount == 0) + { + removeClanChatCounter(); + } + } + } + } + } + private void addFriendsChatCounter() { if (!config.friendsChatMemberCounter() || friendsChatIndicator != null || friendsChatCount == 0) @@ -326,4 +424,35 @@ public class TeamPlugin extends Plugin infoBoxManager.removeInfoBox(friendsChatIndicator); friendsChatIndicator = null; } + + private void addClanChatCounter() + { + if (!config.clanChatMemberCounter() || clanChatIndicator != null || clanChatCount == 0) + { + return; + } + + final BufferedImage image = spriteManager.getSprite(SpriteID.TAB_CLAN_CHAT, 0); + clanChatIndicator = new MembersIndicator(image, this) + { + @Override + public String getText() + { + return Integer.toString(clanChatCount); + } + + @Override + public String getTooltip() + { + return clanChatCount + " clan chat member(s) near you"; + } + }; + infoBoxManager.addInfoBox(clanChatIndicator); + } + + private void removeClanChatCounter() + { + infoBoxManager.removeInfoBox(clanChatIndicator); + clanChatIndicator = null; + } }