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 4ccfd1925e..afe574d3c6 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 @@ -26,6 +26,7 @@ package net.runelite.client.plugins.chatnotifications; import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.MoreObjects; import com.google.common.base.Strings; import com.google.inject.Provides; import java.util.Arrays; @@ -76,7 +77,6 @@ public class ChatNotificationsPlugin extends Plugin //Custom Highlights private Pattern usernameMatcher = null; - private String usernameReplacer = ""; private Pattern highlightMatcher = null; @Provides @@ -181,15 +181,19 @@ public class ChatNotificationsPlugin extends Plugin .map(s -> s.isEmpty() ? "" : Pattern.quote(s)) .collect(Collectors.joining("[\u00a0\u0020]")); // space or nbsp usernameMatcher = Pattern.compile("\\b" + pattern + "\\b", Pattern.CASE_INSENSITIVE); - usernameReplacer = "" + username + ""; } if (config.highlightOwnName() && usernameMatcher != null) { - Matcher matcher = usernameMatcher.matcher(messageNode.getValue()); + final String message = messageNode.getValue(); + Matcher matcher = usernameMatcher.matcher(message); if (matcher.find()) { - messageNode.setValue(matcher.replaceAll(usernameReplacer)); + final int start = matcher.start(); + final String username = client.getLocalPlayer().getName(); + final String closeColor = MoreObjects.firstNonNull(getLastColor(message.substring(0, start)), ""); + final String replacement = "" + username + "" + closeColor; + messageNode.setValue(matcher.replaceAll(replacement)); update = true; if (config.notifyOnOwnName() && (chatMessage.getType() == ChatMessageType.PUBLICCHAT || chatMessage.getType() == ChatMessageType.PRIVATECHAT diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsPluginTest.java index 69a28f5dc9..5b312dc1e6 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/chatnotifications/ChatNotificationsPluginTest.java @@ -262,11 +262,11 @@ public class ChatNotificationsPluginTest when(config.highlightOwnName()).thenReturn(true); MessageNode messageNode = mock(MessageNode.class); - when(messageNode.getValue()).thenReturn("Logic Knot received a drop: Adamant longsword"); + when(messageNode.getValue()).thenReturn("Logic Knot received a drop: Adamant longsword"); ChatMessage chatMessage = new ChatMessage(messageNode, ChatMessageType.GAMEMESSAGE, "", "", "", 0); chatNotificationsPlugin.onChatMessage(chatMessage); - verify(messageNode).setValue("Logic Knot received a drop: Adamant longsword"); + verify(messageNode).setValue("Logic Knot received a drop: Adamant longsword"); } @Test @@ -284,6 +284,6 @@ public class ChatNotificationsPluginTest chatNotificationsPlugin.onChatMessage(chatMessage); // set value uses our player name, which has nbsp replaced - verify(messageNode).setValue("Logic Knot received a drop: Adamant longsword"); + verify(messageNode).setValue("Logic Knot received a drop: Adamant longsword"); } } \ No newline at end of file