From 033ae8feea3774d5bd89493d697c02a9620bd060 Mon Sep 17 00:00:00 2001 From: Krakenied Date: Sat, 6 Jul 2024 23:07:03 +0200 Subject: Rewrite trackNextQuest so autostart Quests are tracked properly Closes https://github.com/LMBishop/Quests/issues/570 --- .../questcontroller/NormalQuestController.java | 37 +++++++++++++++------- 1 file changed, 26 insertions(+), 11 deletions(-) (limited to 'bukkit/src/main/java/com') diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java index 6f6a63c8..60aca725 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java @@ -418,19 +418,34 @@ public class NormalQuestController implements QuestController { return startedQuests; } - private void trackNextQuest(QPlayer qPlayer, Quest previousQuest) { - if (config.getBoolean("options.quest-autotrack") - && (previousQuest == null || !(previousQuest.isRepeatable() && !previousQuest.isCooldownEnabled()))) { - Quest nextQuest; - if (qPlayer.getQuestProgressFile().getStartedQuests().size() > 0) { - nextQuest = qPlayer.getQuestProgressFile().getStartedQuests().get(0); - qPlayer.trackQuest(nextQuest); + private void trackNextQuest(final @NotNull QPlayer qPlayer, final @Nullable Quest previousQuest) { + final boolean autotrack = this.config.getBoolean("options.quest-autotrack"); + + if (!autotrack) { + qPlayer.trackQuest(null); + return; + } + + if (previousQuest == null || !previousQuest.isRepeatable() || previousQuest.isCooldownEnabled()) { + final List startedQuests = qPlayer.getQuestProgressFile().getStartedQuests(); + final boolean autostart = this.config.getBoolean("options.quest-autostart"); + + final Quest nextQuest; + if (!startedQuests.isEmpty()) { + nextQuest = startedQuests.getFirst(); + } else if (autostart) { + final List effectiveStartedQuests = qPlayer.getEffectiveStartedQuests(1); + + if (!effectiveStartedQuests.isEmpty()) { + nextQuest = effectiveStartedQuests.getFirst(); + } else { + nextQuest = null; + } } else { - qPlayer.trackQuest(null); + nextQuest = null; } - } else if (!config.getBoolean("options.quest-autotrack")) { - qPlayer.trackQuest(null); + + qPlayer.trackQuest(nextQuest); } } - } -- cgit v1.2.3-70-g09d2