aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrakenied <Krakenied1@gmail.com>2023-01-21 18:00:40 +0100
committerKrakenied <Krakenied1@gmail.com>2023-02-08 16:15:03 +0100
commitbf186c0aca0576c292ab88b8f2230a91a4bfc425 (patch)
tree33369205febc7172a3ca7dc48c2480291c375147
parentbc11bfd6be2bd4b3ba151707cc636c1d5a5b8131 (diff)
Additional material validation
Closes https://github.com/LMBishop/Quests/issues/445, https://github.com/LMBishop/Quests/issues/349
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BlockshearingTaskType.java2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketInteractionTaskType.java2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingTaskType.java2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingTaskType.java2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/InteractTaskType.java2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningTaskType.java2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java28
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/config/ConfigProblemDescriptions.java8
8 files changed, 37 insertions, 11 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BlockshearingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BlockshearingTaskType.java
index 1bf2b93b..8a960f4e 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BlockshearingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BlockshearingTaskType.java
@@ -23,7 +23,7 @@ public final class BlockshearingTaskType extends BukkitTaskType {
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount"));
- super.addConfigValidator(TaskUtils.useMaterialListConfigValidator(this, "block", "blocks"));
+ super.addConfigValidator(TaskUtils.useMaterialListConfigValidator(this, TaskUtils.MaterialListConfigValidatorMode.BLOCK, "block", "blocks"));
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketInteractionTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketInteractionTaskType.java
index afb7e71e..7415657f 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketInteractionTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BucketInteractionTaskType.java
@@ -19,7 +19,7 @@ public abstract class BucketInteractionTaskType extends BukkitTaskType {
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "bucket"));
- super.addConfigValidator(TaskUtils.useMaterialListConfigValidator(this, "bucket"));
+ super.addConfigValidator(TaskUtils.useMaterialListConfigValidator(this, TaskUtils.MaterialListConfigValidatorMode.ITEM, "bucket"));
}
public void onBucket(Player player, Material bucket, BukkitQuestsPlugin plugin) {
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingTaskType.java
index 32101bd1..1f6606ce 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingTaskType.java
@@ -23,7 +23,7 @@ public final class BuildingTaskType extends BukkitTaskType {
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount"));
- super.addConfigValidator(TaskUtils.useMaterialListConfigValidator(this, "block", "blocks"));
+ super.addConfigValidator(TaskUtils.useMaterialListConfigValidator(this, TaskUtils.MaterialListConfigValidatorMode.BLOCK, "block", "blocks"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "data"));
super.addConfigValidator(TaskUtils.useBooleanConfigValidator(this, "reverse-if-broken"));
super.addConfigValidator(TaskUtils.useBooleanConfigValidator(this, "use-similar-blocks"));
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingTaskType.java
index a9a26adb..e636694d 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FarmingTaskType.java
@@ -33,7 +33,7 @@ public final class FarmingTaskType extends BukkitTaskType {
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount"));
- super.addConfigValidator(TaskUtils.useMaterialListConfigValidator(this, "block", "blocks"));
+ super.addConfigValidator(TaskUtils.useMaterialListConfigValidator(this, TaskUtils.MaterialListConfigValidatorMode.BLOCK, "block", "blocks"));
super.addConfigValidator(TaskUtils.useAcceptedValuesConfigValidator(this, Arrays.asList("break", "harvest"), "mode"));
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/InteractTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/InteractTaskType.java
index 5f564373..b86e503b 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/InteractTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/InteractTaskType.java
@@ -29,7 +29,7 @@ public final class InteractTaskType extends BukkitTaskType {
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useItemStackConfigValidator(this, "item"));
- super.addConfigValidator(TaskUtils.useMaterialListConfigValidator(this, "block", "blocks"));
+ super.addConfigValidator(TaskUtils.useMaterialListConfigValidator(this, TaskUtils.MaterialListConfigValidatorMode.BLOCK, "block", "blocks"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "data"));
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningTaskType.java
index 52665b51..f1f4c363 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningTaskType.java
@@ -23,7 +23,7 @@ public final class MiningTaskType extends BukkitTaskType {
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount"));
- super.addConfigValidator(TaskUtils.useMaterialListConfigValidator(this, "block", "blocks"));
+ super.addConfigValidator(TaskUtils.useMaterialListConfigValidator(this, TaskUtils.MaterialListConfigValidatorMode.BLOCK, "block", "blocks"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "data"));
super.addConfigValidator(TaskUtils.useBooleanConfigValidator(this, "check-coreprotect"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "check-coreprotect-time"));
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java
index 3cb5b071..48114437 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java
@@ -416,6 +416,29 @@ public class TaskUtils {
};
}
+ public enum MaterialListConfigValidatorMode {
+ ANY {
+ @Override
+ public boolean isValid(Material material) {
+ return true;
+ }
+ },
+ BLOCK {
+ @Override
+ public boolean isValid(Material material) {
+ return material.isBlock();
+ }
+ },
+ ITEM {
+ @Override
+ public boolean isValid(Material material) {
+ return material.isItem();
+ }
+ };
+
+ public abstract boolean isValid(Material material);
+ }
+
/**
* Returns a config validator which checks if at least one value in the given
* paths is a valid list of materials.
@@ -432,7 +455,7 @@ public class TaskUtils {
* @param paths a list of valid paths for task
* @return config validator
*/
- public static TaskType.ConfigValidator useMaterialListConfigValidator(TaskType type, String... paths) {
+ public static TaskType.ConfigValidator useMaterialListConfigValidator(TaskType type, MaterialListConfigValidatorMode mode, String... paths) {
return (config, problems) -> {
for (String path : paths) {
Object configBlock = config.get(path);
@@ -451,7 +474,8 @@ public class TaskUtils {
for (String materialName : checkBlocks) {
String[] split = materialName.split(":");
- if (Material.getMaterial(String.valueOf(split[0])) == null) {
+ final Material material = Material.getMaterial(String.valueOf(split[0]));
+ if (material == null || !mode.isValid(material)) {
problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.WARNING,
ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(materialName),
ConfigProblemDescriptions.UNKNOWN_MATERIAL.getExtendedDescription(materialName),
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 2399b329..b16e2388 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
@@ -52,9 +52,11 @@ public enum ConfigProblemDescriptions {
"by their ID. The ID does not include the .yml<br>" +
"extension."
),
- UNKNOWN_MATERIAL("Material '%s' does not exist",
- "Material '%s' does not exist on the server.<br>" +
- "Please refer to the wiki for a list of javadocs<br>" +
+ UNKNOWN_MATERIAL("Material '%s' does not exist or is unsuitable",
+ "Material '%s' does not exist on the server<br>" +
+ "or is unsuitable to the chosen task type. Ensure that<br>" +
+ "the material is the adequate one for the specified<br>" +
+ "item or block. Please refer to the wiki for a list of javadocs<br>" +
"corresponding to your server version. Alternatively,<br>" +
"you can find the material list by searching for your<br>" +
"server version + 'Material ENUM'."