From 187058a4fef977ca1c658d6ff55e9f3ecbb0e2bc Mon Sep 17 00:00:00 2001 From: jboehm77 Date: Sun, 2 Aug 2026 17:01:04 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Feat=20category=20and=20prerequi?= =?UTF-8?q?site=20text?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../convert/tools/dnd5e/Json2QuteCommon.java | 15 ++++++++++----- .../ebullient/convert/tools/dnd5e/JsonSource.java | 4 +++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/java/dev/ebullient/convert/tools/dnd5e/Json2QuteCommon.java b/src/main/java/dev/ebullient/convert/tools/dnd5e/Json2QuteCommon.java index edd5bab9..30744f78 100644 --- a/src/main/java/dev/ebullient/convert/tools/dnd5e/Json2QuteCommon.java +++ b/src/main/java/dev/ebullient/convert/tools/dnd5e/Json2QuteCommon.java @@ -367,8 +367,11 @@ private String proficiencyPrereq(JsonNode profPrereq) { for (JsonNode p : iterableElements(profPrereq)) { for (Entry prof : iterableFields(p)) { switch (prof.getKey()) { - case "armor" -> profs.add(String.format("%s armor", - replaceText(prof.getValue().asText()))); + case "armor" -> { + String armor = replaceText(prof.getValue().asText()); + armor = armor.equals("shield") ? armor + "s" : armor + " armor"; + profs.add(armor); + } case "weapon" -> profs.add(String.format("a %s weapon", replaceText(prof.getValue().asText()))); case "weaponGroup" -> profs.add(String.format("%s weapons", @@ -518,12 +521,14 @@ String listPrerequisites(JsonNode variantNode) { case background -> values.add(backgroundPrereq(value)); case campaign -> values.add(replaceConjoinOr(value, " Campaign")); case culture -> values.add(replaceConjoinOr(value, " Culture")); - case exclusiveFeatCategory -> values.add("Can't Have Another " + replaceConjoinOr(value, " Feat")); + case exclusiveFeatCategory -> values.add("Can't Have Another " + + JsonSource.featureTypeToString(replaceConjoinOr(value, ""), Map.of())); case expertise -> values.add(expertisePrereq(value)); case feat -> values.add(featPrereq(value)); - case featCategory -> values.add("Any " + replaceConjoinOr(value, " Feat")); + case featCategory -> values.add("Any " + + JsonSource.featureTypeToString(replaceConjoinOr(value, ""), Map.of())); case feature -> values.add(replaceConjoinOr(value, " Feature")); - case optionalfeature -> values.add(replaceConjoinOr(value, "")); + case optionalfeature -> values.add(replaceText("{@optfeature " + replaceConjoinOr(value, "") + "}")); case group -> values.add(replaceConjoinOr(value, " Group")); case item -> values.add(replaceConjoinOr(value, "")); case itemProperty -> values.add(itemPropertyPrereq(value)); diff --git a/src/main/java/dev/ebullient/convert/tools/dnd5e/JsonSource.java b/src/main/java/dev/ebullient/convert/tools/dnd5e/JsonSource.java index 90d397a1..2b54e3d5 100644 --- a/src/main/java/dev/ebullient/convert/tools/dnd5e/JsonSource.java +++ b/src/main/java/dev/ebullient/convert/tools/dnd5e/JsonSource.java @@ -1409,7 +1409,8 @@ public static String featureTypeToString(String featureType, Map "Dragonmark"; + case "D" -> "Dragonmark Feat"; + case "DG" -> "Dark Gift Feat"; case "EB" -> "Epic Boon Feat"; case "FS" -> "Fighting Style Feat"; case "G" -> "General Feat"; @@ -1430,6 +1431,7 @@ public static String featureTypeToString(String featureType, Map "Fighting Style, Paladin"; case "FS:R" -> "Fighting Style, Ranger"; case "PB" -> "Pact Boon"; + case "PPACT" -> "Planar Pact Feat"; case "OR" -> "Onomancy Resonant"; case "RN" -> "Rune Knight Rune"; case "AF" -> "Alchemical Formula";