diff --git a/runelite-client/src/main/java/net/runelite/client/game/ChatIconManager.java b/runelite-client/src/main/java/net/runelite/client/game/ChatIconManager.java
index 1637f3a3fe..5578578015 100644
--- a/runelite-client/src/main/java/net/runelite/client/game/ChatIconManager.java
+++ b/runelite-client/src/main/java/net/runelite/client/game/ChatIconManager.java
@@ -38,9 +38,7 @@ import net.runelite.api.FriendsChatRank;
import net.runelite.api.GameState;
import net.runelite.api.IndexedSprite;
import net.runelite.api.clan.ClanTitle;
-import net.runelite.api.events.GameStateChanged;
-import net.runelite.client.eventbus.EventBus;
-import net.runelite.client.eventbus.Subscribe;
+import net.runelite.client.callback.ClientThread;
import net.runelite.client.util.ImageUtil;
@Singleton
@@ -55,15 +53,23 @@ public class ChatIconManager
private BufferedImage[] friendsChatRankImages;
private BufferedImage[] clanRankImages;
- private int friendsChatOffset;
- private int clanOffset;
+ private int friendsChatOffset = -1;
+ private int clanOffset = -1;
@Inject
- private ChatIconManager(Client client, SpriteManager spriteManager, EventBus eventBus)
+ private ChatIconManager(Client client, SpriteManager spriteManager, ClientThread clientThread)
{
this.client = client;
this.spriteManager = spriteManager;
- eventBus.register(this);
+ clientThread.invokeLater(() ->
+ {
+ if (client.getGameState().getState() >= GameState.LOGIN_SCREEN.getState())
+ {
+ loadRankIcons();
+ return true;
+ }
+ return false;
+ });
}
@Nullable
@@ -87,22 +93,13 @@ public class ChatIconManager
public int getIconNumber(final FriendsChatRank friendsChatRank)
{
- return friendsChatOffset + friendsChatRank.ordinal() - 1;
+ return friendsChatOffset == -1 ? -1 : friendsChatOffset + friendsChatRank.ordinal() - 1;
}
public int getIconNumber(final ClanTitle clanTitle)
{
int rank = clanTitle.getId();
- return clanOffset + clanRankToIdx(rank);
- }
-
- @Subscribe
- public void onGameStateChanged(GameStateChanged gameStateChanged)
- {
- if (gameStateChanged.getGameState() == GameState.LOGIN_SCREEN && friendsChatOffset == 0)
- {
- loadRankIcons();
- }
+ return clanOffset == -1 ? -1 : clanOffset + clanRankToIdx(rank);
}
private void loadRankIcons()
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelPlugin.java
index d1277b981d..7268e6aaf8 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelPlugin.java
@@ -632,18 +632,21 @@ public class ChatChannelPlugin extends Plugin
if (rank != null && rank != FriendsChatRank.UNRANKED)
{
int iconNumber = chatIconManager.getIconNumber(rank);
- final String img = "
";
- if (message.getType() == ChatMessageType.FRIENDSCHAT)
+ if (iconNumber > -1)
{
- message.getMessageNode()
- .setSender(message.getMessageNode().getSender() + " " + img);
+ final String img = "
";
+ if (message.getType() == ChatMessageType.FRIENDSCHAT)
+ {
+ message.getMessageNode()
+ .setSender(message.getMessageNode().getSender() + " " + img);
+ }
+ else
+ {
+ message.getMessageNode()
+ .setName(img + message.getMessageNode().getName());
+ }
+ client.refreshChat();
}
- else
- {
- message.getMessageNode()
- .setName(img + message.getMessageNode().getName());
- }
- client.refreshChat();
}
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/lowmemory/LowMemoryPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/lowmemory/LowMemoryPlugin.java
index 4e980af0da..a8c67a0a56 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/lowmemory/LowMemoryPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/lowmemory/LowMemoryPlugin.java
@@ -29,7 +29,6 @@ import javax.inject.Inject;
import net.runelite.api.Client;
import net.runelite.api.GameState;
import net.runelite.api.events.BeforeRender;
-import net.runelite.api.events.GameStateChanged;
import net.runelite.client.callback.ClientThread;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe;
@@ -57,10 +56,18 @@ public class LowMemoryPlugin extends Plugin
@Override
protected void startUp()
{
- if (client.getGameState() == GameState.LOGGED_IN)
+ clientThread.invoke(() ->
{
- clientThread.invoke(() -> client.changeMemoryMode(config.lowDetail()));
- }
+ // When the client starts it initializes the texture size based on the memory mode setting.
+ // Don't set low memory before the login screen is ready to prevent loading the low detail textures,
+ // which breaks the gpu plugin due to it requiring the 128x128px textures
+ if (client.getGameState().getState() >= GameState.LOGIN_SCREEN.getState())
+ {
+ client.changeMemoryMode(config.lowDetail());
+ return true;
+ }
+ return false;
+ });
}
@Override
@@ -80,19 +87,13 @@ public class LowMemoryPlugin extends Plugin
{
if (configChanged.getGroup().equals(LowMemoryConfig.GROUP))
{
- clientThread.invoke(() -> client.changeMemoryMode(config.lowDetail()));
- }
- }
-
- @Subscribe
- public void onGameStateChanged(GameStateChanged event)
- {
- // When the client starts it initializes the texture size based on the memory mode setting.
- // Don't set low memory before the login screen is ready to prevent loading the low detail textures,
- // which breaks the gpu plugin due to it requiring the 128x128px textures
- if (event.getGameState() == GameState.LOGIN_SCREEN)
- {
- client.changeMemoryMode(config.lowDetail());
+ clientThread.invoke(() ->
+ {
+ if (client.getGameState().getState() >= GameState.LOGIN_SCREEN.getState())
+ {
+ client.changeMemoryMode(config.lowDetail());
+ }
+ });
}
}