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 b5c204d557..7e767f42e0 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 @@ -55,7 +55,7 @@ public interface PlayerIndicatorsConfig extends Config ) default Color getOwnNameColor() { - return new Color(0, 184, 212); + return Color.WHITE; } @ConfigItem( @@ -110,7 +110,7 @@ public interface PlayerIndicatorsConfig extends Config ) default boolean drawTeamMemberNames() { - return true; + return false; } @ConfigItem( @@ -126,11 +126,11 @@ public interface PlayerIndicatorsConfig extends Config @ConfigItem( position = 8, - keyName = "drawNonClanMemberNames", - name = "Draw non-clan member names", - description = "Configures whether or not names of non-clan members should be drawn" + keyName = "drawOthers", + name = "Draw names of others", + description = "Configures whether or not names of everyone except you should be drawn" ) - default boolean drawNonClanMemberNames() + default boolean drawNonOwnNames() { return false; } @@ -141,9 +141,9 @@ public interface PlayerIndicatorsConfig extends Config name = "Non-clan member color", description = "Color of non-clan member names" ) - default Color getNonClanMemberColor() + default Color getNonOwnColor() { - return Color.RED; + return Color.WHITE; } @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsMinimapOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsMinimapOverlay.java index 266def094c..036efc8d7f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsMinimapOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsMinimapOverlay.java @@ -35,6 +35,7 @@ import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; +import net.runelite.client.util.Text; @Singleton public class PlayerIndicatorsMinimapOverlay extends Overlay @@ -61,7 +62,7 @@ public class PlayerIndicatorsMinimapOverlay extends Overlay private void renderPlayerOverlay(Graphics2D graphics, Player actor, Color color) { - final String name = actor.getName().replace('\u00A0', ' '); + final String name = Text.removeTags(actor.getName()); if (config.drawMinimapNames()) { 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 6dce1e04ff..ec70c478a7 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 @@ -32,6 +32,7 @@ import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.api.Player; import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPriority; import net.runelite.client.ui.overlay.OverlayUtil; @@ -47,35 +48,29 @@ public class PlayerIndicatorsOverlay extends Overlay { this.config = config; this.playerIndicatorsService = playerIndicatorsService; + setLayer(OverlayLayer.ABOVE_SCENE); setPosition(OverlayPosition.DYNAMIC); - setPriority(OverlayPriority.HIGH); + setPriority(OverlayPriority.LOW); } @Override public Dimension render(Graphics2D graphics) { - playerIndicatorsService.forEachPlayer((player, color) -> renderPlayerOverlay(graphics, player, color)); + if (config.drawTiles()) + { + playerIndicatorsService.forEachPlayer((player, color) -> renderPlayerOverlay(graphics, player, color)); + } + return null; } private void renderPlayerOverlay(Graphics2D graphics, Player actor, Color color) { - if (config.drawTiles()) - { - Polygon poly = actor.getCanvasTilePoly(); - if (poly != null) - { - OverlayUtil.renderPolygon(graphics, poly, color); - } - } + Polygon poly = actor.getCanvasTilePoly(); - final String name = actor.getName().replace('\u00A0', ' '); - net.runelite.api.Point textLocation = actor - .getCanvasTextLocation(graphics, name, actor.getLogicalHeight() + 40); - - if (textLocation != null) + if (poly != null) { - OverlayUtil.renderTextLocation(graphics, textLocation, name, color); + OverlayUtil.renderPolygon(graphics, poly, 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 914eaf431d..a3bf22096e 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 @@ -25,12 +25,16 @@ package net.runelite.client.plugins.playerindicators; import com.google.common.collect.Sets; +import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; +import java.time.temporal.ChronoUnit; import java.util.Collection; import javax.inject.Inject; +import net.runelite.api.events.ConfigChanged; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.task.Schedule; import net.runelite.client.ui.overlay.Overlay; @PluginDescriptor( @@ -38,12 +42,16 @@ import net.runelite.client.ui.overlay.Overlay; ) public class PlayerIndicatorsPlugin extends Plugin { + @Inject private PlayerIndicatorsOverlay playerIndicatorsOverlay; @Inject private PlayerIndicatorsMinimapOverlay playerIndicatorsMinimapOverlay; + @Inject + private PlayerIndicatorsService playerIndicatorsService; + @Provides PlayerIndicatorsConfig provideConfig(ConfigManager configManager) { @@ -55,4 +63,36 @@ public class PlayerIndicatorsPlugin extends Plugin { return Sets.newHashSet(playerIndicatorsOverlay, playerIndicatorsMinimapOverlay); } + + @Override + protected void startUp() + { + playerIndicatorsService.updateConfig(false); + } + + @Override + protected void shutDown() + { + playerIndicatorsService.updateConfig(true); + } + + @Subscribe + public void onConfigChanged(ConfigChanged event) + { + if (event.getGroup().equals("playerindicators") + || event.getGroup().equals("runelite") + || event.getGroup().equals("minimap")) + { + playerIndicatorsService.updateConfig(false); + } + } + + @Schedule( + period = 1, + unit = ChronoUnit.SECONDS + ) + public void updatePlayerNames() + { + playerIndicatorsService.updatePlayers(); + } } 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 cebddec3c8..9c13707957 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 @@ -28,12 +28,18 @@ import java.awt.Color; import java.util.function.BiConsumer; import javax.inject.Inject; import javax.inject.Singleton; +import net.runelite.api.ClanMember; +import net.runelite.api.ClanMemberRank; import net.runelite.api.Client; +import net.runelite.api.IndexedSprite; import net.runelite.api.Player; +import net.runelite.api.PlayerNameMask; +import net.runelite.client.util.Text; @Singleton public class PlayerIndicatorsService { + private static final int NUMBER_OF_RANKS = 8; private final Client client; private final PlayerIndicatorsConfig config; @@ -44,10 +50,56 @@ public class PlayerIndicatorsService this.client = client; } + public void updateConfig(boolean reset) + { + // Update mask + int baseMask = 0; + + if (!reset) + { + if (config.drawFriendNames()) + { + baseMask |= PlayerNameMask.DRAW_FRIEND_NAME; + } + + if (config.drawClanMemberNames()) + { + baseMask |= PlayerNameMask.DRAW_CLAN_NAME; + } + + if (config.drawOwnName()) + { + baseMask |= PlayerNameMask.DRAW_OWN_NAME; + } + + if (config.drawNonOwnNames()) + { + baseMask |= PlayerNameMask.DRAW_ALL_EXCEPT_OWN_NAME; + } + } + + client.setPlayerNameMask(baseMask); + + for (Player player : client.getPlayers()) + { + if (player != null && player.getName() != null) + { + player.setName(Text.removeTags(player.getName())); + } + } + } + + public void updatePlayers() + { + // Update player names + forEachPlayer(this::injectData); + } + public void forEachPlayer(final BiConsumer consumer) { if (!config.drawOwnName() && !config.drawClanMemberNames() - && !config.drawFriendNames() && !config.drawNonClanMemberNames()) + && !config.drawFriendNames() && !config.drawNonOwnNames() + && !config.drawTeamMemberNames()) { return; } @@ -63,7 +115,7 @@ public class PlayerIndicatorsService boolean isClanMember = player.isClanMember(); - if (player == client.getLocalPlayer()) + if (player == localPlayer) { if (config.drawOwnName()) { @@ -82,10 +134,51 @@ public class PlayerIndicatorsService { consumer.accept(player, config.getTeamMemberColor()); } - else if (config.drawNonClanMemberNames() && !isClanMember) + else if (config.drawNonOwnNames()) { - consumer.accept(player, config.getNonClanMemberColor()); + consumer.accept(player, config.getNonOwnColor()); } } } + + private void injectData(final Player player, final Color color) + { + final StringBuilder stringBuilder = new StringBuilder(); + + final IndexedSprite[] modIcons = client.getModIcons(); + final int startIndex = modIcons.length - NUMBER_OF_RANKS; + final String strippedName = Text.removeTags(player.getName()); + + if (startIndex >= 0 && player.isClanMember()) + { + final ClanMember[] clanMembersArr = client.getClanMembers(); + + if (clanMembersArr != null && clanMembersArr.length > 0) + { + for (ClanMember clanMember : clanMembersArr) + { + if (clanMember != null && clanMember.getUsername().equals(strippedName)) + { + if (clanMember.getRank() != ClanMemberRank.UNRANKED) + { + stringBuilder + .append(""); + } + + break; + } + } + } + } + + stringBuilder.append(""); + player.setName(stringBuilder.toString() + strippedName); + } + + private static String parseColor(final Color color) + { + return String.format("%02X%02X%02X", color.getRed(), color.getGreen(), color.getBlue()); + } }