diff options
Diffstat (limited to 'common')
2 files changed, 19 insertions, 0 deletions
diff --git a/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/QuestProgressFile.java b/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/QuestProgressFile.java index 4464a8af..e4b6add0 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/QuestProgressFile.java +++ b/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/QuestProgressFile.java @@ -18,6 +18,7 @@ import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; /** * Represents underlying quest progress for a player. @@ -106,6 +107,20 @@ public final class QuestProgressFile { } /** + * Passes all {@link Quest} a player has encountered (not to be confused with a collection of quest progress) to specified consumer. + */ + @Contract(pure = true) + public void getAllQuestsFromProgressConsumer(final QuestProgressFilter filter, final Consumer<Quest> consumer) { + for (final QuestProgress questProgress : this.questProgressMap.values()) { + final Quest quest = this.getQuestFromProgress(filter, questProgress); + + if (quest != null) { + consumer.accept(quest); + } + } + } + + /** * Returns count of all {@link Quest} a player has encountered. It is clearly equivalent to collection size of * {@link QuestProgressFile#getAllQuestsFromProgress(QuestProgressFilter)}, however it does not utilise a list * for counting quests so its performance is undeniably better. diff --git a/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/filters/QuestProgressFilter.java b/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/filters/QuestProgressFilter.java index 41af049c..d31625b8 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/filters/QuestProgressFilter.java +++ b/common/src/main/java/com/leonardobishop/quests/common/player/questprogressfile/filters/QuestProgressFilter.java @@ -17,6 +17,10 @@ public interface QuestProgressFilter { QuestProgressFilter DOES_COUNT_TOWARDS_COMPLETED = new DoesCountTowardsCompletedQuestProgressFilter(); QuestProgressFilter DOES_COUNT_TOWARDS_LIMIT = new DoesCountTowardsLimitQuestProgressFilter(); + // Counting + QuestProgressFilter COMPLETED_COUNT = new ConjunctionQuestProgressFilter(QuestProgressFilter.COMPLETED, QuestProgressFilter.DOES_COUNT_TOWARDS_COMPLETED); + QuestProgressFilter COMPLETED_BEFORE_COUNT = new ConjunctionQuestProgressFilter(QuestProgressFilter.COMPLETED_BEFORE, QuestProgressFilter.DOES_COUNT_TOWARDS_COMPLETED); + @Contract(pure = true) default boolean matchesQuest(final @NotNull Quest quest) { return true; |
