diff options
Diffstat (limited to 'src/main/java/com/leonardobishop')
| -rw-r--r-- | src/main/java/com/leonardobishop/quests/Quests.java | 33 | ||||
| -rw-r--r-- | src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/IridiumSkyblockValueType.java | 75 |
2 files changed, 60 insertions, 48 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 |
