summaryrefslogtreecommitdiffstats
path: root/src/main/java/com
diff options
context:
space:
mode:
authorLMBishop <13875753+LMBishop@users.noreply.github.com>2021-02-07 16:27:21 +0000
committerLMBishop <13875753+LMBishop@users.noreply.github.com>2021-02-07 16:27:21 +0000
commitc587aebdee75d674711c7d36fa5e11c29289f33c (patch)
tree57666fdd103b696dd876faddac2751da2058f5af /src/main/java/com
parentfe170441fcf0941e76f1e009d8bd1063c960d7a1 (diff)
Add operator to PAPI evaluate
- Closes #142
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/PlaceholderAPIEvaluateTaskType.java88
1 files changed, 85 insertions, 3 deletions
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<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
+ ArrayList<QuestsConfigLoader.ConfigProblem> 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<ConfigValue> getCreatorConfigValues() {
return creatorConfigValues;
}
+
+ enum Operator {
+ GREATER_THAN,
+ LESS_THAN,
+ GREATER_THAN_OR_EQUAL_TO,
+ LESS_THAN_OR_EQUAL_TO;
+ }
}