aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLMBishop <13875753+LMBishop@users.noreply.github.com>2021-02-05 15:58:48 +0000
committerLMBishop <13875753+LMBishop@users.noreply.github.com>2021-02-05 15:58:48 +0000
commit1337e607bdc61690844cb1b6d7a3e7f0d9289d93 (patch)
treec954383af3660b93f4677ff7fa66bf07344d5f26 /src
parent9d155f39132b4a5d6211e936494240fcdb4459f7 (diff)
Update IridiumSkyBlock task type to new API
- Closes #139 - Made queue runnable interval configurable
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/leonardobishop/quests/Quests.java33
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/IridiumSkyblockValueType.java75
-rw-r--r--src/main/resources/config.yml2
3 files changed, 61 insertions, 49 deletions
diff --git a/src/main/java/com/leonardobishop/quests/Quests.java b/src/main/java/com/leonardobishop/quests/Quests.java
index d03d0a1b..3af376cc 100644
--- a/src/main/java/com/leonardobishop/quests/Quests.java
+++ b/src/main/java/com/leonardobishop/quests/Quests.java
@@ -52,6 +52,7 @@ public class Quests extends JavaPlugin {
private boolean brokenConfig = false;
private BukkitTask questAutosaveTask;
+ private BukkitTask questQueuePollTask;
public static Quests get() {
return (Quests) Bukkit.getPluginManager().getPlugin("Quests");
@@ -207,7 +208,6 @@ public class Quests extends JavaPlugin {
ignoreUpdates = new File(this.getDataFolder() + File.separator + "stfuQuestsUpdate").exists();
} catch (Throwable ignored) { }
- Bukkit.getScheduler().runTaskTimer(this, questCompleter, 1L, 1L);
updater = new Updater(this);
if (!ignoreUpdates) {
@@ -245,18 +245,39 @@ public class Quests extends JavaPlugin {
if (!isBrokenConfig()) {
autocompleteInterval = this.getConfig().getLong("options.performance-tweaking.quest-autocomplete-interval", 12000);
}
+ boolean autosaveTaskCancelled = true;
if (questAutosaveTask != null) {
try {
questAutosaveTask.cancel();
} catch (Exception ex) {
- questsLogger.debug("Cannot cancel quest autosave task");
+ questsLogger.debug("Cannot cancel and restart quest autosave task");
+ autosaveTaskCancelled = false;
}
}
- questAutosaveTask = Bukkit.getScheduler().runTaskTimer(this, () -> {
- for (QPlayer qPlayer : qPlayerManager.getQPlayers()) {
- qPlayer.getQuestProgressFile().saveToDisk(false);
+ if (autosaveTaskCancelled) {
+ questAutosaveTask = Bukkit.getScheduler().runTaskTimer(this, () -> {
+ for (QPlayer qPlayer : qPlayerManager.getQPlayers()) {
+ qPlayer.getQuestProgressFile().saveToDisk(false);
+ }
+ }, autocompleteInterval, autocompleteInterval);
+ }
+
+ boolean queuePollTaskCancelled = true;
+ long queueExecuteInterval = 1;
+ if (!isBrokenConfig()) {
+ queueExecuteInterval = this.getConfig().getLong("options.performance-tweaking.quest-queue-executor-interval", 1);
+ }
+ if (questQueuePollTask != null) {
+ try {
+ questQueuePollTask.cancel();
+ } catch (Exception ex) {
+ questsLogger.debug("Cannot cancel and restart quest autosave task");
+ queuePollTaskCancelled = false;
}
- }, autocompleteInterval, autocompleteInterval);
+ }
+ if (queuePollTaskCancelled) {
+ questQueuePollTask = Bukkit.getScheduler().runTaskTimer(this, questCompleter, queueExecuteInterval, queueExecuteInterval);
+ }
}
public ItemStack getItemStack(String path, ConfigurationSection config, ItemGetter.Filter... excludes) {
diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/IridiumSkyblockValueType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/IridiumSkyblockValueType.java
index 0882e757..bb9c4a86 100644
--- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/IridiumSkyblockValueType.java
+++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/IridiumSkyblockValueType.java
@@ -1,7 +1,7 @@
package com.leonardobishop.quests.quests.tasktypes.types.dependent;
import com.iridium.iridiumskyblock.Island;
-import com.iridium.iridiumskyblock.User;
+import com.iridium.iridiumskyblock.api.IslandWorthCalculatedEvent;
import com.leonardobishop.quests.Quests;
import com.leonardobishop.quests.QuestsConfigLoader;
import com.leonardobishop.quests.api.QuestsAPI;
@@ -14,14 +14,14 @@ import com.leonardobishop.quests.quests.Task;
import com.leonardobishop.quests.quests.tasktypes.ConfigValue;
import com.leonardobishop.quests.quests.tasktypes.TaskType;
import com.leonardobishop.quests.quests.tasktypes.TaskUtils;
-import org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-import org.bukkit.scheduler.BukkitRunnable;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
import org.bukkit.scheduler.BukkitTask;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.UUID;
public final class IridiumSkyblockValueType extends TaskType {
@@ -41,56 +41,47 @@ public final class IridiumSkyblockValueType extends TaskType {
return problems;
}
- @Override
- public void onReady() {
- this.poll = new BukkitRunnable() {
- @Override
- public void run() {
- for (Player player : Bukkit.getOnlinePlayers()) {
- Island island = null;
- if ((island = User.getUser(player).getIsland()) == null) {
- return;
- }
-
- QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId(), true);
- if (qPlayer == null) {
- return;
- }
+ @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+ public void onIslandLevel(IslandWorthCalculatedEvent event) {
+ Island island = event.getIsland();
+ for (String player : island.members) {
+ UUID uuid;
+ try {
+ uuid = UUID.fromString(player);
+ } catch (Exception e) {
+ Quests.get().getQuestsLogger().debug("Cannot convert from String to UUID for IridiumSkyblock");
+ continue;
+ }
+ QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(uuid, true);
+ if (qPlayer == null) {
+ continue;
+ }
- QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
+ QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
- for (Quest quest : IridiumSkyblockValueType.super.getRegisteredQuests()) {
- if (questProgressFile.hasStartedQuest(quest)) {
- QuestProgress questProgress = questProgressFile.getQuestProgress(quest);
+ for (Quest quest : IridiumSkyblockValueType.super.getRegisteredQuests()) {
+ if (questProgressFile.hasStartedQuest(quest)) {
+ QuestProgress questProgress = questProgressFile.getQuestProgress(quest);
- for (Task task : quest.getTasksOfType(IridiumSkyblockValueType.super.getType())) {
- TaskProgress taskProgress = questProgress.getTaskProgress(task.getId());
+ for (Task task : quest.getTasksOfType(IridiumSkyblockValueType.super.getType())) {
+ TaskProgress taskProgress = questProgress.getTaskProgress(task.getId());
- if (taskProgress.isCompleted()
- || (taskProgress.getProgress() != null && (int) taskProgress.getProgress() == island.getValue())) {
- continue;
- }
+ if (taskProgress.isCompleted()) {
+ continue;
+ }
- int islandValueNeeded = (int) task.getConfigValue("value");
+ int islandValueNeeded = (int) task.getConfigValue("value");
- taskProgress.setProgress(island.getValue());
+ taskProgress.setProgress(event.getIslandWorth());
- if (((int) taskProgress.getProgress()) >= islandValueNeeded) {
- taskProgress.setCompleted(true);
- }
- }
+ if (((double) taskProgress.getProgress()) >= islandValueNeeded) {
+ taskProgress.setCompleted(true);
}
}
}
}
- }.runTaskTimer(Quests.get(), 50L, 50L);
- }
-
- @Override
- public void onDisable() {
- if (this.poll != null) {
- this.poll.cancel();
}
+
}
@Override
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 7e6e77d1..b533b5fe 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -164,7 +164,7 @@ options:
# The above, but overwriting the file on disk with the cleaned version, so it does not soft clean on every join.
push-soft-clean-to-disk: 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-queue-executor-interval: 1 # how frequently Quests should execute the next check in the completion queue (def=1 - 0.05s) - 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)
tab-completion:
enabled: true