summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLMBishop <13875753+LMBishop@users.noreply.github.com>2020-04-14 23:18:53 +0100
committerLMBishop <13875753+LMBishop@users.noreply.github.com>2020-04-14 23:19:50 +0100
commit7c8fa3cb45077fc4b45aaf2cf0fe40f77feaa6c7 (patch)
tree4dec1b8060814afc5c66eaddde0f9edc2d9a879d /src
parent380104a79df89ba9b11689199edc08d5f5a698f1 (diff)
Made timings of certain runnables configurable
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/leonardobishop/quests/QuestCompleter.java46
-rw-r--r--src/main/java/com/leonardobishop/quests/Quests.java60
-rw-r--r--src/main/resources/config.yml3
3 files changed, 71 insertions, 38 deletions
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<String, Quest> 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<String, Quest> 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();
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 0193f33d..ca22230d 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -143,6 +143,9 @@ options:
gui-hide-categories-nopermission: false
# Make it so players do not have to start quest themselves
quest-autostart: false
+ performance-tweaking: # The following are measured in server ticks, multiply SECONDS by 20 to get the number of ticks.
+ quest-completer-poll-interval: 100 # how frequently Quests should check if quests have been completed (def=100 - 5 seconds) - increase this value if you are struggling with performance
+ quest-autosave-interval: 12000 # how frequently online players data will be autosaved (def=12000 - 10 minutes)
# This switches up the entire quest system.
# By enabling daily-quests, players will no longer be presented with the standard Quest GUI.