diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java
index 3cde11fec9..5f9a99deee 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CrypticClue.java
@@ -330,6 +330,7 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc
private final String text;
private final String npc;
private final int objectId;
+ @Nullable
private final WorldPoint location;
private final String solution;
@Nullable
@@ -371,7 +372,7 @@ public class CrypticClue extends ClueScroll implements TextClueScroll, NpcClueSc
this(text, npc, objectId, location, solution, null);
}
- private CrypticClue(String text, String npc, int objectId, WorldPoint location, String solution, @Nullable String questionText)
+ private CrypticClue(String text, String npc, int objectId, @Nullable WorldPoint location, String solution, @Nullable String questionText)
{
this.text = text;
this.npc = npc;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/ThreeStepCrypticClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/ThreeStepCrypticClue.java
index 52c78d94c8..9672d4b351 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/ThreeStepCrypticClue.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/ThreeStepCrypticClue.java
@@ -30,6 +30,7 @@ import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.runelite.api.InventoryID;
@@ -167,6 +168,7 @@ public class ThreeStepCrypticClue extends ClueScroll implements TextClueScroll,
return clueSteps.stream()
.filter(s -> !s.getValue())
.map(s -> s.getKey().getLocation())
+ .filter(Objects::nonNull)
.toArray(WorldPoint[]::new);
}
diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/cluescrolls/clues/ThreeStepCrypticClueTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/cluescrolls/clues/ThreeStepCrypticClueTest.java
index a3ca74a577..f9ed47a555 100644
--- a/runelite-client/src/test/java/net/runelite/client/plugins/cluescrolls/clues/ThreeStepCrypticClueTest.java
+++ b/runelite-client/src/test/java/net/runelite/client/plugins/cluescrolls/clues/ThreeStepCrypticClueTest.java
@@ -24,6 +24,10 @@
*/
package net.runelite.client.plugins.cluescrolls.clues;
+import com.google.common.base.Joiner;
+import net.runelite.api.coords.WorldPoint;
+import net.runelite.client.util.Text;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import org.junit.Test;
@@ -34,4 +38,17 @@ public class ThreeStepCrypticClueTest
{
assertNull(ThreeStepCrypticClue.forText("", ""));
}
+
+ @Test
+ public void nonNullLocations()
+ {
+ final String clueText = Joiner.on("
").join(CrypticClue.CLUES.stream().map(CrypticClue::getText).toArray());
+ final ThreeStepCrypticClue clue = ThreeStepCrypticClue.forText(Text.sanitizeMultilineText(clueText).toLowerCase(), clueText);
+
+ assertNotNull(clue);
+ for (final WorldPoint location : clue.getLocations())
+ {
+ assertNotNull(location);
+ }
+ }
}