From c587aebdee75d674711c7d36fa5e11c29289f33c Mon Sep 17 00:00:00 2001 From: LMBishop <13875753+LMBishop@users.noreply.github.com> Date: Sun, 7 Feb 2021 16:27:21 +0000 Subject: Add operator to PAPI evaluate - Closes #142 --- .../dependent/PlaceholderAPIEvaluateTaskType.java | 88 +++++++++++++++++++++- 1 file changed, 85 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/PlaceholderAPIEvaluateTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/PlaceholderAPIEvaluateTaskType.java index 7b8848c9..639acbd5 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/PlaceholderAPIEvaluateTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/PlaceholderAPIEvaluateTaskType.java @@ -1,6 +1,7 @@ package com.leonardobishop.quests.quests.tasktypes.types.dependent; import com.leonardobishop.quests.Quests; +import com.leonardobishop.quests.QuestsConfigLoader; import com.leonardobishop.quests.api.QuestsAPI; import com.leonardobishop.quests.player.QPlayer; import com.leonardobishop.quests.player.questprogressfile.QuestProgress; @@ -12,12 +13,14 @@ import com.leonardobishop.quests.quests.tasktypes.ConfigValue; import com.leonardobishop.quests.quests.tasktypes.TaskType; import com.leonardobishop.quests.quests.tasktypes.TaskUtils; import me.clip.placeholderapi.PlaceholderAPI; +import net.objecthunter.exp4j.operator.Operator; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; public final class PlaceholderAPIEvaluateTaskType extends TaskType { @@ -29,6 +32,35 @@ public final class PlaceholderAPIEvaluateTaskType extends TaskType { super("placeholderapi_evaluate", "LMBishop", "Evaluate the result of a placeholder"); this.creatorConfigValues.add(new ConfigValue("placeholder", true, "The placeholder string (including %%).")); this.creatorConfigValues.add(new ConfigValue("evaluates", true, "What it should evaluate to be marked as complete.")); + this.creatorConfigValues.add(new ConfigValue("operator", false, "Comparison method.")); + } + + @Override + public List detectProblemsInConfig(String root, HashMap config) { + ArrayList problems = new ArrayList<>(); + TaskUtils.configValidateExists(root + ".placeholder", config.get("placeholder"), problems, "placeholder", super.getType()); + boolean evalExists = TaskUtils.configValidateExists(root + ".evaluates", config.get("evaluates"), problems, "evaluates", super.getType()); + + if (config.containsKey("operator")) { + String operatorStr = (String) config.get("operator"); + Operator operator = null; + try { + operator = Operator.valueOf(operatorStr); + } catch (IllegalArgumentException ex) { + problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING, + "Operator '" + operatorStr + "' does not exist.", root + ".operator")); + } + if (operator != null && evalExists) { + String evalStr = String.valueOf(config.get("evaluates")); + try { + Double.parseDouble(evalStr); + } catch (IllegalArgumentException ex) { + problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING, + "Numeric operator specified, but placeholder evaluation '" + evalStr + "' is not numeric.", root + ".evaluates")); + } + } + } + return problems; } @Override @@ -49,12 +81,55 @@ public final class PlaceholderAPIEvaluateTaskType extends TaskType { continue; } String placeholder = (String) task.getConfigValue("placeholder"); - String evaluates = (String) task.getConfigValue("evaluates"); - if (placeholder != null) { - if (PlaceholderAPI.setPlaceholders(player, placeholder).equals(evaluates)) { + String evaluates = String.valueOf(task.getConfigValue("evaluates")); + String configOperator = (String) task.getConfigValue("operator"); + Operator operator = null; + if (configOperator != null) { + try { + operator = Operator.valueOf(configOperator); + } catch (IllegalArgumentException ignored) { } + } + if (placeholder != null && evaluates != null) { + double numericEvaluates = 0; + if (operator != null) { + try { + numericEvaluates = Double.parseDouble(evaluates); + } catch (NumberFormatException ex) { + continue; + } + } + + String evaluated = PlaceholderAPI.setPlaceholders(player, placeholder); + if (operator == null && evaluated.equals(evaluates)) { taskProgress.setCompleted(true); + } else if (operator != null) { + double numericEvaluated; + try { + numericEvaluated = Double.parseDouble(evaluated); + } catch (NumberFormatException ex) { + continue; + } + switch (operator) { + case GREATER_THAN: + if (numericEvaluated > numericEvaluates) + taskProgress.setCompleted(true); + continue; + case LESS_THAN: + if (numericEvaluated < numericEvaluates) + taskProgress.setCompleted(true); + continue; + case GREATER_THAN_OR_EQUAL_TO: + if (numericEvaluated >= numericEvaluates) + taskProgress.setCompleted(true); + continue; + case LESS_THAN_OR_EQUAL_TO: + if (numericEvaluated <= numericEvaluates) + taskProgress.setCompleted(true); + continue; + } } } + } } } @@ -74,4 +149,11 @@ public final class PlaceholderAPIEvaluateTaskType extends TaskType { public List getCreatorConfigValues() { return creatorConfigValues; } + + enum Operator { + GREATER_THAN, + LESS_THAN, + GREATER_THAN_OR_EQUAL_TO, + LESS_THAN_OR_EQUAL_TO; + } } -- cgit v1.2.3-70-g09d2