diff options
| author | LMBishop <13875753+LMBishop@users.noreply.github.com> | 2022-02-23 14:33:15 +0000 |
|---|---|---|
| committer | LMBishop <13875753+LMBishop@users.noreply.github.com> | 2022-02-23 14:34:05 +0000 |
| commit | 7387280b08575b805c436748555fb20c28a469ff (patch) | |
| tree | 6655c27ea063b7c953e65f03479757f6b8f230bb /bukkit/src/main/java | |
| parent | 332af253ac21fd3205a9836a83364e5fa3cebc2f (diff) | |
Add global macros (closes #316)
Diffstat (limited to 'bukkit/src/main/java')
| -rw-r--r-- | bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java index b16f4966..ae134419 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java @@ -108,6 +108,9 @@ public class BukkitQuestsLoader implements QuestsLoader { qItemStackRegistry.register(category, displayItem); } + // <\$m\s*([^ ]+)\s*\$> + Pattern macroPattern = Pattern.compile("<\\$m\\s*([^ ]+)\\s*\\$>"); + FileVisitor<Path> fileVisitor = new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path path, BasicFileAttributes attributes) { @@ -115,12 +118,35 @@ public class BukkitQuestsLoader implements QuestsLoader { File questFile = new File(path.toUri()); URI relativeLocation = root.toURI().relativize(path.toUri()); - if (!questFile.getName().toLowerCase().endsWith(".yml")) return FileVisitResult.CONTINUE; + if (!questFile.getName().toLowerCase().endsWith(".yml")) { + return FileVisitResult.CONTINUE; + } + + // process macros -- start + String data = Files.readAllLines(path).stream().reduce("", String::concat); + StringBuilder processed = new StringBuilder(); + Matcher matcher = macroPattern.matcher(data); + + int end = 0; + while (matcher.find()) { + String macro = matcher.group(1); + String replacement = questsConfig.getString("global-macros." + macro, null); + if (replacement == null) { + replacement = matcher.group(0); + } + processed.append(data, end, matcher.start()).append(replacement); + end = matcher.end(); + } + + if (end < data.length()) { + processed.append(data, end, data.length()); + } + // process macros -- end YamlConfiguration config = new YamlConfiguration(); // test QUEST file integrity try { - config.load(questFile); + config.load(processed.toString()); } catch (Exception ex) { configProblems.put(relativeLocation.getPath(), Collections.singletonList(new ConfigProblem(ConfigProblem.ConfigProblemType.ERROR, ConfigProblemDescriptions.MALFORMED_YAML.getDescription()))); return FileVisitResult.CONTINUE; |
