From c01d401821735064b7678c5962f67c46a9129edb Mon Sep 17 00:00:00 2001 From: LMBishop <13875753+LMBishop@users.noreply.github.com> Date: Sun, 29 Dec 2019 18:50:10 +0000 Subject: Fixed quest progress not saving - Closes #56 - TaskProgress now has a new field 'modified' as the QuestProgress 'modified' field is initialised false when generated using the generate blank function. - 'modified' should be set to true in QuestProgress when it is manually started, but the auto start option bypasses this altogether which results in the plugin not saving QuestProgress as it is considered unmodified even if progress has been made. - 'modified' fields in TaskProgress should fix this issue. --- .../leonardobishop/quests/player/QPlayerManager.java | 2 +- .../quests/player/questprogressfile/QuestProgress.java | 17 +++++++++++++---- .../player/questprogressfile/QuestProgressFile.java | 11 ++++++++++- .../quests/player/questprogressfile/TaskProgress.java | 16 ++++++++++++++++ 4 files changed, 40 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java b/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java index 8230f412..27790f76 100644 --- a/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java +++ b/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java @@ -62,7 +62,7 @@ public class QPlayerManager { boolean taskCompleted = data.getBoolean("quest-progress." + id + ".task-progress." + taskid + ".completed"); Object taskProgression = data.get("quest-progress." + id + ".task-progress." + taskid + ".progress"); - TaskProgress taskProgress = new TaskProgress(taskid, taskProgression, uuid, taskCompleted); + TaskProgress taskProgress = new TaskProgress(taskid, taskProgression, uuid, taskCompleted, false); questProgress.addTaskProgress(taskProgress); } diff --git a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgress.java b/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgress.java index 26326269..fe9108ce 100644 --- a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgress.java +++ b/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgress.java @@ -92,15 +92,24 @@ public class QuestProgress { } public void repairTaskProgress(String taskid) { - TaskProgress taskProgress = new TaskProgress(taskid, null, player, false); + TaskProgress taskProgress = new TaskProgress(taskid, null, player, false, false); this.addTaskProgress(taskProgress); } public boolean isWorthSaving() { - return modified; + if (modified) return true; + else { + for (TaskProgress progress : this.taskProgress.values()) { + if (progress.isModified()) return true; + } + return false; + } } - public void setWorthSaving(boolean modified) { - this.modified = modified; + public void resetModified() { + this.modified = false; + for (TaskProgress progress : this.taskProgress.values()) { + progress.setModified(false); + } } } diff --git a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java b/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java index 42251f27..21e5c61b 100644 --- a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java +++ b/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java @@ -9,6 +9,7 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; import java.io.File; import java.io.IOException; @@ -265,7 +266,7 @@ public class QuestProgressFile { Quest quest = plugin.getQuestManager().getQuestById(questid); QuestProgress questProgress = new QuestProgress(quest.getId(), false, false, 0, player, false, false); for (Task task : quest.getTasks()) { - TaskProgress taskProgress = new TaskProgress(task.getId(), null, player, false); + TaskProgress taskProgress = new TaskProgress(task.getId(), null, player, false, false); questProgress.addTaskProgress(taskProgress); } @@ -309,6 +310,14 @@ public class QuestProgressFile { try { data.save(file); + new BukkitRunnable() { + @Override + public void run() { + for (QuestProgress questProgress : questProgress.values()) { + questProgress.resetModified(); + } + } + }.runTask(plugin); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/com/leonardobishop/quests/player/questprogressfile/TaskProgress.java b/src/main/java/com/leonardobishop/quests/player/questprogressfile/TaskProgress.java index d85c8599..a4c71460 100644 --- a/src/main/java/com/leonardobishop/quests/player/questprogressfile/TaskProgress.java +++ b/src/main/java/com/leonardobishop/quests/player/questprogressfile/TaskProgress.java @@ -4,6 +4,7 @@ import java.util.UUID; public class TaskProgress { + private boolean modified; private String taskid; private Object progress; private UUID player; @@ -15,6 +16,11 @@ public class TaskProgress { this.completed = completed; } + public TaskProgress(String taskid, Object progress, UUID player, boolean completed, boolean modified) { + this(taskid, progress, player, completed); + this.modified = modified; + } + public String getTaskId() { return taskid; } @@ -25,6 +31,7 @@ public class TaskProgress { public void setProgress(Object progress) { this.progress = progress; + this.modified = true; } public UUID getPlayer() { @@ -37,5 +44,14 @@ public class TaskProgress { public void setCompleted(boolean complete) { this.completed = complete; + this.modified = true; + } + + public boolean isModified() { + return modified; + } + + public void setModified(boolean modified) { + this.modified = modified; } } -- cgit v1.2.3-70-g09d2