From 7c59815869537fa7d8a44789880ae81c8e022c57 Mon Sep 17 00:00:00 2001 From: Jordan Atwood Date: Fri, 12 Feb 2021 23:40:34 -0800 Subject: [PATCH] npchighlight: Apply correct highlights to changed NPCs --- .../npchighlight/NpcIndicatorsPlugin.java | 21 ++++++++++ .../npchighlight/NpcIndicatorsPluginTest.java | 41 +++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java index d8fa6e81de..a68a76d184 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java @@ -57,6 +57,7 @@ import net.runelite.api.events.GameTick; import net.runelite.api.events.GraphicsObjectCreated; import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuOptionClicked; +import net.runelite.api.events.NpcChanged; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; import net.runelite.client.callback.ClientThread; @@ -409,6 +410,26 @@ public class NpcIndicatorsPlugin extends Plugin highlightedNpcs.remove(npc); } + @Subscribe + public void onNpcChanged(NpcChanged event) + { + final NPC npc = event.getNpc(); + final String npcName = npc.getName(); + + highlightedNpcs.remove(npc); + + if (npcName == null) + { + return; + } + + if (npcTags.contains(npc.getIndex()) + || highlightMatchesNPCName(npcName)) + { + highlightedNpcs.add(npc); + } + } + @Subscribe public void onGraphicsObjectCreated(GraphicsObjectCreated event) { diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPluginTest.java index 1260c5df0d..cb81a836d2 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPluginTest.java @@ -37,9 +37,12 @@ import net.runelite.api.MenuAction; import net.runelite.api.MenuEntry; import net.runelite.api.NPC; import net.runelite.api.events.MenuEntryAdded; +import net.runelite.api.events.NpcChanged; import net.runelite.api.events.NpcSpawned; import net.runelite.client.ui.overlay.OverlayManager; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -137,4 +140,42 @@ public class NpcIndicatorsPluginTest target.setTarget("Goblin"); // blue verify(client).setMenuEntries(new MenuEntry[]{target}); } + + @Test + public void taggedNpcChanges() + { + when(npcIndicatorsConfig.getNpcToHighlight()).thenReturn("Joseph"); + + npcIndicatorsPlugin.rebuildAllNpcs(); + + NPC npc = mock(NPC.class); + when(npc.getName()).thenReturn("Joseph"); + npcIndicatorsPlugin.onNpcSpawned(new NpcSpawned(npc)); + + assertTrue(npcIndicatorsPlugin.getHighlightedNpcs().contains(npc)); + + when(npc.getName()).thenReturn("Werewolf"); + npcIndicatorsPlugin.onNpcChanged(new NpcChanged(npc, null)); + + assertFalse(npcIndicatorsPlugin.getHighlightedNpcs().contains(npc)); + } + + @Test + public void npcChangesToTagged() + { + when(npcIndicatorsConfig.getNpcToHighlight()).thenReturn("Werewolf"); + + npcIndicatorsPlugin.rebuildAllNpcs(); + + NPC npc = mock(NPC.class); + when(npc.getName()).thenReturn("Joseph"); + npcIndicatorsPlugin.onNpcSpawned(new NpcSpawned(npc)); + + assertFalse(npcIndicatorsPlugin.getHighlightedNpcs().contains(npc)); + + when(npc.getName()).thenReturn("Werewolf"); + npcIndicatorsPlugin.onNpcChanged(new NpcChanged(npc, null)); + + assertTrue(npcIndicatorsPlugin.getHighlightedNpcs().contains(npc)); + } }