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')
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