emoji: clean up modicons loading

This just needs to be run after modicons is initialized, and doesn't
need to be checked on gamestate change.
This commit is contained in:
Adam
2022-05-06 21:45:39 -04:00
parent 026395fad5
commit 44de746d5b
2 changed files with 33 additions and 30 deletions

View File

@@ -37,7 +37,6 @@ import net.runelite.api.IndexedSprite;
import net.runelite.api.MessageNode; import net.runelite.api.MessageNode;
import net.runelite.api.Player; import net.runelite.api.Player;
import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.OverheadTextChanged; import net.runelite.api.events.OverheadTextChanged;
import net.runelite.client.callback.ClientThread; import net.runelite.client.callback.ClientThread;
import net.runelite.client.eventbus.Subscribe; import net.runelite.client.eventbus.Subscribe;
@@ -67,27 +66,27 @@ public class EmojiPlugin extends Plugin
@Override @Override
protected void startUp() protected void startUp()
{ {
clientThread.invoke(this::loadEmojiIcons); clientThread.invoke(() ->
}
@Subscribe
public void onGameStateChanged(GameStateChanged gameStateChanged)
{
if (gameStateChanged.getGameState() == GameState.LOGGED_IN)
{ {
if (client.getModIcons() == null)
{
return false;
}
loadEmojiIcons(); loadEmojiIcons();
} return true;
});
} }
private void loadEmojiIcons() private void loadEmojiIcons()
{ {
final IndexedSprite[] modIcons = client.getModIcons(); if (modIconsStart != -1)
if (modIconsStart != -1 || modIcons == null)
{ {
return; return;
} }
final Emoji[] emojis = Emoji.values(); final Emoji[] emojis = Emoji.values();
final IndexedSprite[] modIcons = client.getModIcons();
assert modIcons != null;
final IndexedSprite[] newModIcons = Arrays.copyOf(modIcons, modIcons.length + emojis.length); final IndexedSprite[] newModIcons = Arrays.copyOf(modIcons, modIcons.length + emojis.length);
modIconsStart = modIcons.length; modIconsStart = modIcons.length;

View File

@@ -28,24 +28,27 @@ import com.google.inject.Guice;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.testing.fieldbinder.Bind; import com.google.inject.testing.fieldbinder.Bind;
import com.google.inject.testing.fieldbinder.BoundFieldModule; import com.google.inject.testing.fieldbinder.BoundFieldModule;
import java.util.function.BooleanSupplier;
import net.runelite.api.ChatMessageType; import net.runelite.api.ChatMessageType;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.GameState; import net.runelite.api.GameState;
import net.runelite.api.IndexedSprite; import net.runelite.api.IndexedSprite;
import net.runelite.api.MessageNode; import net.runelite.api.MessageNode;
import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.GameStateChanged; import net.runelite.client.callback.ClientThread;
import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.ChatMessageManager;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import static org.mockito.ArgumentMatchers.any;
import org.mockito.Mock; import org.mockito.Mock;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import org.mockito.junit.MockitoJUnitRunner; import org.mockito.junit.MockitoJUnitRunner;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
@RunWith(MockitoJUnitRunner.class) @RunWith(MockitoJUnitRunner.class)
public class EmojiPluginTest public class EmojiPluginTest
@@ -58,6 +61,10 @@ public class EmojiPluginTest
@Bind @Bind
private ChatMessageManager chatMessageManager; private ChatMessageManager chatMessageManager;
@Mock
@Bind
private ClientThread clientThread;
@Inject @Inject
private EmojiPlugin emojiPlugin; private EmojiPlugin emojiPlugin;
@@ -65,19 +72,23 @@ public class EmojiPluginTest
public void before() public void before()
{ {
Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this); Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this);
when(client.getModIcons()).thenReturn(new IndexedSprite[0]);
when(client.createIndexedSprite()).thenReturn(mock(IndexedSprite.class));
doAnswer(a ->
{
final BooleanSupplier b = a.getArgument(0);
return b.getAsBoolean();
}).when(clientThread).invoke(any(BooleanSupplier.class));
emojiPlugin.startUp();
} }
@Test @Test
public void testOnChatMessage() public void testOnChatMessage()
{ {
when(client.getGameState()).thenReturn(GameState.LOGGED_IN); when(client.getGameState()).thenReturn(GameState.LOGGED_IN);
when(client.getModIcons()).thenReturn(new IndexedSprite[0]);
when(client.createIndexedSprite()).thenReturn(mock(IndexedSprite.class));
// Trip emoji loading
GameStateChanged gameStateChanged = new GameStateChanged();
gameStateChanged.setGameState(GameState.LOGGED_IN);
emojiPlugin.onGameStateChanged(gameStateChanged);
MessageNode messageNode = mock(MessageNode.class); MessageNode messageNode = mock(MessageNode.class);
// With chat recolor, message may be wrapped in col tags // With chat recolor, message may be wrapped in col tags
@@ -96,13 +107,6 @@ public class EmojiPluginTest
public void testGtLt() public void testGtLt()
{ {
when(client.getGameState()).thenReturn(GameState.LOGGED_IN); when(client.getGameState()).thenReturn(GameState.LOGGED_IN);
when(client.getModIcons()).thenReturn(new IndexedSprite[0]);
when(client.createIndexedSprite()).thenReturn(mock(IndexedSprite.class));
// Trip emoji loading
GameStateChanged gameStateChanged = new GameStateChanged();
gameStateChanged.setGameState(GameState.LOGGED_IN);
emojiPlugin.onGameStateChanged(gameStateChanged);
MessageNode messageNode = mock(MessageNode.class); MessageNode messageNode = mock(MessageNode.class);
when(messageNode.getValue()).thenReturn("<gt>:D<lt>"); when(messageNode.getValue()).thenReturn("<gt>:D<lt>");
@@ -119,8 +123,8 @@ public class EmojiPluginTest
@Test @Test
public void testEmojiUpdateMessage() public void testEmojiUpdateMessage()
{ {
String PARTY_POPPER = "<img=" + (-1 + Emoji.getEmoji("@@@").ordinal()) + '>'; String PARTY_POPPER = "<img=" + Emoji.getEmoji("@@@").ordinal() + '>';
String OPEN_MOUTH = "<img=" + (-1 + Emoji.getEmoji(":O").ordinal()) + '>'; String OPEN_MOUTH = "<img=" + Emoji.getEmoji(":O").ordinal() + '>';
assertNull(emojiPlugin.updateMessage("@@@@@")); assertNull(emojiPlugin.updateMessage("@@@@@"));
assertEquals(PARTY_POPPER, emojiPlugin.updateMessage("@@@")); assertEquals(PARTY_POPPER, emojiPlugin.updateMessage("@@@"));
assertEquals(PARTY_POPPER + ' ' + PARTY_POPPER, emojiPlugin.updateMessage("@@@ @@@")); assertEquals(PARTY_POPPER + ' ' + PARTY_POPPER, emojiPlugin.updateMessage("@@@ @@@"));