Skip to content

Commit 6444360

Browse files
committed
✨ Linkify senses in monster statblocks; Resolves #754
1 parent 08709d1 commit 6444360

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

src/main/java/dev/ebullient/convert/tools/dnd5e/Json2QuteMonster.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ size, creatureType, subtype, monsterAlignment(),
9595
speed(Tools5eFields.speed.getFrom(rootNode)),
9696
abilityScores,
9797
monsterSavesAndSkills(),
98-
joinAndReplace(rootNode, "senses"),
98+
linkedSenses(),
9999
intOrDefault(rootNode, "passive", 10),
100100
immuneResist(),
101101
gear(),
@@ -528,6 +528,29 @@ TraitDescription traitDescription(JsonNode source, MonsterFields field, String t
528528
}
529529
}
530530

531+
String linkedSenses() {
532+
JsonNode node = MonsterFields.senses.getFrom(rootNode);
533+
if (node == null || node.isNull()) {
534+
return "";
535+
}
536+
if (node.isTextual()) {
537+
return linkifySense(node.asText());
538+
}
539+
List<String> list = new ArrayList<>();
540+
for (JsonNode senseNode : iterableElements(node)) {
541+
list.add(linkifySense(senseNode.asText()));
542+
}
543+
return String.join(", ", list);
544+
}
545+
546+
String linkifySense(String sense) {
547+
int pos = sense.indexOf(" "); // find first space
548+
if (pos < 0) {
549+
return linkify(Tools5eIndexType.sense, sense);
550+
}
551+
return replaceText("{@sense %s}%s".formatted(sense.substring(0, pos), sense.substring(pos)));
552+
}
553+
531554
List<String> gear() {
532555
final List<MonsterFields> gearFields = List.of(
533556
MonsterFields.gear, MonsterFields.attachedItems);

0 commit comments

Comments
 (0)