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 f6305427ae..f4dcab1ea5 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
@@ -28,16 +28,15 @@ package net.runelite.client.plugins.chatnotifications;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Strings;
import com.google.inject.Provides;
+import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import static java.util.regex.Pattern.quote;
import java.util.stream.Collectors;
import javax.inject.Inject;
import net.runelite.api.Client;
import net.runelite.api.MessageNode;
import net.runelite.api.events.ChatMessage;
-import net.runelite.client.events.ConfigChanged;
import net.runelite.api.events.GameStateChanged;
import net.runelite.client.Notifier;
import net.runelite.client.RuneLiteProperties;
@@ -45,6 +44,7 @@ import net.runelite.client.chat.ChatColorType;
import net.runelite.client.chat.ChatMessageManager;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe;
+import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.util.Text;
@@ -156,7 +156,10 @@ public class ChatNotificationsPlugin extends Plugin
if (usernameMatcher == null && client.getLocalPlayer() != null && client.getLocalPlayer().getName() != null)
{
String username = client.getLocalPlayer().getName();
- usernameMatcher = Pattern.compile("\\b(" + quote(username) + ")\\b", Pattern.CASE_INSENSITIVE);
+ String pattern = Arrays.stream(username.split(" "))
+ .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 + "";
}
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 de7bbc6e26..7fc7f2aad6 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
@@ -33,6 +33,7 @@ import javax.inject.Inject;
import net.runelite.api.ChatMessageType;
import net.runelite.api.Client;
import net.runelite.api.MessageNode;
+import net.runelite.api.Player;
import net.runelite.api.events.ChatMessage;
import net.runelite.client.Notifier;
import net.runelite.client.chat.ChatMessageManager;
@@ -226,4 +227,39 @@ public class ChatNotificationsPluginTest
{
assertEquals("you. It", ChatNotificationsPlugin.stripColor("you. It"));
}
+
+ @Test
+ public void testHighlightOwnName()
+ {
+ Player player = mock(Player.class);
+ when(player.getName()).thenReturn("Logic Knot");
+ when(client.getLocalPlayer()).thenReturn(player);
+
+ when(config.highlightOwnName()).thenReturn(true);
+
+ MessageNode messageNode = mock(MessageNode.class);
+ 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");
+ }
+
+ @Test
+ public void testHighlightOwnNameNbsp()
+ {
+ Player player = mock(Player.class);
+ when(player.getName()).thenReturn("Logic Knot");
+ when(client.getLocalPlayer()).thenReturn(player);
+
+ when(config.highlightOwnName()).thenReturn(true);
+
+ MessageNode messageNode = mock(MessageNode.class);
+ when(messageNode.getValue()).thenReturn("Logic\u00a0Knot received a drop: Adamant longsword");
+ ChatMessage chatMessage = new ChatMessage(messageNode, ChatMessageType.GAMEMESSAGE, "", "", "", 0);
+ chatNotificationsPlugin.onChatMessage(chatMessage);
+
+ // set value uses our player name, which has nbsp replaced
+ verify(messageNode).setValue("Logic Knot received a drop: Adamant longsword");
+ }
}
\ No newline at end of file