Skip to content

Commit

Permalink
Additional material validation
Browse files Browse the repository at this point in the history
Closes #445, #349
  • Loading branch information
Krakenied committed Feb 8, 2023
1 parent bc11bfd commit bf186c0
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 11 deletions.
Expand Up @@ -23,7 +23,7 @@ public BlockshearingTaskType(BukkitQuestsPlugin plugin) {

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)
Expand Down
Expand Up @@ -19,7 +19,7 @@ public BucketInteractionTaskType(@NotNull String type, String author, String des
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) {
Expand Down
Expand Up @@ -23,7 +23,7 @@ public BuildingTaskType(BukkitQuestsPlugin plugin) {

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"));
Expand Down
Expand Up @@ -33,7 +33,7 @@ public FarmingTaskType(BukkitQuestsPlugin plugin) {

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"));
}

Expand Down
Expand Up @@ -29,7 +29,7 @@ public InteractTaskType(BukkitQuestsPlugin plugin) {
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"));
}

Expand Down
Expand Up @@ -23,7 +23,7 @@ public MiningTaskType(BukkitQuestsPlugin plugin) {

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"));
Expand Down
Expand Up @@ -416,6 +416,29 @@ public static TaskType.ConfigValidator useBooleanConfigValidator(TaskType type,
};
}

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.
Expand All @@ -432,7 +455,7 @@ public static TaskType.ConfigValidator useBooleanConfigValidator(TaskType type,
* @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);
Expand All @@ -451,7 +474,8 @@ public static TaskType.ConfigValidator useMaterialListConfigValidator(TaskType t

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),
Expand Down
Expand Up @@ -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'."
Expand Down

0 comments on commit bf186c0

Please sign in to comment.