From 2383bafc98ef9bb6cab36530ed579aa6ac724cb8 Mon Sep 17 00:00:00 2001 From: PikaMug <2267126+PikaMug@users.noreply.github.com> Date: Tue, 7 Sep 2021 16:27:57 -0400 Subject: [PATCH] Fix loss of custom obj progress after logout --- .../java/me/blackvein/quests/CustomObjective.java | 12 +++++++++--- .../implementation/file/SeparatedYamlStorage.java | 9 ++++----- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/main/src/main/java/me/blackvein/quests/CustomObjective.java b/main/src/main/java/me/blackvein/quests/CustomObjective.java index 29b2c35b4..6373c0947 100644 --- a/main/src/main/java/me/blackvein/quests/CustomObjective.java +++ b/main/src/main/java/me/blackvein/quests/CustomObjective.java @@ -162,18 +162,24 @@ public abstract class CustomObjective implements Listener { if (quester != null) { if (quester.hasCustomObjective(quest, obj.getName())) { int index = -1; + final LinkedList customObjCounts = quester.getQuestData(quest).customObjectiveCounts; for (final CustomObjective co : quester.getCurrentStage(quest).customObjectives) { index++; if (co.getName().equals(this.getName())) { - final int old = quester.getQuestData(quest).customObjectiveCounts.get(index); + if (index >= customObjCounts.size()) { + plugin.getLogger().severe("Index was larger than count for " + obj.getName() + " by " + + obj.getAuthor()); + continue; + } + final int old = customObjCounts.get(index); plugin.getQuester(player.getUniqueId()).getQuestData(quest).customObjectiveCounts .set(index, old + count); break; } } if (index > -1) { - final int progress = quester.getQuestData(quest).customObjectiveCounts.get(index); - final int goal = quester.getCurrentStage(quest).customObjectiveCounts.get(index); + final int progress = customObjCounts.get(index); + final int goal = customObjCounts.get(index); final ObjectiveType type = ObjectiveType.CUSTOM; final QuesterPreUpdateObjectiveEvent preEvent diff --git a/main/src/main/java/me/blackvein/quests/storage/implementation/file/SeparatedYamlStorage.java b/main/src/main/java/me/blackvein/quests/storage/implementation/file/SeparatedYamlStorage.java index 42a0c0287..137739810 100644 --- a/main/src/main/java/me/blackvein/quests/storage/implementation/file/SeparatedYamlStorage.java +++ b/main/src/main/java/me/blackvein/quests/storage/implementation/file/SeparatedYamlStorage.java @@ -161,11 +161,10 @@ public class SeparatedYamlStorage implements StorageImplementation { for (final String key : dataSec.getKeys(false)) { final ConfigurationSection questSec = dataSec.getConfigurationSection(key); final Quest quest = plugin.getQuestById(key) != null ? plugin.getQuestById(key) : plugin.getQuest(key); - Stage stage; if (quest == null || !quester.getCurrentQuests().containsKey(quest)) { continue; } - stage = quester.getCurrentStage(quest); + final Stage stage = quester.getCurrentStage(quest); if (stage == null) { quest.completeQuest(quester); plugin.getLogger().severe("[Quests] Invalid stage number for player: \"" + uniqueId + "\" on Quest \"" @@ -376,9 +375,9 @@ public class SeparatedYamlStorage implements StorageImplementation { final List passAmounts = questSec.getBooleanList("passwords-said"); quester.getQuestData(quest).setPasswordsSaid(new LinkedList(passAmounts)); } - if (questSec.contains("custom-objectives")) { - final List customObjCount = questSec.getIntegerList("custom-objective-counts"); - quester.getQuestData(quest).setCustomObjectiveCounts(new LinkedList(customObjCount)); + if (questSec.contains("custom-objective-counts")) { + final List customObjCounts = questSec.getIntegerList("custom-objective-counts"); + quester.getQuestData(quest).setCustomObjectiveCounts(new LinkedList(customObjCounts)); } if (questSec.contains("stage-delay")) { quester.getQuestData(quest).setDelayTimeLeft(questSec.getLong("stage-delay"));