From b00b599a050e934bde34318cabcfc5f03c8b4916 Mon Sep 17 00:00:00 2001 From: WooxSolo Date: Thu, 7 Jun 2018 02:54:51 +0200 Subject: [PATCH] npc indicators: fix ghosts and NPE --- .../npchighlight/NpcIndicatorsPlugin.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) 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 2ca74f4dcb..94dabaa561 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 @@ -56,6 +56,7 @@ import net.runelite.api.events.GraphicsObjectCreated; import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; +import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.input.KeyManager; import net.runelite.client.menus.MenuManager; @@ -96,6 +97,9 @@ public class NpcIndicatorsPlugin extends Plugin @Inject private KeyManager keyManager; + @Inject + private ClientThread clientThread; + /** * NPCs to highlight */ @@ -172,7 +176,11 @@ public class NpcIndicatorsPlugin extends Plugin { keyManager.registerKeyListener(inputListener); highlights = getHighlights(); - rebuildAllNpcs(); + clientThread.invokeLater(() -> + { + skipNextSpawnCheck = true; + rebuildAllNpcs(); + }); } @Override @@ -412,6 +420,14 @@ public class NpcIndicatorsPlugin extends Plugin { highlightedNpcs.clear(); + if (client.getGameState() != GameState.LOGGED_IN && + client.getGameState() != GameState.LOADING) + { + // NPCs are still in the client after logging out, + // but we don't want to highlight those. + return; + } + outer: for (NPC npc : client.getNpcs()) { @@ -490,7 +506,7 @@ public class NpcIndicatorsPlugin extends Plugin } } - if (isInViewRange(lastPlayerLocation, npc.getWorldLocation())) + if (lastPlayerLocation != null && isInViewRange(lastPlayerLocation, npc.getWorldLocation())) { final MemorizedNpc mn = memorizedNpcs.get(npc.getIndex());