From 7c8fa3cb45077fc4b45aaf2cf0fe40f77feaa6c7 Mon Sep 17 00:00:00 2001 From: LMBishop <13875753+LMBishop@users.noreply.github.com> Date: Tue, 14 Apr 2020 23:18:53 +0100 Subject: Made timings of certain runnables configurable --- .../com/leonardobishop/quests/QuestCompleter.java | 46 +++++++++++++++++ .../java/com/leonardobishop/quests/Quests.java | 60 ++++++++-------------- 2 files changed, 68 insertions(+), 38 deletions(-) create mode 100644 src/main/java/com/leonardobishop/quests/QuestCompleter.java (limited to 'src/main/java') diff --git a/src/main/java/com/leonardobishop/quests/QuestCompleter.java b/src/main/java/com/leonardobishop/quests/QuestCompleter.java new file mode 100644 index 00000000..5a3f6501 --- /dev/null +++ b/src/main/java/com/leonardobishop/quests/QuestCompleter.java @@ -0,0 +1,46 @@ +package com.leonardobishop.quests; + +import com.leonardobishop.quests.player.QPlayer; +import com.leonardobishop.quests.player.questprogressfile.QuestProgress; +import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile; +import com.leonardobishop.quests.player.questprogressfile.TaskProgress; +import com.leonardobishop.quests.quests.Quest; +import com.leonardobishop.quests.quests.Task; + +import java.util.Map; + +public class QuestCompleter implements Runnable { + + private final Quests plugin; + + public QuestCompleter(Quests plugin) { + this.plugin = plugin; + } + + @Override + public void run() { + for (QPlayer qPlayer : plugin.getPlayerManager().getQPlayers()) { + if (qPlayer.isOnlyDataLoaded()) { + continue; + } + QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); + for (Map.Entry entry : plugin.getQuestManager().getQuests().entrySet()) { + Quest quest = entry.getValue(); + QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (questProgressFile.hasStartedQuest(quest)) { + boolean complete = true; + for (Task task : quest.getTasks()) { + TaskProgress taskProgress; + if ((taskProgress = questProgress.getTaskProgress(task.getId())) == null || !taskProgress.isCompleted()) { + complete = false; + break; + } + } + if (complete) { + questProgressFile.completeQuest(quest); + } + } + } + } + } +} diff --git a/src/main/java/com/leonardobishop/quests/Quests.java b/src/main/java/com/leonardobishop/quests/Quests.java index 32178d5d..98aded26 100644 --- a/src/main/java/com/leonardobishop/quests/Quests.java +++ b/src/main/java/com/leonardobishop/quests/Quests.java @@ -9,12 +9,7 @@ import com.leonardobishop.quests.events.EventPlayerLeave; import com.leonardobishop.quests.obj.Messages; import com.leonardobishop.quests.player.QPlayer; import com.leonardobishop.quests.player.QPlayerManager; -import com.leonardobishop.quests.player.questprogressfile.QuestProgress; -import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile; -import com.leonardobishop.quests.player.questprogressfile.TaskProgress; -import com.leonardobishop.quests.quests.Quest; import com.leonardobishop.quests.quests.QuestManager; -import com.leonardobishop.quests.quests.Task; import com.leonardobishop.quests.quests.tasktypes.TaskType; import com.leonardobishop.quests.quests.tasktypes.TaskTypeManager; import com.leonardobishop.quests.quests.tasktypes.types.*; @@ -32,6 +27,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitTask; import java.io.*; import java.util.ArrayList; @@ -48,6 +44,8 @@ public class Quests extends JavaPlugin { private static Title title; private boolean brokenConfig = false; private QuestsConfigLoader questsConfigLoader; + private BukkitTask questCompleterTask; + private BukkitTask questAutosaveTask; public static Quests get() { return (Quests) Bukkit.getPluginManager().getPlugin("Quests"); @@ -121,6 +119,7 @@ public class Quests extends JavaPlugin { questsConfigLoader = new QuestsConfigLoader(this); + // register task types after the server has fully started Bukkit.getScheduler().runTask(this, () -> { taskTypeManager.registerTaskType(new MiningTaskType()); taskTypeManager.registerTaskType(new MiningCertainTaskType()); @@ -164,6 +163,7 @@ public class Quests extends JavaPlugin { taskTypeManager.registerTaskType(new MythicMobsKillingType()); } + taskTypeManager.closeRegistrations(); reloadQuests(); if (!questsConfigLoader.getBrokenFiles().isEmpty()) { this.getLogger().warning("Quests has failed to load the following files:"); @@ -177,39 +177,6 @@ public class Quests extends JavaPlugin { qPlayerManager.loadPlayer(player.getUniqueId(), false); } }); - Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> { - for (QPlayer qPlayer : qPlayerManager.getQPlayers()) { - if (qPlayer.isOnlyDataLoaded()) { - continue; - } - qPlayer.getQuestProgressFile().saveToDisk(false); - } - }, 12000L, 12000L); - Bukkit.getScheduler().runTaskTimer(this, () -> { - for (QPlayer qPlayer : qPlayerManager.getQPlayers()) { - if (qPlayer.isOnlyDataLoaded()) { - continue; - } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Map.Entry entry : this.getQuestManager().getQuests().entrySet()) { - Quest quest = entry.getValue(); - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); - if (questProgressFile.hasStartedQuest(quest)) { - boolean complete = true; - for (Task task : quest.getTasks()) { - TaskProgress taskProgress; - if ((taskProgress = questProgress.getTaskProgress(task.getId())) == null || !taskProgress.isCompleted()) { - complete = false; - break; - } - } - if (complete) { - questProgressFile.completeQuest(quest); - } - } - } - } - }, 10 * 20L, 10 * 20L); //Data is saved every 10 seconds in case of crash; the player data is also saved when the player leaves the server Bukkit.getScheduler().runTaskAsynchronously(this, () -> { updater = new Updater(this); updater.check(); @@ -232,6 +199,23 @@ public class Quests extends JavaPlugin { } public void reloadQuests() { + if (questAutosaveTask != null && !questAutosaveTask.isCancelled()) { + questAutosaveTask.cancel(); + } + questAutosaveTask = Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> { + for (QPlayer qPlayer : qPlayerManager.getQPlayers()) { + if (qPlayer.isOnlyDataLoaded()) { + continue; + } + qPlayer.getQuestProgressFile().saveToDisk(false); + } + }, this.getConfig().getLong("options.performance-tweaking.quest-autocomplete-interval"), this.getConfig().getLong("options.performance-tweaking.quest-autocomplete-interval")); + if (questCompleterTask != null && !questCompleterTask.isCancelled()) { + questCompleterTask.cancel(); + } + questCompleterTask = Bukkit.getScheduler().runTaskTimer(this, new QuestCompleter(this), 20, + this.getConfig().getLong("options.performance-tweaking.quest-completer-poll-interval")); + questManager.getQuests().clear(); questManager.getCategories().clear(); taskTypeManager.resetTaskTypes(); -- cgit v1.2.3-70-g09d2