diff options
| author | Krakenied <Krakenied1@gmail.com> | 2024-02-21 15:26:41 +0100 |
|---|---|---|
| committer | Leonardo Bishop <13875753+LMBishop@users.noreply.github.com> | 2024-03-09 17:01:12 +0000 |
| commit | 7cef6c62ff599ece66398c766308a281c3a67481 (patch) | |
| tree | 76f6b201994784a4c5d51d99d55c210246e7fb40 | |
| parent | d7d5e3ec51e7269832527fa1187cd7aff30062df (diff) | |
Validate progress-placeholders task references
| -rw-r--r-- | bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java | 49 |
1 files changed, 39 insertions, 10 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 7c6a5be0..58552e4d 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 @@ -370,6 +370,7 @@ public class BukkitQuestsLoader implements QuestsLoader { if (config.isConfigurationSection("progress-placeholders")) { for (String p : config.getConfigurationSection("progress-placeholders").getKeys(false)) { progressPlaceholders.put(p, config.getString("progress-placeholders." + p)); + findInvalidTaskReferences(quest, config.getString("progress-placeholders." + p), problems, "placeholders." + p, true, true); } } questManager.registerQuest(quest); @@ -513,24 +514,52 @@ public class BukkitQuestsLoader implements QuestsLoader { questsLogger.info(questItemRegistry.getAllItems().size() + " quest items have been registered."); } + private static final Pattern taskPlaceholderPattern = Pattern.compile("\\{([^}]+)}"); + private void findInvalidTaskReferences(Quest quest, String s, List<ConfigProblem> configProblems, String location) { - Pattern pattern = Pattern.compile("\\{([^}]+)}"); + findInvalidTaskReferences(quest, s, configProblems, location, false, false); + } + + private void findInvalidTaskReferences(Quest quest, String s, List<ConfigProblem> configProblems, String location, boolean allowByThis, boolean allowByType) { + Matcher matcher = taskPlaceholderPattern.matcher(s); - Matcher matcher = pattern.matcher(s); while (matcher.find()) { - String[] parts = matcher.group(1).split(":"); + String taskPlaceholder = matcher.group(1); + + String[] parts = taskPlaceholder.split(":", 2); + if (parts.length != 2) { + // not a placeholder? + continue; + } + + String taskIdPart = parts[0]; + if (allowByThis && taskIdPart.equals("this")) { + continue; + } + boolean match = false; - for (Task t : quest.getTasks()) { - if (t.getId().equals(parts[0])) { + for (Task task : quest.getTasks()) { + String taskType = task.getType(); + if (allowByType && taskType.equals(taskIdPart)) { + match = true; + break; + } + + String taskId = task.getId(); + if (taskId.equals(taskIdPart)) { match = true; break; } } - if (!match) - configProblems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING, - ConfigProblemDescriptions.UNKNOWN_TASK_REFERENCE.getDescription(parts[0]), - ConfigProblemDescriptions.UNKNOWN_TASK_REFERENCE.getExtendedDescription(parts[0]), - location)); + + if (match) { + continue; + } + + configProblems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING, + ConfigProblemDescriptions.UNKNOWN_TASK_REFERENCE.getDescription(parts[0]), + ConfigProblemDescriptions.UNKNOWN_TASK_REFERENCE.getExtendedDescription(parts[0]), + location)); } } |
