From 7de3b61860dad942212d019e5fd594d94aed506f Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 26 May 2021 15:21:20 -0400 Subject: [PATCH] player indicators: add clans --- .../PlayerIndicatorsConfig.java | 39 ++++++++++- .../PlayerIndicatorsOverlay.java | 64 +++++++++++-------- .../PlayerIndicatorsPlugin.java | 23 +++++-- .../PlayerIndicatorsService.java | 38 +++++++++-- 4 files changed, 126 insertions(+), 38 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsConfig.java index 5daffe8ef0..2fb48231cf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsConfig.java @@ -95,7 +95,7 @@ public interface PlayerIndicatorsConfig extends Config description = "Configures if friends chat members should be highlighted", section = highlightSection ) - default boolean drawFriendsChatMemberNames() + default boolean highlightFriendsChat() { return true; } @@ -138,6 +138,30 @@ public interface PlayerIndicatorsConfig extends Config @ConfigItem( position = 8, + keyName = "drawClanChatMemberNames", + name = "Highlight clan members", + description = "Configures whether or not clan members should be highlighted", + section = highlightSection + ) + default boolean highlightClanMembers() + { + return true; + } + + @ConfigItem( + position = 9, + keyName = "clanChatMemberColor", + name = "Clan member", + description = "Color of clan members", + section = highlightSection + ) + default Color getClanMemberColor() + { + return new Color(36, 15, 171); + } + + @ConfigItem( + position = 10, keyName = "drawNonClanMemberNames", name = "Highlight others", description = "Configures whether or not other players should be highlighted", @@ -149,7 +173,7 @@ public interface PlayerIndicatorsConfig extends Config } @ConfigItem( - position = 9, + position = 11, keyName = "nonClanMemberColor", name = "Others", description = "Color of other players names", @@ -214,4 +238,15 @@ public interface PlayerIndicatorsConfig extends Config { return true; } + + @ConfigItem( + position = 15, + keyName = "clanchatMenuIcons", + name = "Show clan chat ranks", + description = "Add clan chat rank to right click menu and next to player names" + ) + default boolean showClanChatRanks() + { + return true; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java index 063a3cd488..fb16f64754 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java @@ -34,6 +34,7 @@ import javax.inject.Singleton; import net.runelite.api.FriendsChatRank; import net.runelite.api.Player; import net.runelite.api.Point; +import net.runelite.api.clan.ClanTitle; import net.runelite.client.game.ChatIconManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; @@ -108,40 +109,49 @@ public class PlayerIndicatorsOverlay extends Overlay return; } - if (actor.isFriendsChatMember() && config.showFriendsChatRanks()) + BufferedImage rankImage = null; + if (actor.isFriendsChatMember() && config.highlightFriendsChat() && config.showFriendsChatRanks()) { final FriendsChatRank rank = playerIndicatorsService.getFriendsChatRank(actor); if (rank != FriendsChatRank.UNRANKED) { - final BufferedImage rankImage = chatIconManager.getRankImage(rank); - - if (rankImage != null) - { - final int imageWidth = rankImage.getWidth(); - final int imageTextMargin; - final int imageNegativeMargin; - - if (drawPlayerNamesConfig == PlayerNameLocation.MODEL_RIGHT) - { - imageTextMargin = imageWidth; - imageNegativeMargin = 0; - } - else - { - imageTextMargin = imageWidth / 2; - imageNegativeMargin = imageWidth / 2; - } - - final int textHeight = graphics.getFontMetrics().getHeight() - graphics.getFontMetrics().getMaxDescent(); - final Point imageLocation = new Point(textLocation.getX() - imageNegativeMargin - 1, textLocation.getY() - textHeight / 2 - rankImage.getHeight() / 2); - OverlayUtil.renderImageLocation(graphics, imageLocation, rankImage); - - // move text - textLocation = new Point(textLocation.getX() + imageTextMargin, textLocation.getY()); - } + rankImage = chatIconManager.getRankImage(rank); } } + else if (actor.isClanMember() && config.highlightClanMembers() && config.showClanChatRanks()) + { + ClanTitle clanTitle = playerIndicatorsService.getClanTitle(actor); + if (clanTitle != null) + { + rankImage = chatIconManager.getRankImage(clanTitle); + } + } + + if (rankImage != null) + { + final int imageWidth = rankImage.getWidth(); + final int imageTextMargin; + final int imageNegativeMargin; + + if (drawPlayerNamesConfig == PlayerNameLocation.MODEL_RIGHT) + { + imageTextMargin = imageWidth; + imageNegativeMargin = 0; + } + else + { + imageTextMargin = imageWidth / 2; + imageNegativeMargin = imageWidth / 2; + } + + final int textHeight = graphics.getFontMetrics().getHeight() - graphics.getFontMetrics().getMaxDescent(); + final Point imageLocation = new Point(textLocation.getX() - imageNegativeMargin - 1, textLocation.getY() - textHeight / 2 - rankImage.getHeight() / 2); + OverlayUtil.renderImageLocation(graphics, imageLocation, rankImage); + + // move text + textLocation = new Point(textLocation.getX() + imageTextMargin, textLocation.getY()); + } OverlayUtil.renderTextLocation(graphics, textLocation, name, color); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java index b7c5d28471..df72925bb8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java @@ -46,6 +46,7 @@ import static net.runelite.api.MenuAction.SPELL_CAST_ON_PLAYER; import static net.runelite.api.MenuAction.WALK; import net.runelite.api.MenuEntry; import net.runelite.api.Player; +import net.runelite.api.clan.ClanTitle; import net.runelite.api.events.ClientTick; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; @@ -189,11 +190,11 @@ public class PlayerIndicatorsPlugin extends Plugin int image = -1; Color color = null; - if (config.highlightFriends() && player.isFriend()) + if (player.isFriend() && config.highlightFriends()) { color = config.getFriendColor(); } - else if (config.drawFriendsChatMemberNames() && player.isFriendsChatMember()) + else if (player.isFriendsChatMember() && config.highlightFriendsChat()) { color = config.getFriendsChatMemberColor(); @@ -206,12 +207,24 @@ public class PlayerIndicatorsPlugin extends Plugin } } } - else if (config.highlightTeamMembers() - && player.getTeam() > 0 && client.getLocalPlayer().getTeam() == player.getTeam()) + else if (player.getTeam() > 0 && client.getLocalPlayer().getTeam() == player.getTeam() && config.highlightTeamMembers()) { color = config.getTeamMemberColor(); } - else if (config.highlightOthers() && !player.isFriendsChatMember()) + else if (player.isClanMember() && config.highlightClanMembers()) + { + color = config.getClanMemberColor(); + + if (config.showClanChatRanks()) + { + ClanTitle clanTitle = playerIndicatorsService.getClanTitle(player); + if (clanTitle != null) + { + image = chatIconManager.getIconNumber(clanTitle); + } + } + } + else if (!player.isFriendsChatMember() && !player.isClanMember() && config.highlightOthers()) { color = config.getOthersColor(); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsService.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsService.java index c0af49d7cb..e39e4bd79d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsService.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsService.java @@ -33,6 +33,11 @@ import net.runelite.api.FriendsChatManager; import net.runelite.api.FriendsChatMember; import net.runelite.api.FriendsChatRank; import net.runelite.api.Player; +import net.runelite.api.clan.ClanChannel; +import net.runelite.api.clan.ClanChannelMember; +import net.runelite.api.clan.ClanRank; +import net.runelite.api.clan.ClanSettings; +import net.runelite.api.clan.ClanTitle; @Singleton public class PlayerIndicatorsService @@ -49,8 +54,9 @@ public class PlayerIndicatorsService public void forEachPlayer(final BiConsumer consumer) { - if (!config.highlightOwnPlayer() && !config.drawFriendsChatMemberNames() - && !config.highlightFriends() && !config.highlightOthers()) + if (!config.highlightOwnPlayer() && !config.highlightFriendsChat() + && !config.highlightFriends() && !config.highlightOthers() + && !config.highlightClanMembers()) { return; } @@ -65,6 +71,7 @@ public class PlayerIndicatorsService } boolean isFriendsChatMember = player.isFriendsChatMember(); + boolean isClanMember = player.isClanMember(); if (player == localPlayer) { @@ -77,7 +84,7 @@ public class PlayerIndicatorsService { consumer.accept(player, config.getFriendColor()); } - else if (config.drawFriendsChatMemberNames() && isFriendsChatMember) + else if (config.highlightFriendsChat() && isFriendsChatMember) { consumer.accept(player, config.getFriendsChatMemberColor()); } @@ -85,13 +92,36 @@ public class PlayerIndicatorsService { consumer.accept(player, config.getTeamMemberColor()); } - else if (config.highlightOthers() && !isFriendsChatMember) + else if (config.highlightClanMembers() && isClanMember) + { + consumer.accept(player, config.getClanMemberColor()); + } + else if (config.highlightOthers() && !isFriendsChatMember && !isClanMember) { consumer.accept(player, config.getOthersColor()); } } } + ClanTitle getClanTitle(Player player) + { + ClanChannel clanChannel = client.getClanChannel(); + ClanSettings clanSettings = client.getClanSettings(); + if (clanChannel == null || clanSettings == null) + { + return null; + } + + ClanChannelMember member = clanChannel.findMember(player.getName()); + if (member == null) + { + return null; + } + + ClanRank rank = member.getRank(); + return clanSettings.titleForRank(rank); + } + FriendsChatRank getFriendsChatRank(Player player) { final FriendsChatManager friendsChatManager = client.getFriendsChatManager();