summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
authorLMBishop <13875753+LMBishop@users.noreply.github.com>2021-01-07 18:59:04 +0000
committerLMBishop <13875753+LMBishop@users.noreply.github.com>2021-01-07 18:59:04 +0000
commit84367ac6a17162a44a44cdb862855ca23902990b (patch)
tree172903c2c969bc502ea60cee55297ab496d90b72 /src/main/java
parent487af81e43f99b99f626f75a73efee3973db65eb (diff)
Refactored some of the PlaceholderAPI code
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java165
-rw-r--r--src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java78
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlaceholderAPIEvaluateTaskType.java2
3 files changed, 143 insertions, 102 deletions
diff --git a/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java b/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java
index 22fbf4db..f9acb3bb 100644
--- a/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java
+++ b/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java
@@ -4,6 +4,8 @@ import com.leonardobishop.quests.Quests;
import com.leonardobishop.quests.api.enums.QuestStartResult;
import com.leonardobishop.quests.obj.Options;
import com.leonardobishop.quests.player.QPlayer;
+import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
import com.leonardobishop.quests.quests.Category;
import com.leonardobishop.quests.quests.Quest;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
@@ -41,6 +43,8 @@ public class QuestsPlaceholders extends PlaceholderExpansion {
return true;
}
+ //TODO maybe cache these results for a bit? all these calls could be heavy
+
@Override
public String onPlaceholderRequest(Player p, String params) {
if (p == null || !p.isOnline())
@@ -49,22 +53,23 @@ public class QuestsPlaceholders extends PlaceholderExpansion {
String[] key = params.split("_", 5);
QPlayer questP = this.plugin.getPlayerManager().getPlayer(p.getUniqueId());
- if (key[0].equals("all") || key[0].equals("completed") || key[0].equals("completedBefore") || key[0].equals("started") || key[0].equals("categories")) {
+ if (key[0].equals("all") || key[0].equals("completed") || key[0].equals("completedBefore")
+ || key[0].equals("completedbefore") || key[0].equals("started") || key[0].equals("categories")) {
if (key.length == 1) {
switch (key[0]) {
case "all":
return String.valueOf(this.plugin.getQuestManager().getQuests().size());
case "completed":
- return String.valueOf(questP.getQuestProgressFile().getQuestsProgress("completed").size());
+ return String.valueOf(questP.getQuestProgressFile().getAllQuestsFromProgress(QuestProgressFile.QuestsProgressFilter.COMPLETED).size());
+ case "completedbefore":
case "completedBefore":
- return String.valueOf(questP.getQuestProgressFile().getQuestsProgress("completedBefore").size());
+ return String.valueOf(questP.getQuestProgressFile().getAllQuestsFromProgress(QuestProgressFile.QuestsProgressFilter.COMPLETED_BEFORE).size());
case "started":
- return String.valueOf(questP.getQuestProgressFile().getQuestsProgress("started").size());
+ return String.valueOf(questP.getQuestProgressFile().getAllQuestsFromProgress(QuestProgressFile.QuestsProgressFilter.STARTED).size());
case "categories":
return String.valueOf(this.plugin.getQuestManager().getCategories().size());
}
- }
- if (key[1].equals("list") || key[1].equals("l")) {
+ } else if (key[1].equals("list") || key[1].equals("l")) {
String separator = ",";
if (!(key.length == 2)) {
separator = key[2];
@@ -77,19 +82,20 @@ public class QuestsPlaceholders extends PlaceholderExpansion {
return String.join(separator, this.plugin.getQuestManager().getCategories().toString());
case "completed":
List<String> listCompleted = new ArrayList<>();
- for (Quest qCompleted : questP.getQuestProgressFile().getQuestsProgress("completed")) {
+ for (Quest qCompleted : questP.getQuestProgressFile().getAllQuestsFromProgress(QuestProgressFile.QuestsProgressFilter.COMPLETED)) {
listCompleted.add(qCompleted.getDisplayNameStripped());
}
return String.join(separator, listCompleted);
+ case "completedbefore":
case "completedBefore":
List<String> listCompletedBefore = new ArrayList<>();
- for (Quest qCompletedBefore : questP.getQuestProgressFile().getQuestsProgress("completedBefore")) {
+ for (Quest qCompletedBefore : questP.getQuestProgressFile().getAllQuestsFromProgress(QuestProgressFile.QuestsProgressFilter.COMPLETED_BEFORE)) {
listCompletedBefore.add(qCompletedBefore.getDisplayNameStripped());
}
return String.join(separator, listCompletedBefore);
case "started":
List<String> listStarted = new ArrayList<>();
- for (Quest qStarted : questP.getQuestProgressFile().getQuestsProgress("started")) {
+ for (Quest qStarted : questP.getQuestProgressFile().getAllQuestsFromProgress(QuestProgressFile.QuestsProgressFilter.STARTED)) {
listStarted.add(qStarted.getDisplayNameStripped());
}
return String.join(separator, listStarted);
@@ -99,70 +105,68 @@ public class QuestsPlaceholders extends PlaceholderExpansion {
}
if (key[0].startsWith("quest:") || key[0].startsWith("q:")) {
- Quest questId = this.plugin.getQuestManager().getQuestById(key[0].substring(key[0].lastIndexOf(":") + 1));
-
- if (key[1].equals("started") || key[1].equals("s")) {
- if (questId != null && questP.getQuestProgressFile().getQuestProgress(questId).isStarted()) {
+ Quest quest = this.plugin.getQuestManager().getQuestById(key[0].substring(key[0].lastIndexOf(":") + 1));
+ if (key.length < 2) {
+ if (quest != null) {
+ return quest.getId();
+ } else {
+ return "null";
+ }
+ } else if (key[1].equals("started") || key[1].equals("s")) {
+ if (quest != null && questP.getQuestProgressFile().getQuestProgress(quest).isStarted()) {
return "true";
}
return "false";
- }
- if (key[1].equals("completed") || key[1].equals("c")) {
- if (questId != null && questP.getQuestProgressFile().getQuestProgress(questId).isCompleted()) {
+ } else if (key[1].equals("completed") || key[1].equals("c")) {
+ if (quest != null && questP.getQuestProgressFile().getQuestProgress(quest).isCompleted()) {
return "true";
}
return "false";
- }
- if (key[1].equals("completedBefore") || key[1].equals("cB")) {
- if (questId != null && questP.getQuestProgressFile().getQuestProgress(questId).isCompletedBefore()) {
+ } else if (key[1].equals("completedbefore") || key[1].equals("completedBefore") || key[1].equals("cB")) {
+ if (quest != null && questP.getQuestProgressFile().getQuestProgress(quest).isCompletedBefore()) {
return "true";
}
return "false";
- }
- if (key[1].equals("completionDate")) {
- if (questId != null && questP.getQuestProgressFile().getQuestProgress(questId).isCompleted()) {
- SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
- return sdf.format(questP.getQuestProgressFile().getQuestProgress(questId).getCompletionDate());
+ } else if (key[1].equals("completiondate") || key[1].equals("completionDate")) {
+ if (quest != null && questP.getQuestProgressFile().getQuestProgress(quest).isCompleted()) {
+ SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); //TODO make configurable for all our american friends
+ return sdf.format(questP.getQuestProgressFile().getQuestProgress(quest).getCompletionDate());
}
return "Never";
- }
- if (key[1].equals("cooldown")) {
- if (questId != null && questP.getQuestProgressFile().getQuestProgress(questId).isCompleted()) {
- String time = this.plugin.convertToFormat(TimeUnit.SECONDS.convert(questP.getQuestProgressFile().getCooldownFor(questId), TimeUnit.MILLISECONDS));
+ } else if (key[1].equals("cooldown")) {
+ if (quest != null && questP.getQuestProgressFile().getQuestProgress(quest).isCompleted()) {
+ String time = this.plugin.convertToFormat(TimeUnit.SECONDS.convert(questP.getQuestProgressFile().getCooldownFor(quest), TimeUnit.MILLISECONDS));
if (time.startsWith("-")) {
return "0";
}
return time;
}
return "0";
- }
- if (key[1].equals("canAccept")) {
- if (questId != null && questP.getQuestProgressFile().canStartQuest(questId) == QuestStartResult.QUEST_SUCCESS) {
+ } else if (key[1].equals("canaccept") || key[1].equals("canAccept")) {
+ if (quest != null && questP.getQuestProgressFile().canStartQuest(quest) == QuestStartResult.QUEST_SUCCESS) {
return "true";
}
return "false";
- }
- if (key[1].equals("meetsRequirements")) {
- if (questId != null && questP.getQuestProgressFile().hasMetRequirements(questId)) {
+ } else if (key[1].equals("meetsrequirements") || key[1].equals("meetsRequirements")) {
+ if (quest != null && questP.getQuestProgressFile().hasMetRequirements(quest)) {
return "true";
}
return "false";
- }
- if (key[1].startsWith("task") || key[1].startsWith("t")) {
+ } else if (key[1].startsWith("task") || key[1].startsWith("t")) {
String[] t = key[1].split(":");
if (key[2].equals("progress") || key[2].equals("p")) {
- if (questId == null || questP.getQuestProgressFile().getQuestProgress(questId).getTaskProgress(t[1]).getProgress() == null) {
+ if (quest == null || questP.getQuestProgressFile().getQuestProgress(quest).getTaskProgress(t[1]).getProgress() == null) {
return "0";
}
- return String.valueOf(questP.getQuestProgressFile().getQuestProgress(questId).getTaskProgress(t[1]).getProgress());
- }
- if (key[2].equals("completed") || key[2].equals("c")) {
- if (questId == null || questP.getQuestProgressFile().getQuestProgress(questId).getTaskProgress(t[1]).isCompleted()) {
+ return String.valueOf(questP.getQuestProgressFile().getQuestProgress(quest).getTaskProgress(t[1]).getProgress());
+ } else if (key[2].equals("completed") || key[2].equals("c")) {
+ if (quest == null || questP.getQuestProgressFile().getQuestProgress(quest).getTaskProgress(t[1]).isCompleted()) {
return "true";
}
return "false";
}
}
+
return "null";
}
@@ -170,24 +174,30 @@ public class QuestsPlaceholders extends PlaceholderExpansion {
if (!Options.CATEGORIES_ENABLED.getBooleanValue()) {
return "Categories Disabled";
}
- Category categoryId = this.plugin.getQuestManager().getCategoryById(key[0].substring(key[0].lastIndexOf(":") + 1));
- if (key.length == 2) {
+ Category category = this.plugin.getQuestManager().getCategoryById(key[0].substring(key[0].lastIndexOf(":") + 1));
+ if (key.length < 2) {
+ if (category != null) {
+ return category.getId();
+ } else {
+ return "null";
+ }
+ } else if (key.length == 2) {
switch (key[1]) {
case "all":
case "a":
- return String.valueOf(categoryId.getRegisteredQuestIds().size());
+ return String.valueOf(category.getRegisteredQuestIds().size());
case "completed":
case "c":
- return String.valueOf(getCategoryQuests(questP, categoryId, "completed").size());
+ return String.valueOf(getCategoryQuests(questP, category, QuestProgressFile.QuestsProgressFilter.COMPLETED).size());
+ case "completedbefore":
case "completedBefore":
case "cB":
- return String.valueOf(getCategoryQuests(questP, categoryId, "completedBefore").size());
+ return String.valueOf(getCategoryQuests(questP, category, QuestProgressFile.QuestsProgressFilter.COMPLETED_BEFORE).size());
case "started":
case "s":
- return String.valueOf(getCategoryQuests(questP, categoryId, "started").size());
+ return String.valueOf(getCategoryQuests(questP, category, QuestProgressFile.QuestsProgressFilter.STARTED).size());
}
- }
- if (key[2].equals("list") || key[2].equals("l")) {
+ } else if (key[2].equals("list") || key[2].equals("l")) {
String separator = ",";
if (!(key.length == 3)) {
separator = key[3];
@@ -197,28 +207,29 @@ public class QuestsPlaceholders extends PlaceholderExpansion {
case "all":
case "a":
List<String> listAll = new ArrayList<>();
- for (Quest qCompleted : getCategoryQuests(questP, categoryId, "all")) {
+ for (Quest qCompleted : getCategoryQuests(questP, category, QuestProgressFile.QuestsProgressFilter.ALL)) {
listAll.add(qCompleted.getDisplayNameStripped());
}
return String.join(separator, listAll);
case "completed":
case "c":
List<String> listCompleted = new ArrayList<>();
- for (Quest qCompleted : getCategoryQuests(questP, categoryId, "completed")) {
+ for (Quest qCompleted : getCategoryQuests(questP, category, QuestProgressFile.QuestsProgressFilter.COMPLETED)) {
listCompleted.add(qCompleted.getDisplayNameStripped());
}
return String.join(separator, listCompleted);
+ case "completedbefore":
case "completedBefore":
case "cB":
List<String> listCompletedBefore = new ArrayList<>();
- for (Quest qCompletedBefore : getCategoryQuests(questP, categoryId, "completedBefore")) {
+ for (Quest qCompletedBefore : getCategoryQuests(questP, category, QuestProgressFile.QuestsProgressFilter.COMPLETED_BEFORE)) {
listCompletedBefore.add(qCompletedBefore.getDisplayNameStripped());
}
return String.join(separator, listCompletedBefore);
case "started":
case "s":
List<String> listStarted = new ArrayList<>();
- for (Quest qStarted : getCategoryQuests(questP, categoryId, "started")) {
+ for (Quest qStarted : getCategoryQuests(questP, category, QuestProgressFile.QuestsProgressFilter.STARTED)) {
listStarted.add(qStarted.getDisplayNameStripped());
}
return String.join(separator, listStarted);
@@ -229,37 +240,27 @@ public class QuestsPlaceholders extends PlaceholderExpansion {
return null;
}
- public List<Quest> getCategoryQuests(QPlayer questP, Category category, String type) {
- List<Quest> CategoryQuests = new ArrayList<>();
- if (type.equals("all")) {
- for (String cQuests : category.getRegisteredQuestIds()) {
- CategoryQuests.add(plugin.getQuestManager().getQuestById(cQuests));
- }
- }
- if (type.equals("completed")) {
- for (String cQuests : category.getRegisteredQuestIds()) {
- Quest quest = plugin.getQuestManager().getQuestById(cQuests);
- if (questP.getQuestProgressFile().getQuestProgress(quest).isCompleted()) {
- CategoryQuests.add(quest);
- }
- }
- }
- if (type.equals("completedBefore")) {
- for (String cQuests : category.getRegisteredQuestIds()) {
- Quest quest = plugin.getQuestManager().getQuestById(cQuests);
- if (questP.getQuestProgressFile().getQuestProgress(quest).isCompletedBefore()) {
- CategoryQuests.add(quest);
- }
+ private List<Quest> getCategoryQuests(QPlayer questP, Category category, QuestProgressFile.QuestsProgressFilter filter) {
+ List<Quest> categoryQuests = new ArrayList<>();
+ for (String cQuests : category.getRegisteredQuestIds()) {
+ Quest quest = plugin.getQuestManager().getQuestById(cQuests);
+ if (quest == null) continue;
+
+ boolean condition = false;
+ if (filter == QuestProgressFile.QuestsProgressFilter.STARTED) {
+ condition = questP.getQuestProgressFile().getQuestProgress(quest).isStarted();
+ } else if (filter == QuestProgressFile.QuestsProgressFilter.COMPLETED_BEFORE) {
+ condition = questP.getQuestProgressFile().getQuestProgress(quest).isCompletedBefore();
+ } else if (filter == QuestProgressFile.QuestsProgressFilter.COMPLETED) {
+ condition = questP.getQuestProgressFile().getQuestProgress(quest).isCompleted();
+ } else if (filter == QuestProgressFile.QuestsProgressFilter.ALL) {
+ condition = true;
}
- }
- if (type.equals("started")) {
- for (String cQuests : category.getRegisteredQuestIds()) {
- Quest quest = plugin.getQuestManager().getQuestById(cQuests);
- if (questP.getQuestProgressFile().getQuestProgress(quest).isStarted()) {
- CategoryQuests.add(quest);
- }
+
+ if (condition) {
+ categoryQuests.add(quest);
}
}
- return CategoryQuests;
+ return categoryQuests;
}
}
diff --git a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java b/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java
index 2e751cd1..d3689185 100644
--- a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java
+++ b/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java
@@ -237,35 +237,75 @@ public class QuestProgressFile {
}
return startedQuests;
}
-
- public List<Quest> getQuestsProgress(String type) {
- List<Quest> QuestsProgress = new ArrayList<>();
- if (type.equals("completed")) {
- for (QuestProgress qProgress : questProgress.values()) {
- if (qProgress.isCompleted()) {
- QuestsProgress.add(plugin.getQuestManager().getQuestById(qProgress.getQuestId()));
- }
+
+ /**
+ * @return {@code List<Quest>} all quest
+ * @deprecated use {@code getAllQuestsFromProgress(QuestsProgressFilter)} instead
+ * <p>
+ * Returns all {@code Quest}s a player has encountered
+ * (not to be confused with a collection of quest progress)
+ */
+ @Deprecated
+ public List<Quest> getQuestsProgress(String filter) {
+ return getAllQuestsFromProgress(QuestsProgressFilter.fromLegacy(filter));
+ }
+
+ /**
+ * Returns all {@code Quest}s a player has encountered
+ * (not to be confused with a collection of quest progress)
+ *
+ * @return {@code List<Quest>} all quests
+ */
+ public List<Quest> getAllQuestsFromProgress(QuestsProgressFilter filter) {
+ List<Quest> questsProgress = new ArrayList<>();
+ for (QuestProgress qProgress : questProgress.values()) {
+ boolean condition = false;
+ if (filter == QuestsProgressFilter.STARTED) {
+ condition = qProgress.isStarted();
+ } else if (filter == QuestsProgressFilter.COMPLETED_BEFORE) {
+ condition = qProgress.isCompletedBefore();
+ } else if (filter == QuestsProgressFilter.COMPLETED) {
+ condition = qProgress.isCompleted();
+ } else if (filter == QuestsProgressFilter.ALL) {
+ condition = true;
}
- }
- if (type.equals("completedBefore")) {
- for (QuestProgress qProgress : questProgress.values()) {
- if (qProgress.isCompletedBefore()) {
- QuestsProgress.add(plugin.getQuestManager().getQuestById(qProgress.getQuestId()));
+ if (condition) {
+ Quest quest = plugin.getQuestManager().getQuestById(qProgress.getQuestId());
+ if (quest != null) {
+ questsProgress.add(quest);
}
}
}
- if (type.equals("started")) {
- for (QuestProgress qProgress : questProgress.values()) {
- if (qProgress.isStarted()) {
- QuestsProgress.add(plugin.getQuestManager().getQuestById(qProgress.getQuestId()));
- }
+ return questsProgress;
+ }
+
+ public enum QuestsProgressFilter {
+ ALL("all"),
+ COMPLETED("completed"),
+ COMPLETED_BEFORE("completedBefore"),
+ STARTED("started");
+
+ private String legacy;
+
+ QuestsProgressFilter(String legacy) {
+ this.legacy = legacy;
+ }
+
+ public static QuestsProgressFilter fromLegacy(String filter) {
+ for (QuestsProgressFilter filterEnum : QuestsProgressFilter.values()) {
+ if (filterEnum.getLegacy().equals(filter)) return filterEnum;
}
+ return QuestsProgressFilter.ALL;
+ }
+
+ public String getLegacy() {
+ return legacy;
}
- return QuestsProgress;
}
/**
* Gets all the quest progress that it has ever encountered.
+ *
* @return {@code Collection<QuestProgress>} all quest progresses
*/
public Collection<QuestProgress> getAllQuestProgress() {
diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlaceholderAPIEvaluateTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlaceholderAPIEvaluateTaskType.java
index 09297b23..f1aff597 100644
--- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlaceholderAPIEvaluateTaskType.java
+++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlaceholderAPIEvaluateTaskType.java
@@ -25,7 +25,7 @@ public final class PlaceholderAPIEvaluateTaskType extends TaskType {
private List<ConfigValue> creatorConfigValues = new ArrayList<>();
public PlaceholderAPIEvaluateTaskType() {
- super("placeholderapi_evaluate", "LMBishop", "Test if a player has a permission");
+ 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."));
}