From 657fba46999cb37592890099010ae5e929d976af Mon Sep 17 00:00:00 2001 From: LMBishop <13875753+LMBishop@users.noreply.github.com> Date: Mon, 21 Jun 2021 13:18:14 +0100 Subject: Implement quest validation --- .../quests/bukkit/storage/MySqlStorageProvider.java | 11 ++++++++++- .../quests/bukkit/storage/YamlStorageProvider.java | 9 +++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java index fd473af6..59e463fd 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java @@ -4,6 +4,7 @@ import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile; import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress; +import com.leonardobishop.quests.common.quest.Quest; import com.leonardobishop.quests.common.storage.StorageProvider; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; @@ -127,6 +128,9 @@ public class MySqlStorageProvider implements StorageProvider { @Override public QuestProgressFile loadProgressFile(UUID uuid) { if (fault) return null; + Map presentQuests = new HashMap<>(plugin.getQuestManager().getQuests()); + boolean validateQuests = plugin.getQuestsConfig().getBoolean("options.verify-quest-exists-on-load", true); + QuestProgressFile questProgressFile = new QuestProgressFile(uuid, plugin); try (Connection connection = hikari.getConnection()) { plugin.getQuestsLogger().debug("Querying player " + uuid); @@ -142,6 +146,7 @@ public class MySqlStorageProvider implements StorageProvider { boolean completedBefore = rs.getBoolean(4); long completionDate = rs.getLong(5); + if (validateQuests && !presentQuests.containsKey(questId)) continue; QuestProgress questProgress = new QuestProgress(plugin, questId, completed, completedBefore, completionDate, uuid, started); questProgressMap.put(questId, questProgress); } @@ -187,7 +192,11 @@ public class MySqlStorageProvider implements StorageProvider { } QuestProgress linkedQuestProgress = questProgressMap.get(questId); - if (linkedQuestProgress == null) continue; // lost quest progress ? + if (linkedQuestProgress == null) continue; + if (validateQuests) { + if (!presentQuests.containsKey(questId)) continue; + if (presentQuests.get(questId).getTaskById(taskId) == null) continue; + } TaskProgress questProgress = new TaskProgress(linkedQuestProgress, taskId, progress, uuid, completed); linkedQuestProgress.addTaskProgress(questProgress); } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java index 75e271f9..800aff1a 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java @@ -4,12 +4,14 @@ import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile; import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress; +import com.leonardobishop.quests.common.quest.Quest; import com.leonardobishop.quests.common.storage.StorageProvider; import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; @@ -45,6 +47,9 @@ public class YamlStorageProvider implements StorageProvider { public QuestProgressFile loadProgressFile(UUID uuid) { ReentrantLock lock = lock(uuid); + Map presentQuests = new HashMap<>(plugin.getQuestManager().getQuests()); + boolean validateQuests = plugin.getQuestsConfig().getBoolean("options.verify-quest-exists-on-load", true); + QuestProgressFile questProgressFile = new QuestProgressFile(uuid, plugin); try { File directory = new File(plugin.getDataFolder() + File.separator + "playerdata"); @@ -60,6 +65,8 @@ public class YamlStorageProvider implements StorageProvider { boolean completedBefore = data.getBoolean("quest-progress." + id + ".completed-before"); long completionDate = data.getLong("quest-progress." + id + ".completion-date"); + if (validateQuests && !presentQuests.containsKey(id)) continue; + QuestProgress questProgress = new QuestProgress(plugin, id, completed, completedBefore, completionDate, uuid, started, true); if (data.isConfigurationSection("quest-progress." + id + ".task-progress")) { @@ -67,6 +74,8 @@ public class YamlStorageProvider implements StorageProvider { boolean taskCompleted = data.getBoolean("quest-progress." + id + ".task-progress." + taskid + ".completed"); Object taskProgression = data.get("quest-progress." + id + ".task-progress." + taskid + ".progress"); + if (validateQuests && presentQuests.get(id).getTaskById(taskid) == null) continue; + TaskProgress taskProgress = new TaskProgress(questProgress, taskid, taskProgression, uuid, taskCompleted, false); questProgress.addTaskProgress(taskProgress); } -- cgit v1.2.3-70-g09d2