From 1a1c83dd3cac320b74b9c920c0bb569cf2549a18 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Wed, 26 Sep 2018 09:09:31 +0200 Subject: [PATCH 1/7] Move map clue checking to MenuOptionClicked Closes #4607 Signed-off-by: Tomas Slusny --- .../plugins/cluescrolls/ClueScrollPlugin.java | 66 +++++++------------ 1 file changed, 25 insertions(+), 41 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java index 3232b63d31..1103626a28 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java @@ -57,7 +57,6 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.MenuOptionClicked; -import net.runelite.api.queries.InventoryItemQuery; import net.runelite.api.queries.NPCQuery; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; @@ -146,7 +145,6 @@ public class ClueScrollPlugin extends Plugin private BufferedImage emoteImage; private BufferedImage mapArrow; private Integer clueItemId; - private boolean clueItemChanged = false; private boolean worldMapPointsSet = false; @Provides @@ -169,7 +167,7 @@ public class ClueScrollPlugin extends Plugin overlayManager.remove(clueScrollOverlay); overlayManager.remove(clueScrollEmoteOverlay); overlayManager.remove(clueScrollWorldOverlay); - resetClue(); + resetClue(true); } @Subscribe @@ -194,7 +192,7 @@ public class ClueScrollPlugin extends Plugin return; } - resetClue(); + resetClue(true); } @Subscribe @@ -207,7 +205,7 @@ public class ClueScrollPlugin extends Plugin if (itemComposition != null && itemComposition.getName().startsWith("Clue scroll")) { clueItemId = itemComposition.getId(); - clueItemChanged = true; + updateClue(MapClue.forItemId(clueItemId)); } } } @@ -223,7 +221,7 @@ public class ClueScrollPlugin extends Plugin // Check if clue was removed from inventory if (items.noneMatch(item -> itemManager.getItemComposition(item.getId()).getId() == clueItemId)) { - resetClue(); + resetClue(true); } } @@ -248,7 +246,7 @@ public class ClueScrollPlugin extends Plugin { if (event.getGameState() == GameState.LOGIN_SCREEN) { - resetClue(); + resetClue(true); } } @@ -342,7 +340,7 @@ public class ClueScrollPlugin extends Plugin if (clue instanceof EmoteClue) { ItemContainer equipment = client.getItemContainer(InventoryID.EQUIPMENT); - + if (equipment != null) { equippedItems = equipment.getItems(); @@ -383,12 +381,7 @@ public class ClueScrollPlugin extends Plugin // so the clue window doesn't have to be open. if (clue != null) { - if (clue != this.clue) - { - resetClue(); - } - - this.clue = clue; + updateClue(clue); this.clueTimeout = Instant.now(); } } @@ -427,19 +420,18 @@ public class ClueScrollPlugin extends Plugin return mapArrow; } - private void resetClue() + private void resetClue(boolean withItemId) { - if (!clueItemChanged) - { - clueItemId = null; - } - if (clue instanceof LocationsClueScroll) { ((LocationsClueScroll) clue).reset(); } - clueItemChanged = false; + if (withItemId) + { + clueItemId = null; + } + clue = null; worldMapPointManager.removeIf(ClueScrollWorldMapPoint.class::isInstance); worldMapPointsSet = false; @@ -522,30 +514,11 @@ public class ClueScrollPlugin extends Plugin } // We have unknown clue, reset - resetClue(); + resetClue(true); return null; } } - Item[] result = queryRunner.runQuery(new InventoryItemQuery(InventoryID.INVENTORY)); - - if (result == null) - { - return null; - } - - for (Item item : result) - { - MapClue clue = MapClue.forItemId(item.getId()); - - if (clue != null) - { - clueItemId = item.getId(); - clueItemChanged = true; - return clue; - } - } - return null; } @@ -621,4 +594,15 @@ public class ClueScrollPlugin extends Plugin worldMapPointManager.add(new ClueScrollWorldMapPoint(point, this)); } } + + private void updateClue(final ClueScroll clue) + { + if (clue == null || clue == this.clue) + { + return; + } + + resetClue(false); + this.clue = clue; + } } From 19bd40f7bb604db889c0335c53b596ddd4d4bd4a Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Wed, 26 Sep 2018 09:20:04 +0200 Subject: [PATCH 2/7] Use NpcSpawned/Despawned events for checking clue NPCs - Use NpcSpawn/Despawn events to set npcs to mark and hint arrow - When setting location hint arrows, check if NPC hint arrow for clue NPC is not already set Signed-off-by: Tomas Slusny --- .../plugins/cluescrolls/ClueScrollPlugin.java | 111 ++++++++++++------ 1 file changed, 78 insertions(+), 33 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java index 1103626a28..ab757cbc9a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java @@ -31,7 +31,10 @@ import com.google.inject.Provides; import java.awt.image.BufferedImage; import java.time.Duration; import java.time.Instant; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; +import java.util.Objects; import java.util.stream.Stream; import javax.inject.Inject; import lombok.Getter; @@ -46,7 +49,6 @@ import net.runelite.api.ItemComposition; import net.runelite.api.ItemContainer; import net.runelite.api.ItemID; import net.runelite.api.NPC; -import net.runelite.api.Query; import net.runelite.api.Scene; import net.runelite.api.Tile; import net.runelite.api.coords.LocalPoint; @@ -57,7 +59,8 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.MenuOptionClicked; -import net.runelite.api.queries.NPCQuery; +import net.runelite.api.events.NpcDespawned; +import net.runelite.api.events.NpcSpawned; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.config.ConfigManager; @@ -82,7 +85,6 @@ import net.runelite.client.plugins.cluescrolls.clues.ThreeStepCrypticClue; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager; import net.runelite.client.util.ImageUtil; -import net.runelite.client.util.QueryRunner; import net.runelite.client.util.Text; import org.apache.commons.lang3.ArrayUtils; @@ -100,7 +102,7 @@ public class ClueScrollPlugin extends Plugin private ClueScroll clue; @Getter - private NPC[] npcsToMark; + private final List npcsToMark = new ArrayList<>(); @Getter private GameObject[] objectsToMark; @@ -121,9 +123,6 @@ public class ClueScrollPlugin extends Plugin @Inject private ItemManager itemManager; - @Inject - private QueryRunner queryRunner; - @Inject private OverlayManager overlayManager; @@ -167,6 +166,7 @@ public class ClueScrollPlugin extends Plugin overlayManager.remove(clueScrollOverlay); overlayManager.remove(clueScrollEmoteOverlay); overlayManager.remove(clueScrollWorldOverlay); + npcsToMark.clear(); resetClue(true); } @@ -232,6 +232,32 @@ public class ClueScrollPlugin extends Plugin } } + @Subscribe + public void onNpcSpawned(final NpcSpawned event) + { + final NPC npc = event.getNpc(); + checkClueNPCs(clue, npc); + } + + @Subscribe + public void onNpcDespawned(final NpcDespawned event) + { + final boolean removed = npcsToMark.remove(event.getNpc()); + + if (removed) + { + if (npcsToMark.isEmpty()) + { + client.clearHintArrow(); + } + else + { + // Always set hint arrow to first seen NPC + client.setHintArrow(npcsToMark.get(0)); + } + } + } + @Subscribe public void onConfigChanged(ConfigChanged event) { @@ -253,7 +279,6 @@ public class ClueScrollPlugin extends Plugin @Subscribe public void onGameTick(final GameTick event) { - npcsToMark = null; objectsToMark = null; equippedItems = null; inventoryItems = null; @@ -298,15 +323,16 @@ public class ClueScrollPlugin extends Plugin } } - // If we have location clue, set world location before all other types of clues - // to allow NPCs and objects to override it when needed if (clue instanceof LocationClueScroll) { final WorldPoint location = ((LocationClueScroll) clue).getLocation(); if (location != null) { - if (config.displayHintArrows()) + // Only set the location hint arrow if we do not already have more accurate location + if (config.displayHintArrows() + && (client.getHintArrowNpc() == null + || !npcsToMark.contains(client.getHintArrowNpc()))) { client.setHintArrow(location); } @@ -315,28 +341,6 @@ public class ClueScrollPlugin extends Plugin } } - if (clue instanceof NpcClueScroll) - { - String[] npcs = ((NpcClueScroll) clue).getNpcs(); - - if (npcs.length > 0) - { - Query query = new NPCQuery().nameEquals(npcs); - npcsToMark = queryRunner.runQuery(query); - - // Set hint arrow to first NPC found as there can only be 1 hint arrow - if (npcsToMark.length >= 1) - { - if (config.displayHintArrows()) - { - client.setHintArrow(npcsToMark[0]); - } - - addMapPoints(npcsToMark[0].getWorldLocation()); - } - } - } - if (clue instanceof EmoteClue) { ItemContainer equipment = client.getItemContainer(InventoryID.EQUIPMENT); @@ -435,6 +439,7 @@ public class ClueScrollPlugin extends Plugin clue = null; worldMapPointManager.removeIf(ClueScrollWorldMapPoint.class::isInstance); worldMapPointsSet = false; + npcsToMark.clear(); if (config.displayHintArrows()) { @@ -595,6 +600,45 @@ public class ClueScrollPlugin extends Plugin } } + private void checkClueNPCs(ClueScroll clue, final NPC... npcs) + { + if (!(clue instanceof NpcClueScroll)) + { + return; + } + + final NpcClueScroll npcClueScroll = (NpcClueScroll) clue; + + if (npcClueScroll.getNpcs() == null || npcClueScroll.getNpcs().length == 0) + { + return; + } + + for (NPC npc : npcs) + { + if (npc == null || npc.getName() == null) + { + continue; + } + + for (String npcName : npcClueScroll.getNpcs()) + { + if (!Objects.equals(npc.getName(), npcName)) + { + continue; + } + + npcsToMark.add(npc); + } + } + + if (!npcsToMark.isEmpty() && config.displayHintArrows()) + { + // Always set hint arrow to first seen NPC + client.setHintArrow(npcsToMark.get(0)); + } + } + private void updateClue(final ClueScroll clue) { if (clue == null || clue == this.clue) @@ -603,6 +647,7 @@ public class ClueScrollPlugin extends Plugin } resetClue(false); + checkClueNPCs(clue, client.getCachedNPCs()); this.clue = clue; } } From 255ce8ed9171a1a862549e173cd85ac138a17fe7 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Wed, 26 Sep 2018 09:22:45 +0200 Subject: [PATCH 3/7] Move clue inventory/equipment assignment to ItemContainerChanged Signed-off-by: Tomas Slusny --- .../plugins/cluescrolls/ClueScrollPlugin.java | 45 +++++++------------ 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java index ab757cbc9a..1fc51ccb47 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java @@ -46,7 +46,6 @@ import net.runelite.api.GameState; import net.runelite.api.InventoryID; import net.runelite.api.Item; import net.runelite.api.ItemComposition; -import net.runelite.api.ItemContainer; import net.runelite.api.ItemID; import net.runelite.api.NPC; import net.runelite.api.Scene; @@ -167,6 +166,8 @@ public class ClueScrollPlugin extends Plugin overlayManager.remove(clueScrollEmoteOverlay); overlayManager.remove(clueScrollWorldOverlay); npcsToMark.clear(); + inventoryItems = null; + equippedItems = null; resetClue(true); } @@ -213,8 +214,21 @@ public class ClueScrollPlugin extends Plugin @Subscribe public void onItemContainerChanged(final ItemContainerChanged event) { + if (event.getItemContainer() == client.getItemContainer(InventoryID.EQUIPMENT)) + { + equippedItems = event.getItemContainer().getItems(); + return; + } + + if (event.getItemContainer() != client.getItemContainer(InventoryID.INVENTORY)) + { + return; + } + + inventoryItems = event.getItemContainer().getItems(); + // Check if item was removed from inventory - if (clue != null && clueItemId != null && event.getItemContainer() == client.getItemContainer(InventoryID.INVENTORY)) + if (clue != null && clueItemId != null) { final Stream items = Arrays.stream(event.getItemContainer().getItems()); @@ -341,33 +355,6 @@ public class ClueScrollPlugin extends Plugin } } - if (clue instanceof EmoteClue) - { - ItemContainer equipment = client.getItemContainer(InventoryID.EQUIPMENT); - - if (equipment != null) - { - equippedItems = equipment.getItems(); - } - - ItemContainer inventory = client.getItemContainer(InventoryID.INVENTORY); - - if (inventory != null) - { - inventoryItems = inventory.getItems(); - } - } - - if (clue instanceof CoordinateClue || clue instanceof FairyRingClue) - { - ItemContainer container = client.getItemContainer(InventoryID.INVENTORY); - - if (container != null) - { - inventoryItems = container.getItems(); - } - } - ClueScroll clue = findClueScroll(); if (clue == null && this.clue != null) From 108050a8053fd7ee2f9e0f249e2c41d0a3ed4597 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Thu, 27 Sep 2018 12:00:44 +0200 Subject: [PATCH 4/7] Inverse findClueScroll conditions For better readability, change the big if blocks in findClueScroll() method to early returns instead. Signed-off-by: Tomas Slusny --- .../plugins/cluescrolls/ClueScrollPlugin.java | 137 +++++++++--------- 1 file changed, 69 insertions(+), 68 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java index 1fc51ccb47..dbb7db801f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java @@ -436,81 +436,82 @@ public class ClueScrollPlugin extends Plugin private ClueScroll findClueScroll() { - Widget clueScrollText = client.getWidget(WidgetInfo.CLUE_SCROLL_TEXT); + final Widget clueScrollText = client.getWidget(WidgetInfo.CLUE_SCROLL_TEXT); - if (clueScrollText != null) + if (clueScrollText == null) { - // Remove line breaks and also the rare occasion where there are double line breaks - String text = Text.removeTags(clueScrollText.getText() - .replaceAll("-
", "-") - .replaceAll("
", " ") - .replaceAll("[ ]+", " ") - .toLowerCase()); + return null; + } - if (clue instanceof TextClueScroll) + // Remove line breaks and also the rare occasion where there are double line breaks + final String text = Text.removeTags(clueScrollText.getText() + .replaceAll("-
", "-") + .replaceAll("
", " ") + .replaceAll("[ ]+", " ") + .toLowerCase()); + + // Early return if this is same clue as already existing one + if (clue instanceof TextClueScroll) + { + if (((TextClueScroll) clue).getText().equalsIgnoreCase(text)) { - if (((TextClueScroll) clue).getText().equalsIgnoreCase(text)) - { - return clue; - } - } - - if (text.startsWith("this anagram reveals who to speak to next:")) - { - return AnagramClue.forText(text); - } - else if (text.startsWith("the cipher reveals who to speak to next:")) - { - return CipherClue.forText(text); - } - else if (text.contains("degrees") && text.contains("minutes")) - { - return coordinatesToWorldPoint(text); - } - else - { - CrypticClue crypticClue = CrypticClue.forText(text); - - if (crypticClue != null) - { - return crypticClue; - } - - EmoteClue emoteClue = EmoteClue.forText(text); - - if (emoteClue != null) - { - return emoteClue; - } - - final FairyRingClue fairyRingClue = FairyRingClue.forText(text); - - if (fairyRingClue != null) - { - return fairyRingClue; - } - - final HotColdClue hotColdClue = HotColdClue.forText(text); - - if (hotColdClue != null) - { - return hotColdClue; - } - - // three step cryptic clues need unedited text to check which steps are already done - final ThreeStepCrypticClue threeStepCrypticClue = ThreeStepCrypticClue.forText(text, clueScrollText.getText()); - - if (threeStepCrypticClue != null) - { - return threeStepCrypticClue; - } - - // We have unknown clue, reset - resetClue(true); - return null; + return clue; } } + if (text.startsWith("this anagram reveals who to speak to next:")) + { + return AnagramClue.forText(text); + } + + if (text.startsWith("the cipher reveals who to speak to next:")) + { + return CipherClue.forText(text); + } + + if (text.contains("degrees") && text.contains("minutes")) + { + return coordinatesToWorldPoint(text); + } + + final CrypticClue crypticClue = CrypticClue.forText(text); + + if (crypticClue != null) + { + return crypticClue; + } + + final EmoteClue emoteClue = EmoteClue.forText(text); + + if (emoteClue != null) + { + return emoteClue; + } + + final FairyRingClue fairyRingClue = FairyRingClue.forText(text); + + if (fairyRingClue != null) + { + return fairyRingClue; + } + + final HotColdClue hotColdClue = HotColdClue.forText(text); + + if (hotColdClue != null) + { + return hotColdClue; + } + + // three step cryptic clues need unedited text to check which steps are already done + final ThreeStepCrypticClue threeStepCrypticClue = ThreeStepCrypticClue.forText(text, clueScrollText.getText()); + + if (threeStepCrypticClue != null) + { + return threeStepCrypticClue; + } + + // We have unknown clue, reset + resetClue(true); return null; } From db815daab279e2ec51d10887202d7b54d33e8e29 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Thu, 4 Oct 2018 16:44:09 +0200 Subject: [PATCH 5/7] Do not set hint arrows for object clue scroll As it is set in check for LocatioClueScroll it is not necessary to set it also in object clue scroll check. Signed-off-by: Tomas Slusny --- .../client/plugins/cluescrolls/ClueScrollPlugin.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java index dbb7db801f..bf47b34572 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java @@ -325,12 +325,6 @@ public class ClueScrollPlugin extends Plugin objectsToMark = Arrays.stream(tile.getGameObjects()) .filter(object -> object != null && ArrayUtils.contains(objectIds, object.getId())) .toArray(GameObject[]::new); - - // Set hint arrow to first object found as there can only be 1 hint arrow - if (config.displayHintArrows() && objectsToMark.length >= 1) - { - client.setHintArrow(objectsToMark[0].getWorldLocation()); - } } } } From 6e417ba6d96097420ca631eba12e34cf3379d96c Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 5 Oct 2018 16:17:53 +0200 Subject: [PATCH 6/7] Correctly highlight ObjectClueScroll for single location This is regression by PR that introduced 3 step cryptic clues, as check for highlighting single object was removed. Signed-off-by: Tomas Slusny --- .../plugins/cluescrolls/ClueScrollPlugin.java | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java index bf47b34572..08470c0787 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java @@ -314,18 +314,7 @@ public class ClueScrollPlugin extends Plugin { for (WorldPoint location : locations) { - final LocalPoint localLocation = LocalPoint.fromWorld(client, location); - - if (localLocation != null) - { - final Scene scene = client.getScene(); - final Tile[][][] tiles = scene.getTiles(); - final Tile tile = tiles[client.getPlane()][localLocation.getSceneX()][localLocation.getSceneY()]; - - objectsToMark = Arrays.stream(tile.getGameObjects()) - .filter(object -> object != null && ArrayUtils.contains(objectIds, object.getId())) - .toArray(GameObject[]::new); - } + highlightObjectsForLocation(location, objectIds); } } } @@ -346,6 +335,16 @@ public class ClueScrollPlugin extends Plugin } addMapPoints(location); + + if (clue instanceof ObjectClueScroll) + { + int[] objectIds = ((ObjectClueScroll) clue).getObjectIds(); + + if (objectIds.length > 0) + { + highlightObjectsForLocation(location, objectIds); + } + } } } @@ -582,6 +581,24 @@ public class ClueScrollPlugin extends Plugin } } + private void highlightObjectsForLocation(final WorldPoint location, final int... objectIds) + { + final LocalPoint localLocation = LocalPoint.fromWorld(client, location); + + if (localLocation == null) + { + return; + } + + final Scene scene = client.getScene(); + final Tile[][][] tiles = scene.getTiles(); + final Tile tile = tiles[client.getPlane()][localLocation.getSceneX()][localLocation.getSceneY()]; + + objectsToMark = Arrays.stream(tile.getGameObjects()) + .filter(object -> object != null && ArrayUtils.contains(objectIds, object.getId())) + .toArray(GameObject[]::new); + } + private void checkClueNPCs(ClueScroll clue, final NPC... npcs) { if (!(clue instanceof NpcClueScroll)) From a72b137a9ec2bcd63745afcdff6d28a2d193cf16 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 5 Oct 2018 16:24:51 +0200 Subject: [PATCH 7/7] Remove clue scroll timeout It is not even working anymore because when clue dissapears from inventory clue is just reset. Signed-off-by: Tomas Slusny --- .../plugins/cluescrolls/ClueScrollPlugin.java | 23 +------------------ 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java index 08470c0787..f19817659b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java @@ -30,7 +30,6 @@ import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; import java.awt.image.BufferedImage; import java.time.Duration; -import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -112,9 +111,6 @@ public class ClueScrollPlugin extends Plugin @Getter private Item[] inventoryItems; - @Getter - private Instant clueTimeout; - @Inject @Getter private Client client; @@ -348,26 +344,9 @@ public class ClueScrollPlugin extends Plugin } } - ClueScroll clue = findClueScroll(); - - if (clue == null && this.clue != null) - { - // If clue window isn't open, and we don't have a map clue in inventory, - // but we have recorded the player having a clue, - // wait for WAIT_DURATION before discarding the knowledge of the player having a clue. - if (Instant.now().compareTo(clueTimeout.plus(WAIT_DURATION)) < 0) - { - return; - } - } - // If we have a clue, save that knowledge // so the clue window doesn't have to be open. - if (clue != null) - { - updateClue(clue); - this.clueTimeout = Instant.now(); - } + updateClue(findClueScroll()); } public BufferedImage getClueScrollImage()