From c8bef615fd0a117daa0919e9927a0512e2c3d0a4 Mon Sep 17 00:00:00 2001 From: LMBishop <13875753+LMBishop@users.noreply.github.com> Date: Tue, 29 Jun 2021 20:34:55 +0100 Subject: Add JetBrains annotations --- .../quests/bukkit/BukkitQuestsPlugin.java | 110 ++++++-------- .../quests/bukkit/command/QuestsCommand.java | 2 +- .../quests/bukkit/config/BukkitQuestsConfig.java | 3 - .../quests/bukkit/config/BukkitQuestsLoader.java | 4 +- .../bukkit/hook/itemgetter/ItemGetter_1_13.java | 2 - .../hook/itemgetter/ItemGetter_Late_1_8.java | 2 - .../bukkit/hook/papi/QuestsPlaceholders.java | 9 +- .../quests/bukkit/menu/CategoryQMenu.java | 2 +- .../quests/bukkit/menu/QuestQMenu.java | 2 +- .../quests/bukkit/menu/StartedQMenu.java | 2 +- .../bukkit/menu/element/QuestMenuElement.java | 2 +- .../questcompleter/BukkitQuestCompleter.java | 10 +- .../bukkit/storage/MySqlStorageProvider.java | 13 +- .../quests/bukkit/storage/YamlStorageProvider.java | 16 +- .../quests/bukkit/tasktype/BukkitTaskType.java | 5 +- .../bukkit/tasktype/BukkitTaskTypeManager.java | 3 +- .../bukkit/tasktype/type/BreedingTaskType.java | 3 +- .../bukkit/tasktype/type/BrewingTaskType.java | 3 +- .../tasktype/type/BuildingCertainTaskType.java | 3 +- .../bukkit/tasktype/type/BuildingTaskType.java | 3 +- .../bukkit/tasktype/type/CommandTaskType.java | 3 +- .../bukkit/tasktype/type/CraftingTaskType.java | 3 +- .../bukkit/tasktype/type/DealDamageTaskType.java | 3 +- .../bukkit/tasktype/type/DistancefromTaskType.java | 3 +- .../bukkit/tasktype/type/EnchantingTaskType.java | 3 +- .../bukkit/tasktype/type/ExpEarnTaskType.java | 3 +- .../tasktype/type/FishingCertainTaskType.java | 6 +- .../bukkit/tasktype/type/FishingTaskType.java | 3 +- .../bukkit/tasktype/type/InventoryTaskType.java | 3 +- .../bukkit/tasktype/type/MilkingTaskType.java | 3 +- .../tasktype/type/MiningCertainTaskType.java | 3 +- .../bukkit/tasktype/type/MiningTaskType.java | 3 +- .../tasktype/type/MobkillingCertainTaskType.java | 3 +- .../bukkit/tasktype/type/MobkillingTaskType.java | 3 +- .../tasktype/type/PlayerkillingTaskType.java | 3 +- .../bukkit/tasktype/type/PlaytimeTaskType.java | 3 +- .../bukkit/tasktype/type/PositionTaskType.java | 3 +- .../bukkit/tasktype/type/ShearingTaskType.java | 3 +- .../bukkit/tasktype/type/TamingTaskType.java | 3 +- .../bukkit/tasktype/type/WalkingTaskType.java | 3 +- .../type/dependent/ASkyBlockLevelTaskType.java | 3 +- .../type/dependent/BentoBoxLevelTaskType.java | 3 +- .../type/dependent/CitizensDeliverTaskType.java | 3 +- .../type/dependent/CitizensInteractTaskType.java | 3 +- .../type/dependent/EssentialsBalanceTaskType.java | 3 +- .../dependent/EssentialsMoneyEarnTaskType.java | 3 +- .../dependent/IridiumSkyblockValueTaskType.java | 3 +- .../type/dependent/MythicMobsKillingType.java | 3 +- .../dependent/PlaceholderAPIEvaluateTaskType.java | 3 +- .../dependent/ShopGUIPlusBuyCertainTaskType.java | 3 +- .../dependent/ShopGUIPlusSellCertainTaskType.java | 3 +- .../type/dependent/uSkyBlockLevelTaskType.java | 3 +- .../quests/bukkit/util/Messages.java | 10 +- common/build.gradle | 11 ++ .../quests/common/player/QPlayer.java | 64 ++++++-- .../quests/common/player/QPlayerManager.java | 45 ++++-- .../quests/common/player/QPlayerPreferences.java | 6 +- .../quests/common/plugin/Quests.java | 21 +-- .../quests/common/quest/Category.java | 36 ++++- .../leonardobishop/quests/common/quest/Quest.java | 168 ++++++++++++++++++--- .../quests/common/quest/QuestCompleter.java | 16 +- .../quests/common/quest/QuestManager.java | 69 +++++++-- .../leonardobishop/quests/common/quest/Task.java | 54 ++++++- .../quests/common/storage/StorageProvider.java | 19 ++- .../quests/common/tasktype/TaskType.java | 42 ++++-- .../quests/common/tasktype/TaskTypeManager.java | 47 +++++- 66 files changed, 660 insertions(+), 246 deletions(-) diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java index e971b4de..9ce5b0b0 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java @@ -63,7 +63,6 @@ import com.leonardobishop.quests.bukkit.tasktype.type.dependent.PlaceholderAPIEv import com.leonardobishop.quests.bukkit.tasktype.type.dependent.ShopGUIPlusBuyCertainTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.ShopGUIPlusSellCertainTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.uSkyBlockLevelTaskType; -import com.leonardobishop.quests.bukkit.util.Messages; import com.leonardobishop.quests.common.config.ConfigProblem; import com.leonardobishop.quests.common.config.ConfigProblemDescriptions; import com.leonardobishop.quests.common.config.QuestsConfig; @@ -126,57 +125,58 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { private BukkitTask questQueuePollTask; @Override - public QuestsLogger getQuestsLogger() { + public @NotNull QuestsLogger getQuestsLogger() { return questsLogger; } @Override - public QuestManager getQuestManager() { + public @NotNull QuestManager getQuestManager() { return questManager; } @Override - public TaskTypeManager getTaskTypeManager() { + public @NotNull TaskTypeManager getTaskTypeManager() { return taskTypeManager; } @Override - public QPlayerManager getPlayerManager() { + public @NotNull QPlayerManager getPlayerManager() { return qPlayerManager; } @Override - public QuestController getQuestController() { + public @NotNull QuestController getQuestController() { return questController; } @Override - public QuestCompleter getQuestCompleter() { + public @NotNull QuestCompleter getQuestCompleter() { return questCompleter; } @Override - public QuestsConfig getQuestsConfig() { + public @NotNull QuestsConfig getQuestsConfig() { return questsConfig; } @Override - public Updater getUpdater() { + public @NotNull Updater getUpdater() { return updater; } @Override - public StorageProvider getStorageProvider() { + public @NotNull StorageProvider getStorageProvider() { return storageProvider; } @Override - public ServerScheduler getScheduler() { + public @NotNull ServerScheduler getScheduler() { return serverScheduler; } @Override public void onEnable() { + // Initial module initialization this.questsLogger = new BukkitQuestsLogger(this); this.generateConfigurations(); this.questsConfig = new BukkitQuestsConfig(new File(super.getDataFolder() + File.separator + "config.yml")); @@ -184,12 +184,14 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { this.taskTypeManager = new BukkitTaskTypeManager(this); this.serverScheduler = new BukkitServerSchedulerAdapter(this); + // Load base configuration for use during rest of startup procedure if (!this.reloadBaseConfiguration()) { questsLogger.severe("Plugin cannot start into a stable state as the configuration is broken!"); super.getServer().getPluginManager().disablePlugin(this); return; } + // Initialise storage provider String configuredProvider = questsConfig.getString("options.storage.provider", "yaml"); switch (configuredProvider.toLowerCase()) { default: @@ -208,50 +210,76 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { e.printStackTrace(); } - this.setupVersionSpecific(); + // Setup version specific compatibility layers + int version; + try { + version = Integer.parseInt(Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3].split("_")[1]); + } catch (ArrayIndexOutOfBoundsException | NumberFormatException e) { + questsLogger.warning("Failed to resolve server version - some features may not work!"); + version = 0; + } + questsLogger.info("Your server is running version 1." + version); + // (titles) + if (version < 8) { + titleHandle = new Title_Other(); + } else if (version <= 10) { + titleHandle = new Title_BukkitNoTimings(); + } else { + titleHandle = new Title_Bukkit(); + } + // (itemstacks) + if (version <= 12) { + itemGetter = new ItemGetter_Late_1_8(); + } else if (version == 13) { + itemGetter = new ItemGetter_1_13(); + } else { + itemGetter = new ItemGetterLatest(); + } + + questsConfig.setItemGetter(itemGetter); - Messages.setPlugin(this); + // Finish module initialisation this.qPlayerManager = new QPlayerManager(this, storageProvider, questController); this.menuController = new MenuController(this); this.qItemStackRegistry = new QItemStackRegistry(); this.questCompleter = new BukkitQuestCompleter(this); + // Start metrics MetricsLite metrics = new MetricsLite(this, 3443); if (metrics.isEnabled()) { this.getQuestsLogger().info("Metrics started. This can be disabled at /plugins/bStats/config.yml."); } + // Setup external plugin hooks if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) { this.placeholderAPIHook = new PlaceholderAPIHook(); this.placeholderAPIHook.registerExpansion(this); } - if (Bukkit.getPluginManager().isPluginEnabled("CoreProtect")) { this.coreProtectHook = new CoreProtectHook(); } else { this.coreProtectHook = new CoreProtectNoHook(); } + // Start quests update checker boolean ignoreUpdates = false; try { ignoreUpdates = new File(this.getDataFolder() + File.separator + "stfuQuestsUpdate").exists(); } catch (Throwable ignored) { } - - this.updater = new Updater(this, super.getDescription().getVersion(), !ignoreUpdates); if (!ignoreUpdates) { - serverScheduler.doAsync(() -> { - updater.check(); - }); + serverScheduler.doAsync(() -> updater.check()); } + // Register commands super.getCommand("quests").setExecutor(new QuestsCommand(this)); + // Register events super.getServer().getPluginManager().registerEvents(new PlayerJoinListener(this), this); super.getServer().getPluginManager().registerEvents(menuController, this); super.getServer().getPluginManager().registerEvents(new PlayerLeaveListener(this), this); - // register task types after the server has fully started + // Register task types after the server has fully started Bukkit.getScheduler().runTask(this, () -> { taskTypeManager.registerTaskType(new MiningTaskType(this)); taskTypeManager.registerTaskType(new MiningCertainTaskType(this)); @@ -316,6 +344,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { taskTypeManager.closeRegistrations(); reloadQuests(); + // Load players who were present during startup (i.e some idiot reloaded the server instead of restarted) for (Player player : Bukkit.getOnlinePlayers()) { qPlayerManager.loadPlayer(player.getUniqueId()); } @@ -405,47 +434,6 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { return validConfiguration; } - private void setupVersionSpecific() { - String version; - try { - version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3]; - } catch (ArrayIndexOutOfBoundsException e) { - getQuestsLogger().warning("Failed to resolve server version - some features will not work!"); - titleHandle = new Title_Other(); - itemGetter = new ItemGetter_Late_1_8(); - return; - } - - getQuestsLogger().info("Your server is running version " + version + "."); - - if (version.startsWith("v1_7")) { - titleHandle = new Title_Other(); - } else if (version.startsWith("v1_8") || version.startsWith("v1_9") || version.startsWith("v1_10")) { - titleHandle = new Title_BukkitNoTimings(); - } else { - titleHandle = new Title_Bukkit(); - } - - if (version.startsWith("v1_7") || version.startsWith("v1_8") || version.startsWith("v1_9") - || version.startsWith("v1_10") || version.startsWith("v1_11") || version.startsWith("v1_12")) { - itemGetter = new ItemGetter_Late_1_8(); - } else if (version.startsWith("v1_13")) { - itemGetter = new ItemGetter_1_13(); - } else { - itemGetter = new ItemGetterLatest(); - } - - questsConfig.setItemGetter(itemGetter); - - if (titleHandle instanceof Title_Bukkit) { - getQuestsLogger().info("Titles have been enabled."); - } else if (titleHandle instanceof Title_BukkitNoTimings) { - getQuestsLogger().info("Titles have been enabled, although they have limited timings."); - } else { - getQuestsLogger().info("Titles are not supported for this version."); - } - } - private void generateConfigurations() { File directory = new File(String.valueOf(this.getDataFolder())); if (!directory.exists() && !directory.isDirectory()) { diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommand.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommand.java index d3a9bc5a..b9f02909 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommand.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommand.java @@ -1,8 +1,8 @@ package com.leonardobishop.quests.bukkit.command; import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; -import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.leonardobishop.quests.bukkit.util.Messages; +import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.leonardobishop.quests.common.config.ConfigProblem; import com.leonardobishop.quests.common.enums.QuestStartResult; import com.leonardobishop.quests.common.player.QPlayer; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsConfig.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsConfig.java index 908ba361..f0b62f1e 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsConfig.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsConfig.java @@ -2,9 +2,6 @@ package com.leonardobishop.quests.bukkit.config; import com.leonardobishop.quests.bukkit.hook.itemgetter.ItemGetter; import com.leonardobishop.quests.common.config.QuestsConfig; -import com.leonardobishop.quests.common.plugin.Quests; -import org.bukkit.configuration.InvalidConfigurationException; -import org.bukkit.configuration.MemoryConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.inventory.ItemStack; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java index 1cd8b789..98535512 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java @@ -17,7 +17,6 @@ import com.leonardobishop.quests.common.questcontroller.QuestController; import com.leonardobishop.quests.common.tasktype.TaskType; import com.leonardobishop.quests.common.tasktype.TaskTypeManager; import org.apache.commons.lang.StringUtils; -import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.inventory.ItemStack; @@ -62,8 +61,7 @@ public class BukkitQuestsLoader implements QuestsLoader { @Override public Map> loadQuests(File root) { qItemStackRegistry.clearRegistry(); - questManager.getQuests().clear(); - questManager.getCategories().clear(); + questManager.clear(); taskTypeManager.resetTaskTypes(); Map> configProblems = new HashMap<>(); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_1_13.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_1_13.java index ec77e548..d63720c7 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_1_13.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_1_13.java @@ -1,7 +1,6 @@ package com.leonardobishop.quests.bukkit.hook.itemgetter; import com.leonardobishop.quests.bukkit.util.chat.Chat; -import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; @@ -12,7 +11,6 @@ import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_Late_1_8.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_Late_1_8.java index a971503f..5959108d 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_Late_1_8.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/itemgetter/ItemGetter_Late_1_8.java @@ -2,7 +2,6 @@ package com.leonardobishop.quests.bukkit.hook.itemgetter; import com.leonardobishop.quests.bukkit.util.chat.Chat; import org.apache.commons.lang.StringUtils; -import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.enchantments.Enchantment; @@ -10,7 +9,6 @@ import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.regex.Pattern; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/QuestsPlaceholders.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/QuestsPlaceholders.java index fdd3a7d0..1dd49e9a 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/QuestsPlaceholders.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/papi/QuestsPlaceholders.java @@ -2,13 +2,13 @@ package com.leonardobishop.quests.bukkit.hook.papi; import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; import com.leonardobishop.quests.bukkit.menu.itemstack.QItemStack; +import com.leonardobishop.quests.bukkit.util.Format; import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.leonardobishop.quests.common.enums.QuestStartResult; import com.leonardobishop.quests.common.player.QPlayer; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile; import com.leonardobishop.quests.common.quest.Category; import com.leonardobishop.quests.common.quest.Quest; -import com.leonardobishop.quests.bukkit.util.Format; import me.clip.placeholderapi.expansion.Cacheable; import me.clip.placeholderapi.expansion.PlaceholderExpansion; import org.bukkit.Bukkit; @@ -139,14 +139,15 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl quest = plugin.getQuestManager().getQuestById(key[1]); if (quest == null) return key[1] + " is not a quest"; } else { - quest = plugin.getQuestManager().getQuestById(qPlayer.getPlayerPreferences().getTrackedQuestId()); - if (quest == null) { + if (qPlayer.getPlayerPreferences().getTrackedQuestId() == null || + plugin.getQuestManager().getQuestById(qPlayer.getPlayerPreferences().getTrackedQuestId()) == null) { if (args.length == 1) { return "No tracked quest"; } else { return ""; } } + quest = plugin.getQuestManager().getQuestById(qPlayer.getPlayerPreferences().getTrackedQuestId()); } if (args.length == 1) { @@ -278,7 +279,7 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl final Map map = new HashMap<>(); map.put(params, result); cache.put(player, map); - Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, () -> cache.get(player).remove(params), plugin.getConfig().getInt("options.placeholder-cache-time", 10) * 20); + Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, () -> cache.get(player).remove(params), plugin.getConfig().getInt("options.placeholder-cache-time", 10) * 20L); } return result; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CategoryQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CategoryQMenu.java index 6d1993b6..e6f1335e 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CategoryQMenu.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/CategoryQMenu.java @@ -6,9 +6,9 @@ import com.leonardobishop.quests.bukkit.menu.element.CategoryMenuElement; import com.leonardobishop.quests.bukkit.menu.element.CustomMenuElement; import com.leonardobishop.quests.bukkit.menu.element.MenuElement; import com.leonardobishop.quests.bukkit.menu.element.SpacerMenuElement; -import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.leonardobishop.quests.bukkit.util.MenuUtils; import com.leonardobishop.quests.bukkit.util.Messages; +import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.leonardobishop.quests.common.player.QPlayer; import org.apache.commons.lang.math.NumberUtils; import org.bukkit.Bukkit; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestQMenu.java index c61bb6e2..16e3697a 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestQMenu.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/QuestQMenu.java @@ -6,8 +6,8 @@ import com.leonardobishop.quests.bukkit.menu.element.CustomMenuElement; import com.leonardobishop.quests.bukkit.menu.element.MenuElement; import com.leonardobishop.quests.bukkit.menu.element.QuestMenuElement; import com.leonardobishop.quests.bukkit.menu.element.SpacerMenuElement; -import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.leonardobishop.quests.bukkit.util.MenuUtils; +import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.leonardobishop.quests.common.enums.QuestStartResult; import com.leonardobishop.quests.common.player.QPlayer; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/StartedQMenu.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/StartedQMenu.java index 7d05294e..8646a91a 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/StartedQMenu.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/StartedQMenu.java @@ -2,8 +2,8 @@ package com.leonardobishop.quests.bukkit.menu; import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; import com.leonardobishop.quests.bukkit.config.BukkitQuestsConfig; -import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.leonardobishop.quests.bukkit.util.MenuUtils; +import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.leonardobishop.quests.common.player.QPlayer; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress; import com.leonardobishop.quests.common.quest.Quest; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/QuestMenuElement.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/QuestMenuElement.java index 34091013..baff1591 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/QuestMenuElement.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/menu/element/QuestMenuElement.java @@ -3,12 +3,12 @@ package com.leonardobishop.quests.bukkit.menu.element; import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; import com.leonardobishop.quests.bukkit.config.BukkitQuestsConfig; import com.leonardobishop.quests.bukkit.menu.itemstack.QItemStack; +import com.leonardobishop.quests.bukkit.util.Format; import com.leonardobishop.quests.bukkit.util.chat.Chat; import com.leonardobishop.quests.common.enums.QuestStartResult; import com.leonardobishop.quests.common.player.QPlayer; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress; import com.leonardobishop.quests.common.quest.Quest; -import com.leonardobishop.quests.bukkit.util.Format; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcompleter/BukkitQuestCompleter.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcompleter/BukkitQuestCompleter.java index 32365a17..a981dc15 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcompleter/BukkitQuestCompleter.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcompleter/BukkitQuestCompleter.java @@ -11,8 +11,10 @@ import com.leonardobishop.quests.common.quest.QuestCompleter; import com.leonardobishop.quests.common.quest.Task; import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; import java.util.LinkedList; +import java.util.Objects; import java.util.Queue; //TODO move complete effects here ? @@ -95,12 +97,16 @@ public class BukkitQuestCompleter implements QuestCompleter, Runnable { } @Override - public void queueSingular(QuestProgress questProgress) { + public void queueSingular(@NotNull QuestProgress questProgress) { + Objects.requireNonNull(questProgress, "questProgress cannot be null"); + completionQueue.add(questProgress); } @Override - public void queueFullCheck(QuestProgressFile questProgressFile) { + public void queueFullCheck(@NotNull QuestProgressFile questProgressFile) { + Objects.requireNonNull(questProgressFile, "questProgressFile cannot be null"); + fullCheckQueue.add(questProgressFile); } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java index 59e463fd..f66f3463 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java @@ -10,6 +10,8 @@ import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.sql.Connection; import java.sql.PreparedStatement; @@ -20,6 +22,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.UUID; import java.util.function.Function; @@ -126,7 +129,10 @@ public class MySqlStorageProvider implements StorageProvider { } @Override - public QuestProgressFile loadProgressFile(UUID uuid) { + @Nullable + public QuestProgressFile loadProgressFile(@NotNull UUID uuid) { + Objects.requireNonNull(uuid, "uuid cannot be null"); + if (fault) return null; Map presentQuests = new HashMap<>(plugin.getQuestManager().getQuests()); boolean validateQuests = plugin.getQuestsConfig().getBoolean("options.verify-quest-exists-on-load", true); @@ -214,7 +220,10 @@ public class MySqlStorageProvider implements StorageProvider { } @Override - public void saveProgressFile(UUID uuid, QuestProgressFile questProgressFile) { + public void saveProgressFile(@NotNull UUID uuid, @NotNull QuestProgressFile questProgressFile) { + Objects.requireNonNull(uuid, "uuid cannot be null"); + Objects.requireNonNull(questProgressFile, "questProgressFile cannot be null"); + if (fault) return; try (Connection connection = hikari.getConnection()) { try (PreparedStatement writeQuestProgress = connection.prepareStatement(this.statementProcessor.apply(WRITE_PLAYER_QUEST_PROGRESS)); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java index ea411c3d..092bc6cd 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java @@ -7,6 +7,8 @@ import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress; import com.leonardobishop.quests.common.quest.Quest; import com.leonardobishop.quests.common.storage.StorageProvider; import org.bukkit.configuration.file.YamlConfiguration; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.IOException; @@ -14,6 +16,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.ReentrantLock; @@ -45,7 +48,9 @@ public class YamlStorageProvider implements StorageProvider { // no impl } - public QuestProgressFile loadProgressFile(UUID uuid) { + public @Nullable QuestProgressFile loadProgressFile(@NotNull UUID uuid) { + Objects.requireNonNull(uuid, "uuid cannot be null"); + ReentrantLock lock = lock(uuid); Map presentQuests = new HashMap<>(plugin.getQuestManager().getQuests()); boolean validateQuests = plugin.getQuestsConfig().getBoolean("options.verify-quest-exists-on-load", true); @@ -89,9 +94,9 @@ public class YamlStorageProvider implements StorageProvider { } } } catch (Exception ex) { - plugin.getQuestsLogger().severe("Failed to load player: " + uuid + "! This WILL cause errors."); + plugin.getQuestsLogger().severe("Failed to load player: " + uuid + "!"); ex.printStackTrace(); - // fuck + return null; } finally { lock.unlock(); } @@ -99,7 +104,10 @@ public class YamlStorageProvider implements StorageProvider { return questProgressFile; } - public void saveProgressFile(UUID uuid, QuestProgressFile questProgressFile) { + public void saveProgressFile(@NotNull UUID uuid, @NotNull QuestProgressFile questProgressFile) { + Objects.requireNonNull(uuid, "uuid cannot be null"); + Objects.requireNonNull(questProgressFile, "questProgressFile cannot be null"); + ReentrantLock lock = lock(uuid); try { List questProgressValues = new ArrayList<>(questProgressFile.getAllQuestProgress()); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskType.java index 81f312c7..681658de 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskType.java @@ -2,14 +2,15 @@ package com.leonardobishop.quests.bukkit.tasktype; import com.leonardobishop.quests.common.tasktype.TaskType; import org.bukkit.event.Listener; +import org.jetbrains.annotations.NotNull; public abstract class BukkitTaskType extends TaskType implements Listener { - public BukkitTaskType(String type, String author, String description) { + public BukkitTaskType(@NotNull String type, String author, String description) { super(type, author, description); } - public BukkitTaskType(String type) { + public BukkitTaskType(@NotNull String type) { super(type); } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskTypeManager.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskTypeManager.java index 67c9ab7d..845c0207 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskTypeManager.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/BukkitTaskTypeManager.java @@ -3,6 +3,7 @@ package com.leonardobishop.quests.bukkit.tasktype; import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; import com.leonardobishop.quests.common.tasktype.TaskType; import com.leonardobishop.quests.common.tasktype.TaskTypeManager; +import org.jetbrains.annotations.NotNull; public class BukkitTaskTypeManager extends TaskTypeManager { @@ -14,7 +15,7 @@ public class BukkitTaskTypeManager extends TaskTypeManager { } @Override - public void registerTaskType(TaskType taskType) { + public void registerTaskType(@NotNull TaskType taskType) { if (!(taskType instanceof BukkitTaskType)) throw new RuntimeException("task type must be instance of BukkitTaskType!"); BukkitTaskType bukkitTaskType = (BukkitTaskType) taskType; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BreedingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BreedingTaskType.java index c4d05eed..3d4e9dfd 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BreedingTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BreedingTaskType.java @@ -15,6 +15,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -30,7 +31,7 @@ public final class BreedingTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BrewingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BrewingTaskType.java index d6ede688..3737d9be 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BrewingTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BrewingTaskType.java @@ -19,6 +19,7 @@ import org.bukkit.event.block.Action; import org.bukkit.event.inventory.BrewEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -36,7 +37,7 @@ public final class BrewingTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingCertainTaskType.java index 550e6435..4de5c7ee 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingCertainTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingCertainTaskType.java @@ -16,6 +16,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -31,7 +32,7 @@ public final class BuildingCertainTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingTaskType.java index fe0e3ee7..1533d92c 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/BuildingTaskType.java @@ -12,6 +12,7 @@ import com.leonardobishop.quests.common.quest.Task; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.block.BlockPlaceEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -27,7 +28,7 @@ public final class BuildingTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CommandTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CommandTaskType.java index db44f8d6..5aca23b4 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CommandTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CommandTaskType.java @@ -13,6 +13,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -28,7 +29,7 @@ public final class CommandTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); TaskUtils.configValidateExists(root + ".command", config.get("command"), problems, "command", super.getType()); TaskUtils.configValidateBoolean(root + ".ignore-case", config.get("ignore-case"), problems, true, "ignore-case", super.getType()); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CraftingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CraftingTaskType.java index 0def500a..2fdd54f5 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CraftingTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CraftingTaskType.java @@ -18,6 +18,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -33,7 +34,7 @@ public final class CraftingTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".item", config.get("item"), problems, "item", super.getType())) { Object configBlock = config.get("item"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DealDamageTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DealDamageTaskType.java index 950a50ad..9a711ce9 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DealDamageTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DealDamageTaskType.java @@ -13,6 +13,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -28,7 +29,7 @@ public final class DealDamageTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DistancefromTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DistancefromTaskType.java index b0b4b9e9..6fb15fad 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DistancefromTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/DistancefromTaskType.java @@ -16,6 +16,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerMoveEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -31,7 +32,7 @@ public final class DistancefromTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".x", config.get("x"), problems, "x", super.getType())) TaskUtils.configValidateInt(root + ".x", config.get("x"), problems, false, false, "x"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/EnchantingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/EnchantingTaskType.java index 5293960f..3eda3316 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/EnchantingTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/EnchantingTaskType.java @@ -13,6 +13,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.enchantment.EnchantItemEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -28,7 +29,7 @@ public final class EnchantingTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ExpEarnTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ExpEarnTaskType.java index 81653d86..ccb12e2f 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ExpEarnTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ExpEarnTaskType.java @@ -12,6 +12,7 @@ import com.leonardobishop.quests.common.quest.Task; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerExpChangeEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -27,7 +28,7 @@ public final class ExpEarnTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingCertainTaskType.java index 8f1a0812..898d4a72 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingCertainTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingCertainTaskType.java @@ -11,15 +11,13 @@ import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress; import com.leonardobishop.quests.common.quest.Quest; import com.leonardobishop.quests.common.quest.Task; import org.bukkit.Material; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerFishEvent; import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -35,7 +33,7 @@ public final class FishingCertainTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".item", config.get("item"), problems, "item", super.getType())) { if (Material.getMaterial(String.valueOf(config.get("item"))) == null) { diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingTaskType.java index bbaa59c7..040b5260 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/FishingTaskType.java @@ -13,6 +13,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerFishEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -28,7 +29,7 @@ public final class FishingTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/InventoryTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/InventoryTaskType.java index 55df10de..b57aabcd 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/InventoryTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/InventoryTaskType.java @@ -19,6 +19,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -34,7 +35,7 @@ public final class InventoryTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".item", config.get("item"), problems, "item", super.getType())) { Object configBlock = config.get("item"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MilkingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MilkingTaskType.java index 79dc975b..6a2d93c3 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MilkingTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MilkingTaskType.java @@ -16,6 +16,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -31,7 +32,7 @@ public final class MilkingTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningCertainTaskType.java index 9c881f01..713bd8d2 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningCertainTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningCertainTaskType.java @@ -16,6 +16,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -31,7 +32,7 @@ public final class MiningCertainTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningTaskType.java index 519cf87a..addbde02 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MiningTaskType.java @@ -12,6 +12,7 @@ import com.leonardobishop.quests.common.quest.Task; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.block.BlockBreakEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -28,7 +29,7 @@ public final class MiningTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingCertainTaskType.java index 7a5958a2..186b1c5d 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingCertainTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingCertainTaskType.java @@ -17,6 +17,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDeathEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -32,7 +33,7 @@ public final class MobkillingCertainTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".mob", config.get("mob"), problems, "mob", super.getType())) { try { diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingTaskType.java index c1dfbe2a..9beac354 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/MobkillingTaskType.java @@ -16,6 +16,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDeathEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -31,7 +32,7 @@ public final class MobkillingTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PlayerkillingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PlayerkillingTaskType.java index db9fda8b..adbf53c7 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PlayerkillingTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PlayerkillingTaskType.java @@ -14,6 +14,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDeathEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -29,7 +30,7 @@ public final class PlayerkillingTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PlaytimeTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PlaytimeTaskType.java index 28ecced4..7ab9d279 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PlaytimeTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PlaytimeTaskType.java @@ -13,6 +13,7 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -29,7 +30,7 @@ public final class PlaytimeTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".minutes", config.get("minutes"), problems, "minutes", super.getType())) TaskUtils.configValidateInt(root + ".minutes", config.get("minutes"), problems, false, true, "minutes"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PositionTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PositionTaskType.java index 876081ae..d21acbc3 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PositionTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/PositionTaskType.java @@ -16,6 +16,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerMoveEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -31,7 +32,7 @@ public final class PositionTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); TaskUtils.configValidateExists(root + ".world", config.get("world"), problems, "world", super.getType()); if (TaskUtils.configValidateExists(root + ".x", config.get("x"), problems, "x", super.getType())) diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ShearingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ShearingTaskType.java index 6778ae69..842375a0 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ShearingTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/ShearingTaskType.java @@ -14,6 +14,7 @@ import org.bukkit.entity.Sheep; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerShearEntityEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -29,7 +30,7 @@ public final class ShearingTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/TamingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/TamingTaskType.java index 7555e60c..6d1d3ff6 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/TamingTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/TamingTaskType.java @@ -13,6 +13,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityTameEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -28,7 +29,7 @@ public final class TamingTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java index cc0db63d..0ba7bf74 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java @@ -13,6 +13,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerMoveEvent; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -28,7 +29,7 @@ public final class WalkingTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".distance", config.get("distance"), problems, "distance", super.getType())) TaskUtils.configValidateInt(root + ".distance", config.get("distance"), problems, false, true, "distance"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ASkyBlockLevelTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ASkyBlockLevelTaskType.java index 3953a95f..d8ed67da 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ASkyBlockLevelTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ASkyBlockLevelTaskType.java @@ -12,6 +12,7 @@ import com.leonardobishop.quests.common.quest.Task; import com.wasteofplastic.askyblock.events.IslandPostLevelEvent; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -27,7 +28,7 @@ public final class ASkyBlockLevelTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".level", config.get("level"), problems, "level", super.getType())) TaskUtils.configValidateInt(root + ".level", config.get("level"), problems, false, false, "level"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BentoBoxLevelTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BentoBoxLevelTaskType.java index ba662166..8dd4abb0 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BentoBoxLevelTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BentoBoxLevelTaskType.java @@ -11,6 +11,7 @@ import com.leonardobishop.quests.common.quest.Quest; import com.leonardobishop.quests.common.quest.Task; import com.leonardobishop.quests.common.tasktype.TaskTypeManager; import org.bukkit.event.EventHandler; +import org.jetbrains.annotations.NotNull; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.events.BentoBoxEvent; import world.bentobox.bentobox.database.objects.Island; @@ -34,7 +35,7 @@ public final class BentoBoxLevelTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".level", config.get("level"), problems, "level", super.getType())) TaskUtils.configValidateInt(root + ".level", config.get("level"), problems, false, false, "level"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensDeliverTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensDeliverTaskType.java index aba6c985..ee40878c 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensDeliverTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensDeliverTaskType.java @@ -19,6 +19,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -34,7 +35,7 @@ public final class CitizensDeliverTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".item", config.get("item"), problems, "item", super.getType())) { Object configBlock = config.get("item"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensInteractTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensInteractTaskType.java index 73cb195c..237e5bf2 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensInteractTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CitizensInteractTaskType.java @@ -13,6 +13,7 @@ import com.leonardobishop.quests.common.quest.Task; import net.citizensnpcs.api.event.NPCRightClickEvent; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -28,7 +29,7 @@ public final class CitizensInteractTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); TaskUtils.configValidateExists(root + ".npc-name", config.get("npc-name"), problems, "npc-name", super.getType()); TaskUtils.configValidateBoolean(root + ".remove-items-when-complete", config.get("remove-items-when-complete"), problems, true, "remove-items-when-complete", super.getType()); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsBalanceTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsBalanceTaskType.java index f207a499..f59dbb44 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsBalanceTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsBalanceTaskType.java @@ -16,6 +16,7 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.jetbrains.annotations.NotNull; import java.math.BigDecimal; import java.util.ArrayList; @@ -33,7 +34,7 @@ public class EssentialsBalanceTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, false, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsMoneyEarnTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsMoneyEarnTaskType.java index 5f4c2a0e..23335c21 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsMoneyEarnTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/EssentialsMoneyEarnTaskType.java @@ -12,6 +12,7 @@ import com.leonardobishop.quests.common.quest.Task; import net.ess3.api.events.UserBalanceUpdateEvent; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.jetbrains.annotations.NotNull; import java.math.BigDecimal; import java.util.ArrayList; @@ -28,7 +29,7 @@ public class EssentialsMoneyEarnTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, false, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/IridiumSkyblockValueTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/IridiumSkyblockValueTaskType.java index 5885f645..086224b5 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/IridiumSkyblockValueTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/IridiumSkyblockValueTaskType.java @@ -13,6 +13,7 @@ import com.leonardobishop.quests.common.quest.Quest; import com.leonardobishop.quests.common.quest.Task; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -30,7 +31,7 @@ public final class IridiumSkyblockValueTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".value", config.get("value"), problems, "value", super.getType())) TaskUtils.configValidateInt(root + ".value", config.get("value"), problems, false, false, "value"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/MythicMobsKillingType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/MythicMobsKillingType.java index 1e4ede3e..0929910b 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/MythicMobsKillingType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/MythicMobsKillingType.java @@ -14,6 +14,7 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -29,7 +30,7 @@ public final class MythicMobsKillingType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); TaskUtils.configValidateExists(root + ".name", config.get("name"), problems, "name", super.getType()); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/PlaceholderAPIEvaluateTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/PlaceholderAPIEvaluateTaskType.java index fed42bf4..594c94f3 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/PlaceholderAPIEvaluateTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/PlaceholderAPIEvaluateTaskType.java @@ -14,6 +14,7 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -30,7 +31,7 @@ public final class PlaceholderAPIEvaluateTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); TaskUtils.configValidateExists(root + ".placeholder", config.get("placeholder"), problems, "placeholder", super.getType()); boolean evalExists = TaskUtils.configValidateExists(root + ".evaluates", config.get("evaluates"), problems, "evaluates", super.getType()); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusBuyCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusBuyCertainTaskType.java index c7944232..7735f377 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusBuyCertainTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusBuyCertainTaskType.java @@ -13,6 +13,7 @@ import net.brcdev.shopgui.event.ShopPreTransactionEvent; import net.brcdev.shopgui.shop.ShopManager; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -28,7 +29,7 @@ public class ShopGUIPlusBuyCertainTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, false, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusSellCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusSellCertainTaskType.java index 9b2ba441..ab616b2f 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusSellCertainTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusSellCertainTaskType.java @@ -13,6 +13,7 @@ import net.brcdev.shopgui.event.ShopPreTransactionEvent; import net.brcdev.shopgui.shop.ShopManager; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -28,7 +29,7 @@ public class ShopGUIPlusSellCertainTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, false, "amount"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/uSkyBlockLevelTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/uSkyBlockLevelTaskType.java index ac093522..7c42ca9e 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/uSkyBlockLevelTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/uSkyBlockLevelTaskType.java @@ -11,6 +11,7 @@ import com.leonardobishop.quests.common.quest.Quest; import com.leonardobishop.quests.common.quest.Task; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.jetbrains.annotations.NotNull; import us.talabrek.ultimateskyblock.api.event.uSkyBlockScoreChangedEvent; import java.util.ArrayList; @@ -27,7 +28,7 @@ public final class uSkyBlockLevelTaskType extends BukkitTaskType { } @Override - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { ArrayList problems = new ArrayList<>(); if (TaskUtils.configValidateExists(root + ".level", config.get("level"), problems, "level", super.getType())) TaskUtils.configValidateInt(root + ".level", config.get("level"), problems, false, false, "level"); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java index be7a727b..f13d2d7b 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java @@ -59,7 +59,11 @@ public enum Messages { COMMAND_QUEST_ADMIN_COMPLETE_SUCCESS("messages.command-quest-admin-complete-success"), COMMAND_QUEST_ADMIN_RESET_SUCCESS("messages.command-quest-admin-reset-success"); - private static BukkitQuestsPlugin plugin; + static { + plugin = BukkitQuestsPlugin.getPlugin(BukkitQuestsPlugin.class); + } + + private static final BukkitQuestsPlugin plugin; private final String path; @@ -67,10 +71,6 @@ public enum Messages { this.path = path; } - public static void setPlugin(BukkitQuestsPlugin plugin) { - Messages.plugin = plugin; - } - public String getMessage() { if (plugin.getConfig().contains(path)) { String message = plugin.getQuestsConfig().getString(path); diff --git a/common/build.gradle b/common/build.gradle index e69de29b..6e783da8 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -0,0 +1,11 @@ +plugins { + id 'java' +} + +repositories { + mavenCentral() +} + +dependencies { + compileOnly 'org.jetbrains:annotations:16.0.2' +} diff --git a/common/src/main/java/com/leonardobishop/quests/common/player/QPlayer.java b/common/src/main/java/com/leonardobishop/quests/common/player/QPlayer.java index f9f46078..d8b40cce 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/player/QPlayer.java +++ b/common/src/main/java/com/leonardobishop/quests/common/player/QPlayer.java @@ -5,7 +5,10 @@ import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFi import com.leonardobishop.quests.common.plugin.Quests; import com.leonardobishop.quests.common.quest.Quest; import com.leonardobishop.quests.common.questcontroller.QuestController; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import java.util.Objects; import java.util.UUID; /** @@ -27,7 +30,12 @@ public class QPlayer { this.questController = questController; } - public UUID getPlayerUUID() { + /** + * Get the player UUID associated with this quest player. The player may not be online. + * + * @return uuid + */ + public @NotNull UUID getPlayerUUID() { return this.uuid; } @@ -38,7 +46,9 @@ public class QPlayer { * @param quest the quest to complete * @return true (always) */ - public boolean completeQuest(Quest quest) { + public boolean completeQuest(@NotNull Quest quest) { + Objects.requireNonNull(quest, "quest cannot be null"); + return questController.completeQuestForPlayer(this, quest); } @@ -47,7 +57,7 @@ public class QPlayer { ** * @param quest the quest to track */ - public void trackQuest(Quest quest) { + public void trackQuest(@Nullable Quest quest) { questController.trackQuestForPlayer(this, quest); } @@ -57,7 +67,9 @@ public class QPlayer { * @param quest the quest to test for * @return true if the quest is started or quest autostart is enabled and the quest is ready to start, false otherwise */ - public boolean hasStartedQuest(Quest quest) { + public boolean hasStartedQuest(@NotNull Quest quest) { + Objects.requireNonNull(quest, "quest cannot be null"); + return questController.hasPlayerStartedQuest(this, quest); } @@ -70,7 +82,9 @@ public class QPlayer { * @return the quest start result -- {@code QuestStartResult.QUEST_SUCCESS} indicates success */ // TODO PlaceholderAPI support - public QuestStartResult startQuest(Quest quest) { + public @NotNull QuestStartResult startQuest(@NotNull Quest quest) { + Objects.requireNonNull(quest, "quest cannot be null"); + return questController.startQuestForPlayer(this, quest); } @@ -80,7 +94,9 @@ public class QPlayer { * @param quest the quest to start * @return true if the quest was cancelled, false otherwise */ - public boolean cancelQuest(Quest quest) { + public boolean cancelQuest(@NotNull Quest quest) { + Objects.requireNonNull(quest, "quest cannot be null"); + return questController.cancelQuestForPlayer(this, quest); } @@ -92,24 +108,48 @@ public class QPlayer { * @param quest the quest to check * @return the quest start result */ - public QuestStartResult canStartQuest(Quest quest) { + public @NotNull QuestStartResult canStartQuest(@NotNull Quest quest) { + Objects.requireNonNull(quest, "quest cannot be null"); + return questController.canPlayerStartQuest(this, quest); } - - public QuestProgressFile getQuestProgressFile() { + /** + * Get this players associated {@link QuestProgressFile} + * + * @return the quest progress file + */ + public @NotNull QuestProgressFile getQuestProgressFile() { return questProgressFile; } - public QPlayerPreferences getPlayerPreferences() { + /** + * Get this players associated {@link QPlayerPreferences} + * + * @return the players preferences + */ + public @NotNull QPlayerPreferences getPlayerPreferences() { return playerPreferences; } - public QuestController getQuestController() { + /** + * Get this players associated {@link QuestController}, usually the servers active quest controller + * + * @see QPlayerManager#getActiveQuestController() + * @return the quest controller for this player + */ + public @NotNull QuestController getQuestController() { return questController; } - public void setQuestController(QuestController questController) { + /** + * Sets this players associated {@link QuestController} + * + * @param questController new quest controller + */ + public void setQuestController(@NotNull QuestController questController) { + Objects.requireNonNull(questController, "questController cannot be null"); + this.questController = questController; } diff --git a/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerManager.java b/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerManager.java index 3f256c05..eac0f255 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerManager.java +++ b/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerManager.java @@ -5,9 +5,13 @@ import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFi import com.leonardobishop.quests.common.plugin.Quests; import com.leonardobishop.quests.common.questcontroller.QuestController; import com.leonardobishop.quests.common.storage.StorageProvider; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Collection; +import java.util.Collections; import java.util.Map; +import java.util.Objects; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -32,9 +36,11 @@ public class QPlayerManager { * Gets the QPlayer from a given UUID. * * @param uuid the uuid - * @return {@link QPlayer} if they are loaded + * @return {@link QPlayer} if they are loaded, otherwise null */ - public QPlayer getPlayer(UUID uuid) { + public @Nullable QPlayer getPlayer(@NotNull UUID uuid) { + Objects.requireNonNull(uuid, "uuid cannot be null"); + QPlayer qPlayer = qPlayers.get(uuid); if (qPlayer == null) { plugin.getQuestsLogger().debug("QPlayer of " + uuid + " is null, but was requested:"); @@ -50,7 +56,9 @@ public class QPlayerManager { * * @param uuid the uuid of the player */ - public void removePlayer(UUID uuid) { + public void removePlayer(@NotNull UUID uuid) { + Objects.requireNonNull(uuid, "uuid cannot be null"); + plugin.getQuestsLogger().debug("Unloading and saving player " + uuid + "."); qPlayers.computeIfPresent(uuid, (mapUUID, qPlayer) -> { savePlayer(uuid); @@ -64,7 +72,9 @@ public class QPlayerManager { * * @param uuid the uuid of the player */ - public void savePlayer(UUID uuid) { + public void savePlayer(@NotNull UUID uuid) { + Objects.requireNonNull(uuid, "uuid cannot be null"); + QPlayer qPlayer = getPlayer(uuid); if (qPlayer == null) return; savePlayer(uuid, qPlayer.getQuestProgressFile()); @@ -77,7 +87,10 @@ public class QPlayerManager { * @param uuid the uuid of the player * @param originalProgressFile the quest progress file to associate with and save */ - public void savePlayer(UUID uuid, QuestProgressFile originalProgressFile) { + public void savePlayer(@NotNull UUID uuid, @NotNull QuestProgressFile originalProgressFile) { + Objects.requireNonNull(uuid, "uuid cannot be null"); + Objects.requireNonNull(originalProgressFile, "originalProgressFile cannot be null"); + QuestProgressFile clonedProgressFile = new QuestProgressFile(originalProgressFile); originalProgressFile.resetModified(); plugin.getScheduler().doAsync(() -> save(uuid, clonedProgressFile)); @@ -89,7 +102,9 @@ public class QPlayerManager { * * @param uuid the uuid of the player */ - public void savePlayerSync(UUID uuid) { + public void savePlayerSync(@NotNull UUID uuid) { + Objects.requireNonNull(uuid, "uuid cannot be null"); + QPlayer qPlayer = getPlayer(uuid); if (qPlayer == null) return; savePlayerSync(uuid, qPlayer.getQuestProgressFile()); @@ -102,11 +117,14 @@ public class QPlayerManager { * @param uuid the uuid of the player * @param questProgressFile the quest progress file to associate with and save */ - public void savePlayerSync(UUID uuid, QuestProgressFile questProgressFile) { + public void savePlayerSync(@NotNull UUID uuid, @NotNull QuestProgressFile questProgressFile) { save(uuid, questProgressFile); } - private void save(UUID uuid, QuestProgressFile questProgressFile) { + private void save(@NotNull UUID uuid, @NotNull QuestProgressFile questProgressFile) { + Objects.requireNonNull(uuid, "uuid cannot be null"); + Objects.requireNonNull(questProgressFile, "questProgressFile cannot be null"); + plugin.getQuestsLogger().debug("Saving player " + uuid + "."); storageProvider.saveProgressFile(uuid, questProgressFile); } @@ -116,13 +134,20 @@ public class QPlayerManager { * * @param uuid the uuid of the player */ - public void dropPlayer(UUID uuid) { + public void dropPlayer(@NotNull UUID uuid) { + Objects.requireNonNull(uuid, "uuid cannot be null"); + plugin.getQuestsLogger().debug("Dropping player " + uuid + "."); qPlayers.remove(uuid); } + /** + * Gets all QPlayers loaded on the server + * + * @return immutable map of quest players + */ public Collection getQPlayers() { - return qPlayers.values(); + return Collections.unmodifiableCollection(qPlayers.values()); } /** diff --git a/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerPreferences.java b/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerPreferences.java index 5278ae09..db1e9230 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerPreferences.java +++ b/common/src/main/java/com/leonardobishop/quests/common/player/QPlayerPreferences.java @@ -1,5 +1,7 @@ package com.leonardobishop.quests.common.player; +import org.jetbrains.annotations.Nullable; + public class QPlayerPreferences { private String trackedQuestId; @@ -8,11 +10,11 @@ public class QPlayerPreferences { this.trackedQuestId = trackedQuestId; } - public String getTrackedQuestId() { + public @Nullable String getTrackedQuestId() { return trackedQuestId; } - public void setTrackedQuestId(String trackedQuestId) { + public void setTrackedQuestId(@Nullable String trackedQuestId) { this.trackedQuestId = trackedQuestId; } } diff --git a/common/src/main/java/com/leonardobishop/quests/common/plugin/Quests.java b/common/src/main/java/com/leonardobishop/quests/common/plugin/Quests.java index fbfd6813..862d9b95 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/plugin/Quests.java +++ b/common/src/main/java/com/leonardobishop/quests/common/plugin/Quests.java @@ -10,6 +10,7 @@ import com.leonardobishop.quests.common.scheduler.ServerScheduler; import com.leonardobishop.quests.common.storage.StorageProvider; import com.leonardobishop.quests.common.tasktype.TaskTypeManager; import com.leonardobishop.quests.common.updater.Updater; +import org.jetbrains.annotations.NotNull; public interface Quests { @@ -19,7 +20,7 @@ public interface Quests { * @see QuestsLogger * @return quests logger */ - QuestsLogger getQuestsLogger(); + @NotNull QuestsLogger getQuestsLogger(); /** * Obtain an instance of the QuestManager. @@ -27,7 +28,7 @@ public interface Quests { * @see QuestManager * @return quest manager */ - QuestManager getQuestManager(); + @NotNull QuestManager getQuestManager(); /** * Obtain an instance of the QPlayerManager. @@ -35,7 +36,7 @@ public interface Quests { * @see QPlayerManager * @return quest player manager */ - QPlayerManager getPlayerManager(); + @NotNull QPlayerManager getPlayerManager(); /** * Obtain an instance of the QuestController. @@ -43,7 +44,7 @@ public interface Quests { * @see QuestController * @return quest controller */ - QuestController getQuestController(); + @NotNull QuestController getQuestController(); /** * Obtain an instance of the TaskTypeManager. @@ -51,7 +52,7 @@ public interface Quests { * @see TaskTypeManager * @return task type manager */ - TaskTypeManager getTaskTypeManager(); + @NotNull TaskTypeManager getTaskTypeManager(); /** * Obtain an instance of the QuestCompleter. @@ -59,7 +60,7 @@ public interface Quests { * @see QuestCompleter * @return quest completer */ - QuestCompleter getQuestCompleter(); + @NotNull QuestCompleter getQuestCompleter(); /** * Obtain an instance of the QuestConfig. @@ -67,7 +68,7 @@ public interface Quests { * @see QuestsConfig * @return quest config */ - QuestsConfig getQuestsConfig(); + @NotNull QuestsConfig getQuestsConfig(); /** * Obtain an instance of the Updater. @@ -75,7 +76,7 @@ public interface Quests { * @see Updater * @return updater */ - Updater getUpdater(); + @NotNull Updater getUpdater(); /** * Obtain an instance of the ServerScheduler. @@ -83,7 +84,7 @@ public interface Quests { * @see ServerScheduler * @return server scheduler */ - ServerScheduler getScheduler(); + @NotNull ServerScheduler getScheduler(); /** * Obtain an instance of the StorageProvider. @@ -91,7 +92,7 @@ public interface Quests { * @see StorageProvider * @return storage provider */ - StorageProvider getStorageProvider(); + @NotNull StorageProvider getStorageProvider(); /** * Performs a full reload of the plugin, unloading and re-registering quests to their task types. diff --git a/common/src/main/java/com/leonardobishop/quests/common/quest/Category.java b/common/src/main/java/com/leonardobishop/quests/common/quest/Category.java index 7bd8f10d..25abcef0 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/quest/Category.java +++ b/common/src/main/java/com/leonardobishop/quests/common/quest/Category.java @@ -1,7 +1,11 @@ package com.leonardobishop.quests.common.quest; +import org.jetbrains.annotations.NotNull; + import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Objects; public class Category { @@ -14,20 +18,42 @@ public class Category { this.permissionRequired = permissionRequired; } - public String getId() { + /** + * Get the id of this category. + * + * @return id + */ + public @NotNull String getId() { return id; } + /** + * Get if a specific permission is required to open this category and start quests within it. + * This permission will be in the form of "quests.category.[category id]". + * + * @return boolean + */ public boolean isPermissionRequired() { return permissionRequired; } - public void registerQuestId(String questid) { - registeredQuestIds.add(questid); + /** + * Register a new quest ID to this category + * + * @param questId quest id to register + */ + public void registerQuestId(@NotNull String questId) { + Objects.requireNonNull(questId, "questId cannot be null"); + registeredQuestIds.add(questId); } - public List getRegisteredQuestIds() { - return registeredQuestIds; + /** + * Get quest IDs which are registered to this category + * + * @return immutable list of quest ids + */ + public @NotNull List getRegisteredQuestIds() { + return Collections.unmodifiableList(registeredQuestIds); } } diff --git a/common/src/main/java/com/leonardobishop/quests/common/quest/Quest.java b/common/src/main/java/com/leonardobishop/quests/common/quest/Quest.java index c1f6f47f..6a591e1d 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/quest/Quest.java +++ b/common/src/main/java/com/leonardobishop/quests/common/quest/Quest.java @@ -1,15 +1,20 @@ package com.leonardobishop.quests.common.quest; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; public class Quest implements Comparable { private final Map tasks = new HashMap<>(); + private final Map> tasksByType = new HashMap<>(); private String id; private List rewards; private List requirements; @@ -26,83 +31,196 @@ public class Quest implements Comparable { private Quest() { } - public void registerTask(Task task) { + /** + * Register a task to this quest. + * + * @param task the task to register + */ + public void registerTask(@NotNull Task task) { + Objects.requireNonNull(task, "task cannot be null"); + tasks.put(task.getId(), task); + tasksByType.compute(task.getType(), (type, list) -> { + if (list == null) { + return new ArrayList<>(Collections.singletonList(task)); + } else { + list.add(task); + return list; + } + }); } - public Collection getTasks() { - return tasks.values(); + /** + * Get all tasks registered to this quest. + * + * @return immutable list containing all {@link Task} + */ + public @NotNull Collection getTasks() { + return Collections.unmodifiableCollection(tasks.values()); } - public Task getTaskById(String id) { + /** + * Get a specific task registered to this quest. + * + * @param id task id + * @return {@link Task}, or null if not exists + */ + public @Nullable Task getTaskById(@NotNull String id) { + Objects.requireNonNull(id, "id cannot be null"); + return tasks.get(id); } - public List getTasksOfType(String type) { - List tasks = new ArrayList<>(); - for (Task task : getTasks()) { - if (task.getType().equals(type)) { - tasks.add(task); - } - } - return tasks; + /** + * Get a list of all task of a specific task type. + * + * @param type the task type + * @return list containing all tasks of type + */ + public @NotNull List getTasksOfType(String type) { + Objects.requireNonNull(type, "type cannot be null"); + + List list = tasksByType.get(type); + return list == null ? Collections.emptyList() : Collections.unmodifiableList(list); } + /** + * Get if a specific permission is required to start this quest. + * This permission will be in the form of "quests.quest.[quest id]". + * + * @return boolean + */ public boolean isPermissionRequired() { return permissionRequired; } - public List getRewardString() { - return rewardString; + /** + * Get the reward string of the quest. + * The reward string is a series of messages sent to the player upon completing the quest. + * + * @return immutable list of messages to send + */ + public @NotNull List getRewardString() { + return Collections.unmodifiableList(rewardString); } - public List getStartString() { - return startString; + /** + * Get the start string of the quest. + * The start string is a series of messages sent to the player upon starting the quest. + * + * @return immutable list of messages to send + */ + public @NotNull List getStartString() { + return Collections.unmodifiableList(startString); } - public String getId() { + /** + * Get the id of this quest. + * + * @return id + */ + public @NotNull String getId() { return id; } - public List getRewards() { - return rewards; + /** + * Get the rewards for this quest. + * The rewards is a list of commands to be executed upon completing the quest. + * + * @return immutable list of rewards + */ + public @NotNull List getRewards() { + return Collections.unmodifiableList(rewards); } - public List getRequirements() { - return requirements; + /** + * Get the requirements for this quest. + * The requirements is a list of quests ids the player must have completed at least once to start this quest. + * The quest ids may or may not represent actual quests and are only validated by the plugin with a warning. + * + * @return immutable list of quest requirements + */ + public @NotNull List getRequirements() { + return Collections.unmodifiableList(requirements); } + /** + * Get if this quest can be repeated after completion. + * + * @return boolean + */ public boolean isRepeatable() { return repeatEnabled; } + /** + * Get if this quest has a cooldown enabled after completion. + * Whether or not the quest enters a cooldown phase for the player depends + * on if it is repeatable in the first place: {@link Quest#isRepeatable()} + * + * @return boolean + */ public boolean isCooldownEnabled() { return cooldownEnabled; } + /** + * Get the cooldown for this quest between completing and restarting the quest. + * Whether or not this cooldown is in use depends on {@link Quest#isCooldownEnabled()}. + * + * @return the cooldown, in seconds + */ public int getCooldown() { return cooldown; } - public String getCategoryId() { + /** + * Get the category id this quest is in. + * + * @return the category id, or null + */ + public @Nullable String getCategoryId() { return categoryid; } - public Map getPlaceholders() { - return placeholders; + /** + * Get the local placeholders for this quest, which is exposed to PlaceholderAPI. + * + * @return immutable map of placeholders + */ + public @NotNull Map getPlaceholders() { + return Collections.unmodifiableMap(placeholders); } + /** + * Get the sort order for this quest in the GUI. + * Numbers closer to Integer.MIN_VALUE have greater priority. + * + * @return any integer, both negative or positive + */ public int getSortOrder() { return sortOrder; } + /** + * Get if quest-specific autostart is enabled for this quest. + * + * @return boolean + */ public boolean isAutoStartEnabled() { return autoStartEnabled; } + /** + * Compare the sort orders for this quest with another quest. + * + * @see Comparable#compareTo(Object) + * @param quest the quest to compare with + * @return a negative integer, zero, or a positive integer + */ @Override - public int compareTo(Quest quest) { + public int compareTo(@NotNull Quest quest) { return (sortOrder - quest.sortOrder); } diff --git a/common/src/main/java/com/leonardobishop/quests/common/quest/QuestCompleter.java b/common/src/main/java/com/leonardobishop/quests/common/quest/QuestCompleter.java index cc498df9..704ec6e9 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/quest/QuestCompleter.java +++ b/common/src/main/java/com/leonardobishop/quests/common/quest/QuestCompleter.java @@ -2,6 +2,7 @@ package com.leonardobishop.quests.common.quest; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile; +import org.jetbrains.annotations.NotNull; /** * The quest completer is responsible for checking each player for completed quests. Implementations may split @@ -9,7 +10,18 @@ import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFi */ public interface QuestCompleter { - void queueSingular(QuestProgress questProgress); - void queueFullCheck(QuestProgressFile questProgressFile); + /** + * Queue an individual quest progress to check if the quest is completed. + * + * @param questProgress the questprogress to check + */ + void queueSingular(@NotNull QuestProgress questProgress); + + /** + * Queue a quest progress file for a full check if they have completed any quests. + * + * @param questProgressFile the questprogressfile to check + */ + void queueFullCheck(@NotNull QuestProgressFile questProgressFile); } diff --git a/common/src/main/java/com/leonardobishop/quests/common/quest/QuestManager.java b/common/src/main/java/com/leonardobishop/quests/common/quest/QuestManager.java index af2afa52..2a569b2e 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/quest/QuestManager.java +++ b/common/src/main/java/com/leonardobishop/quests/common/quest/QuestManager.java @@ -1,11 +1,15 @@ package com.leonardobishop.quests.common.quest; import com.leonardobishop.quests.common.plugin.Quests; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Objects; /** * The quests manager stores all present Quests and Categories on the server and is used as a registry. @@ -13,40 +17,81 @@ import java.util.Map; public class QuestManager { private final Quests plugin; + private final Map quests = new LinkedHashMap<>(); + private final List categories = new ArrayList<>(); public QuestManager(Quests plugin) { this.plugin = plugin; } - private Map quests = new LinkedHashMap<>(); - private List categories = new ArrayList<>(); + /** + * Register a quest with the quest manager + * + * @param quest the category to register + */ + public void registerQuest(@NotNull Quest quest) { + Objects.requireNonNull(quest, "quest cannot be null"); - public void registerQuest(Quest quest) { quests.put(quest.getId(), quest); } - public Quest getQuestById(String id) { + /** + * @param id id to match + * @return {@link Quest}, or null + */ + public @Nullable Quest getQuestById(@NotNull String id) { + Objects.requireNonNull(id, "id cannot be null"); + return quests.get(id); } - public Map getQuests() { - return quests; + /** + * Get a map of id-quest of all quests registered + * @return immutable map of all {@link Quest} + */ + public @NotNull Map getQuests() { + return Collections.unmodifiableMap(quests); } - public void registerCategory(Category category) { categories.add(category); } + /** + * Register a category with the quest manager + * + * @param category the category to register + */ + public void registerCategory(@NotNull Category category) { + Objects.requireNonNull(category, "category cannot be null"); + + categories.add(category); + } - public List getCategories() { - return categories; + /** + * @return immutable list of all {@link Category} + */ + public @NotNull List getCategories() { + return Collections.unmodifiableList(categories); } - public Category getCategoryById(String id) { + /** + * Get a specific category by id + * + * @param id the id + * @return {@link Category}, or null + */ + public @Nullable Category getCategoryById(@NotNull String id) { + Objects.requireNonNull(id, "id cannot be null"); + for (Category category : categories) { if (category.getId().equals(id)) return category; } return null; } - public Quests getPlugin() { - return this.plugin; + /** + * Reset the quest manager and clears all registered quests and categories + */ + public void clear() { + quests.clear(); + categories.clear(); } + } diff --git a/common/src/main/java/com/leonardobishop/quests/common/quest/Task.java b/common/src/main/java/com/leonardobishop/quests/common/quest/Task.java index 8189e06e..6e27aef6 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/quest/Task.java +++ b/common/src/main/java/com/leonardobishop/quests/common/quest/Task.java @@ -1,7 +1,12 @@ package com.leonardobishop.quests.common.quest; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.Objects; public class Task { @@ -14,27 +19,62 @@ public class Task { this.type = type; } - public String getId() { + /** + * @return the id of this task + */ + public @NotNull String getId() { return id; } - public String getType() { + /** + * @return the configured task type for this task + */ + public @NotNull String getType() { return type; } - public Object getConfigValue(String key) { + /** + * Get a specific configuration value for this task + * + * @param key key of config value to get + * @return config value, or null + */ + public @Nullable Object getConfigValue(@NotNull String key) { + Objects.requireNonNull(key, "key cannot be null"); + return configValues.getOrDefault(key, null); //??? this will return null without the need of `OrDefault(key, null)` } - public Object getConfigValue(String key, Object def) { + /** + * Get a specific configuration value for this task + * + * @param key key of config value to get + * @param def default value if null + * @return config value, or null + */ + public @Nullable Object getConfigValue(@NotNull String key, @Nullable Object def) { + Objects.requireNonNull(key, "key cannot be null"); + return configValues.getOrDefault(key, def); } - public Map getConfigValues() { - return configValues; + /** + * @return immutable list containing all config values + */ + public @NotNull Map getConfigValues() { + return Collections.unmodifiableMap(configValues); } - public void addConfigValue(String key, Object value) { + /** + * Add a key-value pair to this tasks configuration + * + * @param key key + * @param value value + */ + public void addConfigValue(@NotNull String key, @NotNull Object value) { + Objects.requireNonNull(key, "key cannot be null"); + Objects.requireNonNull(value, "value cannot be null"); + configValues.put(key, value); } diff --git a/common/src/main/java/com/leonardobishop/quests/common/storage/StorageProvider.java b/common/src/main/java/com/leonardobishop/quests/common/storage/StorageProvider.java index 26cca4be..bd558c4e 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/storage/StorageProvider.java +++ b/common/src/main/java/com/leonardobishop/quests/common/storage/StorageProvider.java @@ -1,6 +1,8 @@ package com.leonardobishop.quests.common.storage; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.UUID; @@ -14,8 +16,19 @@ public interface StorageProvider { void shutdown(); - QuestProgressFile loadProgressFile(UUID uuid); - - void saveProgressFile(UUID uuid, QuestProgressFile questProgressFile); + /** + * Load a QuestProgressFile from the data source by a specific UUID + * + * @param uuid the UUID to load + * @return {@link QuestProgressFile} or null + */ + @Nullable QuestProgressFile loadProgressFile(@NotNull UUID uuid); + + /** + * Save a QuestProgressFile to the data source with a specific UUID + * @param uuid the uuid to match the file to + * @param questProgressFile the file to save + */ + void saveProgressFile(@NotNull UUID uuid, @NotNull QuestProgressFile questProgressFile); } diff --git a/common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskType.java b/common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskType.java index 79c7a0b0..efa62733 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskType.java +++ b/common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskType.java @@ -3,11 +3,14 @@ package com.leonardobishop.quests.common.tasktype; import com.leonardobishop.quests.common.config.ConfigProblem; import com.leonardobishop.quests.common.quest.Quest; import com.leonardobishop.quests.common.quest.Task; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Objects; import java.util.UUID; /** @@ -28,8 +31,8 @@ public abstract class TaskType { * @param author the name of the person (or people) who wrote it * @param description a short, simple description of the task type */ - public TaskType(String type, String author, String description) { - this.type = type; + public TaskType(@NotNull String type, String author, String description) { + this(type); this.author = author; this.description = description; } @@ -37,7 +40,9 @@ public abstract class TaskType { /** * @param type the name of the task type, should not contain spaces */ - public TaskType(String type) { + public TaskType(@NotNull String type) { + Objects.requireNonNull(type, "type cannot be null"); + this.type = type; } @@ -47,7 +52,9 @@ public abstract class TaskType { * * @param quest the {@link Quest} to register. */ - public final void registerQuest(Quest quest) { + public final void registerQuest(@NotNull Quest quest) { + Objects.requireNonNull(quest, "quest cannot be null"); + if (!quests.contains(quest)) { quests.add(quest); } @@ -56,39 +63,39 @@ public abstract class TaskType { /** * Clears the list which contains the registered quests. */ - public final void unregisterAll() { + protected final void unregisterAll() { quests.clear(); } /** - * @return {@link List} of type {@link Quest} of all registered quests. + * @return immutable {@link List} of type {@link Quest} of all registered quests. */ - public final List getRegisteredQuests() { - return quests; + public final @NotNull List getRegisteredQuests() { + return Collections.unmodifiableList(quests); } - public final String getType() { + public final @NotNull String getType() { return type; } - public String getAuthor() { + public @Nullable String getAuthor() { return author; } - public String getDescription() { + public @Nullable String getDescription() { return description; } /** - * Called when Quests has finished registering all quests to the task type - * May be called several times if an operator uses /quests admin reload + * Called when Quests has finished registering all quests to the task type. + * May be called several times if an operator uses /quests admin reload. */ public void onReady() { // not implemented here } /** - * Called when a player starts a quest containing a task of this type + * Called when a player starts a quest containing a task of this type. */ public void onStart(Quest quest, Task task, UUID playerUUID) { // not implemented here @@ -99,9 +106,12 @@ public abstract class TaskType { } /** - * Called when Quests reloads the configuration - used to detect errors in the configuration of your task type + * Called when Quests reloads the configuration - used to detect errors in the configuration of your task type. + * + * @param root the root path for the config + * @param config the config itself */ - public List validateConfig(String root, HashMap config) { + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { // not implemented here return Collections.emptyList(); } diff --git a/common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskTypeManager.java b/common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskTypeManager.java index 284a1e0a..775d635a 100644 --- a/common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskTypeManager.java +++ b/common/src/main/java/com/leonardobishop/quests/common/tasktype/TaskTypeManager.java @@ -3,8 +3,13 @@ package com.leonardobishop.quests.common.tasktype; import com.leonardobishop.quests.common.plugin.Quests; import com.leonardobishop.quests.common.quest.Quest; import com.leonardobishop.quests.common.quest.Task; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; /** * The task type manager stores all registered task types and registers individual quests to each task type. @@ -30,17 +35,30 @@ public abstract class TaskTypeManager { return allowRegistrations; } - public ArrayList getTaskTypes() { - return taskTypes; + /** + * @return immutable {@link List} containing all registered {@link TaskType} + */ + public @NotNull List getTaskTypes() { + return Collections.unmodifiableList(taskTypes); } + /** + * Resets all quest to task type registrations. This does not clear the task types registered to the task type manager. + */ public void resetTaskTypes() { for (TaskType taskType : taskTypes) { - taskType.getRegisteredQuests().clear(); + taskType.unregisterAll(); } } - public void registerTaskType(TaskType taskType) { + /** + * Register a task type with the task type manager. + * + * @param taskType the task type to register + */ + public void registerTaskType(@NotNull TaskType taskType) { + Objects.requireNonNull(taskType, "taskType cannot be null"); + if (!allowRegistrations) { throw new IllegalStateException("No longer accepting new task types (must be done before quests are loaded)"); } @@ -48,7 +66,14 @@ public abstract class TaskTypeManager { taskTypes.add(taskType); } - public void registerQuestTasksWithTaskTypes(Quest quest) { + /** + * Register a quest with its task types. This will register the quest to each task type it contains. + * + * @param quest the quest to register + */ + public void registerQuestTasksWithTaskTypes(@NotNull Quest quest) { + Objects.requireNonNull(quest, "quest cannot be null"); + if (allowRegistrations) { throw new IllegalStateException("Still accepting new task types (type registrations must be closed before registering quests)"); } @@ -60,9 +85,17 @@ public abstract class TaskTypeManager { } } - public TaskType getTaskType(String string) { + /** + * Get a registered task type by type + * + * @param type the type to check + * @return {@link TaskType} + */ + public @Nullable TaskType getTaskType(@NotNull String type) { + Objects.requireNonNull(type, "type cannot be null"); + for (TaskType taskType : taskTypes) { - if (taskType.getType().equalsIgnoreCase(string)) { + if (taskType.getType().equalsIgnoreCase(type)) { return taskType; } } -- cgit v1.2.3-70-g09d2