From 663ad97694a7f02d18734a0d5ab84ab669019a64 Mon Sep 17 00:00:00 2001 From: Des Herriott Date: Tue, 19 Nov 2024 12:24:50 +0000 Subject: [PATCH] fix: don't do Quest#onCompleted work twice Can happen if a quest has multiple optional tasks where completing one task completes the quest. https://github.com/FTBTeam/FTB-Mods-Issues/issues/1390 --- .../dev/ftb/mods/ftbquests/quest/Quest.java | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/common/src/main/java/dev/ftb/mods/ftbquests/quest/Quest.java b/common/src/main/java/dev/ftb/mods/ftbquests/quest/Quest.java index 2362b4af..129904ad 100644 --- a/common/src/main/java/dev/ftb/mods/ftbquests/quest/Quest.java +++ b/common/src/main/java/dev/ftb/mods/ftbquests/quest/Quest.java @@ -542,20 +542,23 @@ public void onStarted(QuestProgressEventData data) { @Override public void onCompleted(QuestProgressEventData data) { - data.setCompleted(id); - ObjectCompletedEvent.QUEST.invoker().act(new ObjectCompletedEvent.QuestEvent(data.withObject(this))); + if (!data.getTeamData().isCompleted(this)) { + // it's possible this quest is already completed, if it has one or more optional tasks + data.setCompleted(id); + ObjectCompletedEvent.QUEST.invoker().act(new ObjectCompletedEvent.QuestEvent(data.withObject(this))); - if (!disableToast) { - data.notifyPlayers(id); - } + if (!disableToast) { + data.notifyPlayers(id); + } - if (chapter.isCompletedRaw(data.getTeamData())) { - chapter.onCompleted(data.withObject(chapter)); - } + if (chapter.isCompletedRaw(data.getTeamData())) { + chapter.onCompleted(data.withObject(chapter)); + } - data.getTeamData().checkAutoCompletion(this); + data.getTeamData().checkAutoCompletion(this); - checkForDependantCompletion(data.getTeamData()); + checkForDependantCompletion(data.getTeamData()); + } } private void checkForDependantCompletion(TeamData data) {