From 6551b698274aaabb5b3b613cb076b55b2aa1d7ae Mon Sep 17 00:00:00 2001 From: LMBishop <13875753+LMBishop@users.noreply.github.com> Date: Wed, 6 Jul 2022 17:54:38 +0100 Subject: Refactor config validation for task types --- .../quests/common/config/ConfigProblemDescriptions.java | 3 ++- .../com/leonardobishop/quests/common/quest/Task.java | 12 ++++++++++++ .../leonardobishop/quests/common/tasktype/TaskType.java | 16 ++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) (limited to 'common/src/main/java/com') 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
" + "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 @@ -33,6 +33,18 @@ public class Task { return type; } + /** + * 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 * 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 quests = new ArrayList<>(); + private final List 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 getConfigValidators() { + return configValidators; + } + + @FunctionalInterface + public interface ConfigValidator { + void validateConfig(@NotNull HashMap taskConfig, @NotNull List problems); + } } -- cgit v1.2.3-70-g09d2