diff options
| author | LMBishop <13875753+LMBishop@users.noreply.github.com> | 2022-07-06 17:54:38 +0100 |
|---|---|---|
| committer | LMBishop <13875753+LMBishop@users.noreply.github.com> | 2022-07-06 17:54:38 +0100 |
| commit | 6551b698274aaabb5b3b613cb076b55b2aa1d7ae (patch) | |
| tree | bddc0591980460bd02b1140161041e87750c59f8 /common/src/main | |
| parent | cd4dfb95872080123f69eeaa1d817d9305b4e5b5 (diff) | |
Refactor config validation for task types
Diffstat (limited to 'common/src/main')
3 files changed, 30 insertions, 1 deletions
diff --git a/common/src/main/java/com/leonardobishop/quests/common/config/ConfigProblemDescriptions.java b/common/src/main/java/com/leonardobishop/quests/common/config/ConfigProblemDescriptions.java index c1903a35..028669ac 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/config/ConfigProblemDescriptions.java +++ b/common/src/main/java/com/leonardobishop/quests/common/config/ConfigProblemDescriptions.java @@ -93,7 +93,8 @@ public enum ConfigProblemDescriptions { UNKNOWN_REQUIREMENT("Quest requirement '%s' does not exist", "This may be the result of a cascading error<br>" + "if '%s' failed to load, or a mis-typed ID." - ); + ), + NOT_ACCEPTED_VALUE("Value '%s' is not in the list of accepted values for task %s: %s", null); private final String description; private final String extendedDescription; diff --git a/common/src/main/java/com/leonardobishop/quests/common/quest/Task.java b/common/src/main/java/com/leonardobishop/quests/common/quest/Task.java index 6e27aef6..b92ed59e 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/quest/Task.java +++ b/common/src/main/java/com/leonardobishop/quests/common/quest/Task.java @@ -34,6 +34,18 @@ public class Task { } /** + * Check if a config value is set for this task + * + * @param key key of config value to check + * @return whether it exists + */ + public boolean hasConfigKey(@NotNull String key) { + Objects.requireNonNull(key, "key cannot be null"); + + return configValues.containsKey(key); + } + + /** * Get a specific configuration value for this task * * @param key key of config value to get diff --git a/common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskType.java b/common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskType.java index 48e7c9c8..781d78f2 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskType.java +++ b/common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskType.java @@ -17,6 +17,7 @@ import java.util.*; public abstract class TaskType { private final List<Quest> quests = new ArrayList<>(); + private final List<ConfigValidator> configValidators = new ArrayList<>(); private final String type; private String author; private String description; @@ -110,4 +111,19 @@ public abstract class TaskType { // not implemented here return Collections.emptyList(); } + + public void addConfigValidator(@NotNull ConfigValidator validator) { + Objects.requireNonNull(validator, "validator cannot be null"); + + configValidators.add(validator); + } + + public List<ConfigValidator> getConfigValidators() { + return configValidators; + } + + @FunctionalInterface + public interface ConfigValidator { + void validateConfig(@NotNull HashMap<String, Object> taskConfig, @NotNull List<ConfigProblem> problems); + } } |
