From e953631a08490db155c5cc8d27040c6b5b718824 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 15 Mar 2022 15:30:19 -0400 Subject: [PATCH] chat message manager: fix gim rl-format messages The rl-format messages aren't prepended with |, causing them to be sent to normal clan chat instead. --- .../client/chat/ChatMessageManager.java | 20 +++++++++------- .../client/chat/ChatMessageManagerTest.java | 24 ++++++++++++++++++- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java index 91d7c99683..c212b8fee5 100644 --- a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java +++ b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java @@ -164,9 +164,16 @@ public class ChatMessageManager stringStack[size - 4] = ColorUtil.wrapWithColorTag(channel, channelColor); } + String prefix = ""; + if (chatMessageType == ChatMessageType.CLAN_GIM_CHAT || chatMessageType == ChatMessageType.CLAN_GIM_MESSAGE) + { + message = message.substring(1); // remove | + prefix = "|"; + } + if (messageNode.getRuneLiteFormatMessage() != null) { - stringStack[size - 2] = message = formatRuneLiteMessage(messageNode.getRuneLiteFormatMessage(), + message = formatRuneLiteMessage(messageNode.getRuneLiteFormatMessage(), chatMessageType, splitpmbox); } @@ -178,20 +185,15 @@ public class ChatMessageManager continue; } - String prefix = ""; - if (chatMessageType == ChatMessageType.CLAN_GIM_CHAT || chatMessageType == ChatMessageType.CLAN_GIM_MESSAGE) - { - message = message.substring(1); // remove | - prefix = "|"; - } - // Replace tags in the message with the new color so embedded won't reset the color final Color color = chatColor.getColor(); - stringStack[size - 2] = prefix + ColorUtil.wrapWithColorTag( + message = ColorUtil.wrapWithColorTag( message.replace(ColorUtil.CLOSING_COLOR_TAG, ColorUtil.colorTag(color)), color); break; } + + stringStack[size - 2] = prefix + message; } @Subscribe diff --git a/runelite-client/src/test/java/net/runelite/client/chat/ChatMessageManagerTest.java b/runelite-client/src/test/java/net/runelite/client/chat/ChatMessageManagerTest.java index 5f5d2d59a9..e2958e8ba9 100644 --- a/runelite-client/src/test/java/net/runelite/client/chat/ChatMessageManagerTest.java +++ b/runelite-client/src/test/java/net/runelite/client/chat/ChatMessageManagerTest.java @@ -69,7 +69,7 @@ public class ChatMessageManagerTest Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this); } - private void setupVm(ChatMessageType type, String name, String message) + private MessageNode setupVm(ChatMessageType type, String name, String message) { MessageNode messageNode = mock(MessageNode.class); when(messageNode.getType()).thenReturn(type); @@ -92,6 +92,8 @@ public class ChatMessageManagerTest when(client.getStringStackSize()).thenReturn(sstack.length); when(client.getIntStack()).thenReturn(istack); when(client.getIntStackSize()).thenReturn(istack.length); + + return messageNode; } @Test @@ -187,4 +189,24 @@ public class ChatMessageManagerTest assertEquals("Total points: 42, Personal points: 43 (44%)", formattedMessage); } + + @Test + public void testGim() + { + when(chatColorConfig.opaqueClanChatInfo()).thenReturn(Color.RED); + when(chatColorConfig.opaqueClanChatInfoHighlight()).thenReturn(Color.BLUE); + + // rebuild color cache + ConfigChanged configChanged = new ConfigChanged(); + configChanged.setGroup("textrecolor"); + chatMessageManager.onConfigChanged(configChanged); + + MessageNode messageNode = setupVm(ChatMessageType.CLAN_GIM_MESSAGE, "", "rsn received a drop: 8 x Bronze bolts (16 coins)."); + when(messageNode.getRuneLiteFormatMessage()).thenReturn("rsn received a drop: 8 x Bronze bolts (16 coins)."); + + chatMessageManager.colorChatMessage(); + + // | + assertEquals("|rsn received a drop: 8 x Bronze bolts (16 coins).", sstack[2]); + } } \ No newline at end of file