aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit
diff options
context:
space:
mode:
authorLMBishop <13875753+LMBishop@users.noreply.github.com>2022-02-23 14:33:15 +0000
committerLMBishop <13875753+LMBishop@users.noreply.github.com>2022-02-23 14:34:05 +0000
commit7387280b08575b805c436748555fb20c28a469ff (patch)
tree6655c27ea063b7c953e65f03479757f6b8f230bb /bukkit
parent332af253ac21fd3205a9836a83364e5fa3cebc2f (diff)
Add global macros (closes #316)
Diffstat (limited to 'bukkit')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java30
-rw-r--r--bukkit/src/main/resources/resources/bukkit/config.yml5
2 files changed, 33 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;
diff --git a/bukkit/src/main/resources/resources/bukkit/config.yml b/bukkit/src/main/resources/resources/bukkit/config.yml
index 6f961778..1c6301b7 100644
--- a/bukkit/src/main/resources/resources/bukkit/config.yml
+++ b/bukkit/src/main/resources/resources/bukkit/config.yml
@@ -285,6 +285,11 @@ global-quest-display:
- "&eMiddle Click &7to stop tracking this quest."
- "&eRight Click &7to cancel this quest."
+# Macros for faster quests configuration without having to repeat
+# yourself.
+# See wiki for more information.
+global-macros:
+ bar: "&6---&7---&6---"
# Configure titles
titles: