aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit
diff options
context:
space:
mode:
Diffstat (limited to 'bukkit')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java11
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java9
2 files changed, 19 insertions, 1 deletions
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<String, Quest> 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<String, Quest> 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);
}