diff options
Diffstat (limited to 'src/main/java/com')
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.")); } |
