diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java
index 1cb5679498..8c5135b454 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/chathistory/ChatHistoryPlugin.java
@@ -62,6 +62,7 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener
private static final String CLEAR_HISTORY = "Clear history";
private static final String CLEAR_PRIVATE = "
Private:";
private static final int CYCLE_HOTKEY = KeyEvent.VK_TAB;
+ private static final int FRIENDS_MAX_SIZE = 5;
private Queue messageQueue;
private Deque friends;
@@ -91,7 +92,7 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener
protected void startUp()
{
messageQueue = EvictingQueue.create(100);
- friends = new ArrayDeque<>(5);
+ friends = new ArrayDeque<>(FRIENDS_MAX_SIZE + 1);
keyManager.registerKeyListener(this);
}
@@ -134,7 +135,14 @@ public class ChatHistoryPlugin extends Plugin implements KeyListener
case MODPRIVATECHAT:
final String name = Text.removeTags(chatMessage.getName());
// Remove to ensure uniqueness & its place in history
- friends.remove(name);
+ if (!friends.remove(name))
+ {
+ // If the friend didn't previously exist ensure deque capacity doesn't increase by adding them
+ if (friends.size() >= FRIENDS_MAX_SIZE)
+ {
+ friends.remove();
+ }
+ }
friends.add(name);
// intentional fall-through
case PUBLICCHAT: