ThreeStepCrypticClue extends ClueScroll implements TextClueScroll, ObjectClueScroll, NpcClueScroll, LocationsClueScroll { public static ThreeStepCrypticClue forText(String plainText, String text) { final String[] split = text.split("<br>\\s*<br>"); final List<Map.Entry<CrypticClue, Boolean>> steps = new ArrayList<>(split.length); for (String part : split) { boolean isDone = part.contains("<str>"); final String rawText = Text.sanitizeMultilineText(part); for (CrypticClue clue : CrypticClue.CLUES) { if (!rawText.equalsIgnoreCase(clue.getText())) { continue; } steps.add(new AbstractMap.SimpleEntry<>(clue, isDone)); break; } } if (steps.isEmpty() || steps.size() < 3) { return null; } return new ThreeStepCrypticClue(steps, plainText); }  static ThreeStepCrypticClue forText(String plainText, String text); @Override void makeOverlayHint(PanelComponent panelComponent, ClueScrollPlugin plugin); @Override void makeWorldOverlayHint(Graphics2D graphics, ClueScrollPlugin plugin); boolean update(int containerId, final ItemContainer itemContainer); @Override void reset(); @Override WorldPoint getLocation(); @Override WorldPoint[] getLocations(); @Override String[] getNpcs(); @Override int[] getObjectIds();  }
@Test public void forTextEmptyString() { assertNull(ThreeStepCrypticClue.forText("", "")); }