diff options
Diffstat (limited to 'src/main/java')
63 files changed, 674 insertions, 760 deletions
diff --git a/src/main/java/com/leonardobishop/quests/QuestCompleter.java b/src/main/java/com/leonardobishop/quests/QuestCompleter.java index 97357126..09c9b01d 100644 --- a/src/main/java/com/leonardobishop/quests/QuestCompleter.java +++ b/src/main/java/com/leonardobishop/quests/QuestCompleter.java @@ -35,13 +35,12 @@ public class QuestCompleter implements Runnable { Player player = Bukkit.getPlayer(questProgress.getPlayer()); if (player != null && player.isOnline()) { QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); Quest quest = plugin.getQuestManager().getQuestById(questProgress.getQuestId()); - if (!questProgressFile.hasStartedQuest(quest)) return; + if (!qPlayer.hasStartedQuest(quest)) return; if (checkComplete(quest, questProgress)) { - questProgressFile.completeQuest(quest); + qPlayer.completeQuest(quest); } } } @@ -52,10 +51,11 @@ public class QuestCompleter implements Runnable { Player player = Bukkit.getPlayer(questProgressFile.getPlayerUUID()); if (player != null && player.isOnline()) { + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); for (QuestProgress questProgress : questProgressFile.getAllQuestProgress()) { Quest quest = plugin.getQuestManager().getQuestById(questProgress.getQuestId()); if (quest == null) continue; - if (!questProgressFile.hasStartedQuest(quest)) continue; + if (!qPlayer.hasStartedQuest(quest)) continue; boolean complete = true; for (Task task : quest.getTasks()) { @@ -66,7 +66,7 @@ public class QuestCompleter implements Runnable { } } if (complete) { - questProgressFile.completeQuest(quest); + qPlayer.completeQuest(quest); } } } diff --git a/src/main/java/com/leonardobishop/quests/Quests.java b/src/main/java/com/leonardobishop/quests/Quests.java index 1da974a3..cbf802fb 100644 --- a/src/main/java/com/leonardobishop/quests/Quests.java +++ b/src/main/java/com/leonardobishop/quests/Quests.java @@ -76,21 +76,34 @@ import java.util.ArrayList; public class Quests extends JavaPlugin { - private static QuestManager questManager; - private static QPlayerManager qPlayerManager; - private static TaskTypeManager taskTypeManager; - private static Quests instance; - private static Updater updater; - private static Title title; + + /** Handles anything to do with loaded quests */ + private QuestManager questManager; + /** Handles anything to do with task types */ + private TaskTypeManager taskTypeManager; + /** Handles anything to do with players */ + private QPlayerManager qPlayerManager; + + /** Checks and records ready plugin updates */ + private Updater updater; + /** Abstract title handle to allow for cross version compatibility */ + private Title titleHandle; + /** Abstract item handle to allow for cross version compatibility */ private ItemGetter itemGetter; + /** Task which checks quests and marks them as complete if requirements are satisfied */ private QuestCompleter questCompleter; + /** Loads configurations and tracks errors */ private QuestsConfigLoader questsConfigLoader; + /** Quests logger to allow for configurable logging levels */ private QuestsLogger questsLogger; + /** Handles menu tracking and clicks */ + private MenuController menuController; private IPlaceholderAPIHook placeholderAPIHook; private ICoreProtectHook coreProtectHook; + /** If true, the plugin should be inoperable */ private boolean brokenConfig = false; private BukkitTask questAutosaveTask; private BukkitTask questQueuePollTask; @@ -119,8 +132,8 @@ public class Quests extends JavaPlugin { this.brokenConfig = brokenConfig; } - public Title getTitle() { - return title; + public Title getTitleHandle() { + return titleHandle; } public Updater getUpdater() { @@ -131,6 +144,10 @@ public class Quests extends JavaPlugin { return questsConfigLoader; } + public MenuController getMenuController() { + return menuController; + } + public String convertToFormat(long m) { //seconds please long hours = m / 3600; long minutes = (m % 3600) / 60; @@ -152,13 +169,14 @@ public class Quests extends JavaPlugin { taskTypeManager = new TaskTypeManager(this); questManager = new QuestManager(this); qPlayerManager = new QPlayerManager(this); + menuController = new MenuController(this); - dataGenerator(); - setupVersionSpecific(); + this.generateConfigurations(); + this.setupVersionSpecific(); super.getCommand("quests").setExecutor(new CommandQuests(this)); Bukkit.getPluginManager().registerEvents(new EventPlayerJoin(this), this); - Bukkit.getPluginManager().registerEvents(new MenuController(this), this); + Bukkit.getPluginManager().registerEvents(menuController, this); Bukkit.getPluginManager().registerEvents(new EventPlayerLeave(this), this); Metrics metrics = new Metrics(this); @@ -171,26 +189,26 @@ public class Quests extends JavaPlugin { // register task types after the server has fully started Bukkit.getScheduler().runTask(this, () -> { taskTypeManager.registerTaskType(new MiningTaskType()); - taskTypeManager.registerTaskType(new MiningCertainTaskType()); + taskTypeManager.registerTaskType(new MiningCertainTaskType(this)); taskTypeManager.registerTaskType(new BuildingTaskType()); taskTypeManager.registerTaskType(new BuildingCertainTaskType()); taskTypeManager.registerTaskType(new MobkillingTaskType()); taskTypeManager.registerTaskType(new MobkillingCertainTaskType()); taskTypeManager.registerTaskType(new PlayerkillingTaskType()); taskTypeManager.registerTaskType(new FishingTaskType()); - taskTypeManager.registerTaskType(new InventoryTaskType()); + taskTypeManager.registerTaskType(new InventoryTaskType(this)); taskTypeManager.registerTaskType(new WalkingTaskType()); taskTypeManager.registerTaskType(new TamingTaskType()); taskTypeManager.registerTaskType(new MilkingTaskType()); taskTypeManager.registerTaskType(new ShearingTaskType()); taskTypeManager.registerTaskType(new PositionTaskType()); - taskTypeManager.registerTaskType(new PlaytimeTaskType()); + taskTypeManager.registerTaskType(new PlaytimeTaskType(this)); taskTypeManager.registerTaskType(new BrewingTaskType()); taskTypeManager.registerTaskType(new ExpEarnTaskType()); taskTypeManager.registerTaskType(new BreedingTaskType()); taskTypeManager.registerTaskType(new EnchantingTaskType()); taskTypeManager.registerTaskType(new DealDamageTaskType()); - taskTypeManager.registerTaskType(new PermissionTaskType()); + taskTypeManager.registerTaskType(new PermissionTaskType(this)); taskTypeManager.registerTaskType(new DistancefromTaskType()); taskTypeManager.registerTaskType(new CommandTaskType()); // TODO: FIX @@ -208,14 +226,14 @@ public class Quests extends JavaPlugin { taskTypeManager.registerTaskType(new uSkyBlockLevelType()); } if (Bukkit.getPluginManager().isPluginEnabled("Citizens")) { - taskTypeManager.registerTaskType(new CitizensDeliverTaskType()); + taskTypeManager.registerTaskType(new CitizensDeliverTaskType(this)); taskTypeManager.registerTaskType(new CitizensInteractTaskType()); } if (Bukkit.getPluginManager().isPluginEnabled("MythicMobs")) { taskTypeManager.registerTaskType(new MythicMobsKillingType()); } if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) { - taskTypeManager.registerTaskType(new PlaceholderAPIEvaluateTaskType()); + taskTypeManager.registerTaskType(new PlaceholderAPIEvaluateTaskType(this)); } if (Bukkit.getPluginManager().isPluginEnabled("Essentials")) { taskTypeManager.registerTaskType(new EssentialsMoneyEarnTaskType()); @@ -259,7 +277,7 @@ public class Quests extends JavaPlugin { } catch (Throwable ignored) { } - updater = new Updater(this); + updater = new Updater(this, !ignoreUpdates); if (!ignoreUpdates) { Bukkit.getScheduler().runTaskAsynchronously(this, () -> { updater.check(); @@ -309,9 +327,7 @@ public class Quests extends JavaPlugin { } } if (autosaveTaskCancelled) { - questAutosaveTask = Bukkit.getScheduler().runTaskTimer(this, () -> { - new QuestsAutosaveRunnable(this); - }, autosaveInterval, autosaveInterval); + questAutosaveTask = Bukkit.getScheduler().runTaskTimer(this, () -> new QuestsAutosaveRunnable(this), autosaveInterval, autosaveInterval); } boolean queuePollTaskCancelled = true; @@ -346,7 +362,7 @@ public class Quests extends JavaPlugin { version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3]; } catch (ArrayIndexOutOfBoundsException e) { getQuestsLogger().warning("Failed to resolve server version - some features will not work!"); - title = new Title_Other(); + titleHandle = new Title_Other(); itemGetter = new ItemGetter_Late_1_8(); return; } @@ -354,11 +370,11 @@ public class Quests extends JavaPlugin { getQuestsLogger().info("Your server is running version " + version + "."); if (version.startsWith("v1_7")) { - title = new Title_Other(); + titleHandle = new Title_Other(); } else if (version.startsWith("v1_8") || version.startsWith("v1_9") || version.startsWith("v1_10")) { - title = new Title_BukkitNoTimings(); + titleHandle = new Title_BukkitNoTimings(); } else { - title = new Title_Bukkit(); + titleHandle = new Title_Bukkit(); } if (version.startsWith("v1_7") || version.startsWith("v1_8") || version.startsWith("v1_9") @@ -370,16 +386,16 @@ public class Quests extends JavaPlugin { itemGetter = new ItemGetterLatest(); } - if (title instanceof Title_Bukkit) { + if (titleHandle instanceof Title_Bukkit) { getQuestsLogger().info("Titles have been enabled."); - } else if (title instanceof Title_BukkitNoTimings) { + } 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 dataGenerator() { + private void generateConfigurations() { File directory = new File(String.valueOf(this.getDataFolder())); if (!directory.exists() && !directory.isDirectory()) { directory.mkdir(); @@ -389,7 +405,6 @@ public class Quests extends JavaPlugin { if (!config.exists()) { try { config.createNewFile(); - //try (InputStream in = Quests.class.getClassLoader().getResourceAsStream("config.yml")) { try (InputStream in = this.getResource("config.yml")) { OutputStream out = new FileOutputStream(config); byte[] buffer = new byte[1024]; @@ -398,7 +413,6 @@ public class Quests extends JavaPlugin { out.write(buffer, 0, lenght); lenght = in.read(buffer); } - //ByteStreams.copy(in, out); BETA method, data losses ahead } catch (IOException e) { e.printStackTrace(); } @@ -425,7 +439,6 @@ public class Quests extends JavaPlugin { File file = new File(this.getDataFolder() + File.separator + "quests" + File.separator + name); try { file.createNewFile(); - //try (InputStream in = Quests.class.getClassLoader().getResourceAsStream("quests/" + name)) { try (InputStream in = this.getResource("quests/" + name)) { OutputStream out = new FileOutputStream(file); byte[] buffer = new byte[1024]; @@ -434,7 +447,6 @@ public class Quests extends JavaPlugin { out.write(buffer, 0, lenght); lenght = in.read(buffer); } - //ByteStreams.copy(in, out); BETA method, data losses ahead } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/com/leonardobishop/quests/QuestsAutosaveRunnable.java b/src/main/java/com/leonardobishop/quests/QuestsAutosaveRunnable.java index c7688e8e..551d2ead 100644 --- a/src/main/java/com/leonardobishop/quests/QuestsAutosaveRunnable.java +++ b/src/main/java/com/leonardobishop/quests/QuestsAutosaveRunnable.java @@ -41,5 +41,4 @@ public class QuestsAutosaveRunnable extends BukkitRunnable { } } - } diff --git a/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java b/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java index 0b6fd924..2b769373 100644 --- a/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java +++ b/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java @@ -133,7 +133,7 @@ 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.getQuestProgressFile().getPlayerPreferences().getTrackedQuestId()); + quest = plugin.getQuestManager().getQuestById(qPlayer.getPlayerPreferences().getTrackedQuestId()); if (quest == null) { if (args.length == 1) { return "No tracked quest"; @@ -176,7 +176,7 @@ public class QuestsPlaceholders extends PlaceholderExpansion implements Cacheabl } break; case "canaccept": - result = (qPlayer.getQuestProgressFile().canStartQuest(quest) == QuestStartResult.QUEST_SUCCESS ? "true" : "false"); + result = (qPlayer.canStartQuest(quest) == QuestStartResult.QUEST_SUCCESS ? "true" : "false"); break; case "meetsrequirements": result = (qPlayer.getQuestProgressFile().hasMetRequirements(quest) ? "true" : "false"); diff --git a/src/main/java/com/leonardobishop/quests/api/events/PlayerStartTrackQuestEvent.java b/src/main/java/com/leonardobishop/quests/api/events/PlayerStartTrackQuestEvent.java index f16d755d..70b14dce 100644 --- a/src/main/java/com/leonardobishop/quests/api/events/PlayerStartTrackQuestEvent.java +++ b/src/main/java/com/leonardobishop/quests/api/events/PlayerStartTrackQuestEvent.java @@ -1,22 +1,23 @@ package com.leonardobishop.quests.api.events; +import com.leonardobishop.quests.player.QPlayer; import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile; import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; import org.bukkit.event.player.PlayerEvent; import org.jetbrains.annotations.NotNull; -public class PlayerStartTrackQuestEvent extends PlayerEvent { +public class PlayerStartTrackQuestEvent extends PlayerQuestEvent { private final static HandlerList handlers = new HandlerList(); - private final QuestProgressFile questProgressFile; + private final QPlayer qPlayer; - public PlayerStartTrackQuestEvent(@NotNull Player who, QuestProgressFile questProgressFile) { - super(who); - this.questProgressFile = questProgressFile; + public PlayerStartTrackQuestEvent(@NotNull Player who, QPlayer qPlayer) { + super(who, qPlayer); + this.qPlayer = qPlayer; } - public QuestProgressFile getQuestProgressFile() { - return questProgressFile; + public QPlayer getQPlayer() { + return qPlayer; } @NotNull diff --git a/src/main/java/com/leonardobishop/quests/api/events/PlayerStopTrackQuestEvent.java b/src/main/java/com/leonardobishop/quests/api/events/PlayerStopTrackQuestEvent.java index b9f2114e..42b3d263 100644 --- a/src/main/java/com/leonardobishop/quests/api/events/PlayerStopTrackQuestEvent.java +++ b/src/main/java/com/leonardobishop/quests/api/events/PlayerStopTrackQuestEvent.java @@ -1,23 +1,24 @@ package com.leonardobishop.quests.api.events; +import com.leonardobishop.quests.player.QPlayer; import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile; import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; import org.bukkit.event.player.PlayerEvent; import org.jetbrains.annotations.NotNull; -public class PlayerStopTrackQuestEvent extends PlayerEvent { +public class PlayerStopTrackQuestEvent extends PlayerQuestEvent { private final static HandlerList handlers = new HandlerList(); - private final QuestProgressFile questProgressFile; + private final QPlayer qPlayer; - public PlayerStopTrackQuestEvent(@NotNull Player who, QuestProgressFile questProgressFile) { - super(who); - this.questProgressFile = questProgressFile; + public PlayerStopTrackQuestEvent(@NotNull Player who, QPlayer qPlayer) { + super(who, qPlayer); + this.qPlayer = qPlayer; } - public QuestProgressFile getQuestProgressFile() { - return questProgressFile; + public QPlayer getQPlayer() { + return qPlayer; } @NotNull diff --git a/src/main/java/com/leonardobishop/quests/commands/CommandQuests.java b/src/main/java/com/leonardobishop/quests/commands/CommandQuests.java index ef5274a4..178f0390 100644 --- a/src/main/java/com/leonardobishop/quests/commands/CommandQuests.java +++ b/src/main/java/com/leonardobishop/quests/commands/CommandQuests.java @@ -330,12 +330,12 @@ public class CommandQuests implements TabExecutor { return true; } if (args[2].equalsIgnoreCase("reset")) { - questProgressFile.generateBlankQuestProgress(quest.getId()); + questProgressFile.generateBlankQuestProgress(quest); questProgressFile.saveToDisk(false); sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_RESET_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); success = true; } else if (args[2].equalsIgnoreCase("start")) { - QuestStartResult response = questProgressFile.startQuest(quest); + QuestStartResult response = qPlayer.startQuest(quest); if (response == QuestStartResult.QUEST_LIMIT_REACHED) { sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILLIMIT.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); return true; @@ -362,7 +362,7 @@ public class CommandQuests implements TabExecutor { sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); success = true; } else if (args[2].equalsIgnoreCase("complete")) { - questProgressFile.completeQuest(quest); + qPlayer.completeQuest(quest); questProgressFile.saveToDisk(false); sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_COMPLETE_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); success = true; @@ -392,11 +392,11 @@ public class CommandQuests implements TabExecutor { sender.sendMessage(Messages.COMMAND_QUEST_GENERAL_DOESNTEXIST.getMessage().replace("{quest}", args[1])); } if (args[2].equalsIgnoreCase("s") || args[2].equalsIgnoreCase("start")) { - qPlayer.getQuestProgressFile().startQuest(quest); + qPlayer.startQuest(quest); } else if (args[2].equalsIgnoreCase("c") || args[2].equalsIgnoreCase("cancel")) { - qPlayer.getQuestProgressFile().cancelQuest(quest); + qPlayer.cancelQuest(quest); } else if (args[2].equalsIgnoreCase("t") || args[2].equalsIgnoreCase("track")) { - qPlayer.getQuestProgressFile().trackQuest(quest); + qPlayer.trackQuest(quest); } else { sender.sendMessage(Messages.COMMAND_SUB_DOESNTEXIST.getMessage().replace("{sub}", args[2])); } @@ -428,7 +428,7 @@ public class CommandQuests implements TabExecutor { } List<Quest> validQuests = new ArrayList<>(); for (Quest quest : plugin.getQuestManager().getQuests().values()) { - if (qPlayer.getQuestProgressFile().canStartQuest(quest) == QuestStartResult.QUEST_SUCCESS) { + if (qPlayer.canStartQuest(quest) == QuestStartResult.QUEST_SUCCESS) { validQuests.add(quest); } } @@ -438,7 +438,7 @@ public class CommandQuests implements TabExecutor { return true; } int random = ThreadLocalRandom.current().nextInt(0, validQuests.size()); - qPlayer.getQuestProgressFile().startQuest(validQuests.get(random)); + qPlayer.startQuest(validQuests.get(random)); return true; } else if (sender instanceof Player && (args[0].equalsIgnoreCase("started"))) { Player player = (Player) sender; diff --git a/src/main/java/com/leonardobishop/quests/events/EventPlayerJoin.java b/src/main/java/com/leonardobishop/quests/events/EventPlayerJoin.java index 143046be..8e718975 100644 --- a/src/main/java/com/leonardobishop/quests/events/EventPlayerJoin.java +++ b/src/main/java/com/leonardobishop/quests/events/EventPlayerJoin.java @@ -23,8 +23,7 @@ public class EventPlayerJoin implements Listener { @EventHandler(priority = EventPriority.MONITOR) public void onAsyncJoin(AsyncPlayerPreLoginEvent event) { if (!Options.QUEST_JOIN_ASYNC.getBooleanValue()) return; - UUID playerUuid = event.getUniqueId(); - plugin.getPlayerManager().loadPlayer(playerUuid); + plugin.getPlayerManager().loadPlayer(event.getUniqueId()); } @EventHandler diff --git a/src/main/java/com/leonardobishop/quests/events/EventPlayerLeave.java b/src/main/java/com/leonardobishop/quests/events/EventPlayerLeave.java index 2253cbec..e3c714a4 100644 --- a/src/main/java/com/leonardobishop/quests/events/EventPlayerLeave.java +++ b/src/main/java/com/leonardobishop/quests/events/EventPlayerLeave.java @@ -5,8 +5,6 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerQuitEvent; -import java.util.UUID; - public class EventPlayerLeave implements Listener { private final Quests plugin; @@ -17,8 +15,7 @@ public class EventPlayerLeave implements Listener { @EventHandler public void onEvent(PlayerQuitEvent event) { - UUID playerUuid = event.getPlayer().getUniqueId(); - plugin.getPlayerManager().removePlayer(playerUuid); + plugin.getPlayerManager().removePlayer(event.getPlayer().getUniqueId()); } } diff --git a/src/main/java/com/leonardobishop/quests/events/MenuController.java b/src/main/java/com/leonardobishop/quests/events/MenuController.java index a6d498ae..12f35baa 100644 --- a/src/main/java/com/leonardobishop/quests/events/MenuController.java +++ b/src/main/java/com/leonardobishop/quests/events/MenuController.java @@ -2,51 +2,37 @@ package com.leonardobishop.quests.events; import com.leonardobishop.quests.Quests; import com.leonardobishop.quests.menu.QMenu; -import com.leonardobishop.quests.menu.QMenuCancel; -import com.leonardobishop.quests.quests.Quest; -import com.leonardobishop.quests.util.Options; -import org.bukkit.entity.Player; +import org.bukkit.entity.HumanEntity; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryType; -import java.util.ArrayList; import java.util.HashMap; import java.util.UUID; public class MenuController implements Listener { - private static final HashMap<UUID, QMenu> tracker = new HashMap<>(); - private static final ArrayList<UUID> buffer = new ArrayList<>(); - + private final HashMap<UUID, QMenu> tracker = new HashMap<>(); private final Quests plugin; public MenuController(Quests plugin) { this.plugin = plugin; } - /** - * Add a player to the tracker so the event can watch them in the menu. - * - * @param uuid UUID of player to track - * @param qMenu The menu they have open - */ - public static void track(UUID uuid, QMenu qMenu) { - tracker.put(uuid, qMenu); - } - - public HashMap<UUID, QMenu> getTracker() { - return tracker; + public void openMenu(HumanEntity player, QMenu qMenu, int page) { + player.openInventory(qMenu.toInventory(page)); + tracker.put(player.getUniqueId(), qMenu); } - public ArrayList<UUID> getBuffer() { - return buffer; + @EventHandler + private void onClose(InventoryCloseEvent event) { + tracker.remove(event.getPlayer().getUniqueId()); } @EventHandler - public void onEvent(InventoryClickEvent event) { + private void onClick(InventoryClickEvent event) { // check if the player has a quest menu open if (tracker.containsKey(event.getWhoClicked().getUniqueId())) { event.setCancelled(true); @@ -60,37 +46,4 @@ public class MenuController implements Listener { } } - // utility - public void middleClickQuest(QMenu menu, Quest quest, Player player) { - if (menu.getOwner().getQuestProgressFile().hasStartedQuest(quest)) { - String tracked = menu.getOwner().getQuestProgressFile().getPlayerPreferences().getTrackedQuestId(); - - if (quest.getId().equals(tracked)) { - menu.getOwner().getQuestProgressFile().trackQuest(null); - } else { - menu.getOwner().getQuestProgressFile().trackQuest(quest); - } - player.closeInventory(); - } - } - - // utility - public void rightClickQuest(QMenu menu, Quest quest, Player player) { - if (menu.getOwner().getQuestProgressFile().hasStartedQuest(quest)) { - if (Options.QUEST_AUTOSTART.getBooleanValue()) return; - QMenuCancel qMenuCancel = new QMenuCancel(menu.getOwner(), menu, quest); - buffer.add(player.getUniqueId()); - player.openInventory(qMenuCancel.toInventory(1)); - tracker.put(player.getUniqueId(), qMenuCancel); - } - } - - @EventHandler - public void onEvent(InventoryCloseEvent event) { - // the buffer prevents players being lost from the tracker when changing menus, add to the buffer before - // an anticipated menu change - if (buffer.contains(event.getPlayer().getUniqueId())) { - buffer.remove(event.getPlayer().getUniqueId()); - } else tracker.remove(event.getPlayer().getUniqueId()); - } } diff --git a/src/main/java/com/leonardobishop/quests/menu/QMenuCancel.java b/src/main/java/com/leonardobishop/quests/menu/CancelQMenu.java index 69c46374..24cca210 100644 --- a/src/main/java/com/leonardobishop/quests/menu/QMenuCancel.java +++ b/src/main/java/com/leonardobishop/quests/menu/CancelQMenu.java @@ -11,30 +11,21 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import java.util.HashMap; -import java.util.List; +/** + * Represents a cancellation confirmation menu for a specific quest. + */ +public class CancelQMenu implements QMenu { -public class QMenuCancel implements QMenu { - - private final HashMap<Integer, String> slotsToQuestIds = new HashMap<>(); private final QMenu superMenu; private final QPlayer owner; private final Quest quest; - public QMenuCancel(QPlayer owner, QMenu superMenu, Quest quest) { + public CancelQMenu(QPlayer owner, QMenu superMenu, Quest quest) { this.owner = owner; this.superMenu = superMenu; this.quest = quest; } - public void populate(List<Quest> quests) { - /* ignored */ - } - - public HashMap<Integer, String> getSlotsToMenu() { - return slotsToQuestIds; - } - public Quest getQuest() { return quest; } @@ -64,7 +55,7 @@ public class QMenuCancel implements QMenu { inventory.setItem(10, no); inventory.setItem(11, no); inventory.setItem(12, no); - inventory.setItem(13, quest.getDisplayItem().toItemStack(quest, owner.getQuestProgressFile(), owner.getQuestProgressFile().getQuestProgress(quest))); + inventory.setItem(13, quest.getDisplayItem().toItemStack(quest, owner, owner.getQuestProgressFile().getQuestProgress(quest))); inventory.setItem(14, yes); inventory.setItem(15, yes); inventory.setItem(16, yes); @@ -75,12 +66,9 @@ public class QMenuCancel implements QMenu { @Override public void handleClick(InventoryClickEvent event, MenuController controller) { if (event.getSlot() == 10 || event.getSlot() == 11 || event.getSlot() == 12) { - QMenu qSuperMenu = this.getSuperMenu(); - controller.getBuffer().add(event.getWhoClicked().getUniqueId()); - event.getWhoClicked().openInventory(qSuperMenu.toInventory(1)); - controller.getTracker().put(event.getWhoClicked().getUniqueId(), qSuperMenu); + controller.openMenu(event.getWhoClicked(), superMenu, 1); } else if (event.getSlot() == 14 || event.getSlot() == 15 || event.getSlot() == 16) { - if (this.getOwner().getQuestProgressFile().cancelQuest(this.getQuest())) { + if (owner.cancelQuest(quest)) { event.getWhoClicked().closeInventory(); } } diff --git a/src/main/java/com/leonardobishop/quests/menu/QMenuCategory.java b/src/main/java/com/leonardobishop/quests/menu/CategoryQMenu.java index da06ae91..e389d9fa 100644 --- a/src/main/java/com/leonardobishop/quests/menu/QMenuCategory.java +++ b/src/main/java/com/leonardobishop/quests/menu/CategoryQMenu.java @@ -2,34 +2,27 @@ package com.leonardobishop.quests.menu; import com.leonardobishop.quests.Quests; import com.leonardobishop.quests.events.MenuController; -import com.leonardobishop.quests.menu.object.CategoryMenuElement; -import com.leonardobishop.quests.menu.object.CustomMenuElement; -import com.leonardobishop.quests.menu.object.MenuElement; -import com.leonardobishop.quests.menu.object.QuestMenuElement; +import com.leonardobishop.quests.menu.element.CategoryMenuElement; +import com.leonardobishop.quests.menu.element.CustomMenuElement; +import com.leonardobishop.quests.menu.element.MenuElement; import com.leonardobishop.quests.player.QPlayer; -import com.leonardobishop.quests.quests.Category; import com.leonardobishop.quests.util.Items; import com.leonardobishop.quests.util.Messages; import com.leonardobishop.quests.util.Options; import org.apache.commons.lang.math.NumberUtils; import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import java.awt.*; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** - * Menu list of categories. + * Represents a menu which contains a listing of different categories. */ -public class QMenuCategory implements QMenu { +public class CategoryQMenu implements QMenu { private final Quests plugin; private final int pageSize = 45; @@ -41,12 +34,12 @@ public class QMenuCategory implements QMenu { private int pageNextLocation = -1; private int currentPage = -1; - public QMenuCategory(Quests plugin, QPlayer owner) { + public CategoryQMenu(Quests plugin, QPlayer owner) { this.plugin = plugin; this.owner = owner; } - public void populate(List<QMenuQuest> menuQuests) { + public void populate(List<QuestQMenu> menuQuests) { if (plugin.getConfig().isConfigurationSection("custom-elements.categories")) { for (String s : plugin.getConfig().getConfigurationSection("custom-elements.categories").getKeys(false)) { if (!NumberUtils.isNumber(s)) continue; @@ -60,14 +53,14 @@ public class QMenuCategory implements QMenu { } } int slot = 0; - for (QMenuQuest qMenuQuest : menuQuests) { + for (QuestQMenu questQMenu : menuQuests) { while (menuElements.containsKey(slot)) slot++; - if (Options.GUI_HIDE_CATEGORIES_NOPERMISSION.getBooleanValue() && Quests.get().getQuestManager().getCategoryById(qMenuQuest.getCategoryName()).isPermissionRequired()) { - if (!Bukkit.getPlayer(owner.getUuid()).hasPermission("quests.category." + qMenuQuest.getCategoryName())) { + if (Options.GUI_HIDE_CATEGORIES_NOPERMISSION.getBooleanValue() && plugin.getQuestManager().getCategoryById(questQMenu.getCategoryName()).isPermissionRequired()) { + if (!Bukkit.getPlayer(owner.getPlayerUUID()).hasPermission("quests.category." + questQMenu.getCategoryName())) { continue; } } - menuElements.put(slot, new CategoryMenuElement(plugin, owner.getUuid(), qMenuQuest)); + menuElements.put(slot, new CategoryMenuElement(plugin, owner.getPlayerUUID(), questQMenu)); slot++; } @@ -107,10 +100,10 @@ public class QMenuCategory implements QMenu { pageplaceholders.put("{prevpage}", String.valueOf(page - 1)); pageplaceholders.put("{nextpage}", String.valueOf(page + 1)); pageplaceholders.put("{page}", String.valueOf(page)); - pageIs = MenuUtil.applyPlaceholders(plugin, owner.getUuid(), Items.PAGE_DESCRIPTION.getItem(), pageplaceholders); + pageIs = MenuUtil.applyPlaceholders(plugin, owner.getPlayerUUID(), Items.PAGE_DESCRIPTION.getItem(), pageplaceholders); pageIs.setAmount(Math.min(page, 64)); - pagePrevIs = MenuUtil.applyPlaceholders(plugin, owner.getUuid(), Items.PAGE_PREV.getItem(), pageplaceholders); - pageNextIs = MenuUtil.applyPlaceholders(plugin, owner.getUuid(), Items.PAGE_NEXT.getItem(), pageplaceholders); + pagePrevIs = MenuUtil.applyPlaceholders(plugin, owner.getPlayerUUID(), Items.PAGE_PREV.getItem(), pageplaceholders); + pageNextIs = MenuUtil.applyPlaceholders(plugin, owner.getPlayerUUID(), Items.PAGE_NEXT.getItem(), pageplaceholders); if (maxElement > pageSize) { inventory.setItem(49, pageIs); @@ -142,21 +135,17 @@ public class QMenuCategory implements QMenu { @Override public void handleClick(InventoryClickEvent event, MenuController controller) { if (pagePrevLocation == event.getSlot()) { - controller.getBuffer().add(event.getWhoClicked().getUniqueId()); - event.getWhoClicked().openInventory(this.toInventory(currentPage - 1)); + controller.openMenu(event.getWhoClicked(), this, currentPage - 1); } else if (pageNextLocation == event.getSlot()) { - controller.getBuffer().add(event.getWhoClicked().getUniqueId()); - event.getWhoClicked().openInventory(this.toInventory(currentPage + 1)); + controller.openMenu(event.getWhoClicked(), this, currentPage + 1); } else if (event.getSlot() < pageSize && menuElements.containsKey(event.getSlot() + (((currentPage) - 1) * pageSize))) { MenuElement element = menuElements.get(event.getSlot() + ((currentPage - 1) * pageSize)); if (element instanceof CategoryMenuElement) { CategoryMenuElement categoryMenuElement = (CategoryMenuElement) element; - QMenuQuest qMenuQuest = categoryMenuElement.getQuestMenu(); - controller.getBuffer().add(event.getWhoClicked().getUniqueId()); - if (this.getOwner().openCategory(plugin.getQuestManager().getCategoryById(qMenuQuest.getCategoryName()), qMenuQuest) != 0) { - controller.getBuffer().remove(event.getWhoClicked().getUniqueId()); + QuestQMenu questQMenu = categoryMenuElement.getQuestMenu(); + if (owner.openCategory(plugin.getQuestManager().getCategoryById(questQMenu.getCategoryName()), questQMenu) != 0) { event.getWhoClicked().sendMessage(Messages.QUEST_CATEGORY_PERMISSION.getMessage()); } } diff --git a/src/main/java/com/leonardobishop/quests/menu/QMenuDaily.java b/src/main/java/com/leonardobishop/quests/menu/DailyQMenu.java index a89765e4..a89765e4 100644 --- a/src/main/java/com/leonardobishop/quests/menu/QMenuDaily.java +++ b/src/main/java/com/leonardobishop/quests/menu/DailyQMenu.java diff --git a/src/main/java/com/leonardobishop/quests/menu/MenuUtil.java b/src/main/java/com/leonardobishop/quests/menu/MenuUtil.java index c1192c10..a0b230e3 100644 --- a/src/main/java/com/leonardobishop/quests/menu/MenuUtil.java +++ b/src/main/java/com/leonardobishop/quests/menu/MenuUtil.java @@ -1,6 +1,8 @@ package com.leonardobishop.quests.menu; import com.leonardobishop.quests.Quests; +import com.leonardobishop.quests.events.MenuController; +import com.leonardobishop.quests.quests.Quest; import com.leonardobishop.quests.util.Options; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -47,4 +49,25 @@ public class MenuUtil { return newItemStack; } + public static void handleMiddleClick(QMenu menu, Quest quest, Player player, MenuController controller) { + if (menu.getOwner().hasStartedQuest(quest)) { + String tracked = menu.getOwner().getPlayerPreferences().getTrackedQuestId(); + + if (quest.getId().equals(tracked)) { + menu.getOwner().trackQuest(null); + } else { + menu.getOwner().trackQuest(quest); + } + player.closeInventory(); + } + } + + public static void handleRightClick(QMenu menu, Quest quest, Player player, MenuController controller) { + if (menu.getOwner().hasStartedQuest(quest)) { + if (Options.QUEST_AUTOSTART.getBooleanValue()) return; + CancelQMenu cancelQMenu = new CancelQMenu(menu.getOwner(), menu, quest); + controller.openMenu(player, cancelQMenu, 1); + } + } + } diff --git a/src/main/java/com/leonardobishop/quests/menu/QItemStack.java b/src/main/java/com/leonardobishop/quests/menu/QItemStack.java index 775e5cc1..c7a3d530 100644 --- a/src/main/java/com/leonardobishop/quests/menu/QItemStack.java +++ b/src/main/java/com/leonardobishop/quests/menu/QItemStack.java @@ -1,6 +1,7 @@ package com.leonardobishop.quests.menu; import com.leonardobishop.quests.Quests; +import com.leonardobishop.quests.player.QPlayer; import com.leonardobishop.quests.player.questprogressfile.QuestProgress; import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile; import com.leonardobishop.quests.quests.Quest; @@ -76,7 +77,7 @@ public class QItemStack { } @SuppressWarnings("deprecation") - public ItemStack toItemStack(Quest quest, QuestProgressFile questProgressFile, QuestProgress questProgress) { + public ItemStack toItemStack(Quest quest, QPlayer qPlayer, QuestProgress questProgress) { ItemStack is = new ItemStack(startingItemStack); ItemMeta ism = is.getItemMeta(); ism.setDisplayName(name); @@ -90,22 +91,16 @@ public class QItemStack { tempLore.addAll(globalLoreAppendNormal); } - Player player = Bukkit.getPlayer(questProgressFile.getPlayerUUID()); - if (questProgressFile.hasStartedQuest(quest)) { - boolean tracked = quest.getId().equals(questProgressFile.getPlayerPreferences().getTrackedQuestId()); - if (Options.GLOBAL_QUEST_DISPLAY_CONFIGURATION_OVERRIDE.getBooleanValue() && !globalLoreAppendStarted.isEmpty()) { - if (tracked) { - tempLore.addAll(globalLoreAppendTracked); - } else { - tempLore.addAll(globalLoreAppendStarted); - } - } else { + Player player = Bukkit.getPlayer(qPlayer.getPlayerUUID()); + if (qPlayer.hasStartedQuest(quest)) { + boolean tracked = quest.getId().equals(qPlayer.getPlayerPreferences().getTrackedQuestId()); + if (!Options.GLOBAL_QUEST_DISPLAY_CONFIGURATION_OVERRIDE.getBooleanValue() || globalLoreAppendStarted.isEmpty()) { tempLore.addAll(loreStarted); - if (tracked) { - tempLore.addAll(globalLoreAppendTracked); - } else { - tempLore.addAll(globalLoreAppendStarted); - } + } + if (tracked) { + tempLore.addAll(globalLoreAppendTracked); + } else { + tempLore.addAll(globalLoreAppendStarted); } ism.addEnchant(Enchantment.ARROW_INFINITE, 1, true); try { diff --git a/src/main/java/com/leonardobishop/quests/menu/QMenuQuest.java b/src/main/java/com/leonardobishop/quests/menu/QuestQMenu.java index 7a2b8f69..bfc78617 100644 --- a/src/main/java/com/leonardobishop/quests/menu/QMenuQuest.java +++ b/src/main/java/com/leonardobishop/quests/menu/QuestQMenu.java @@ -3,9 +3,9 @@ package com.leonardobishop.quests.menu; import com.leonardobishop.quests.Quests; import com.leonardobishop.quests.api.enums.QuestStartResult; import com.leonardobishop.quests.events.MenuController; -import com.leonardobishop.quests.menu.object.CustomMenuElement; -import com.leonardobishop.quests.menu.object.MenuElement; -import com.leonardobishop.quests.menu.object.QuestMenuElement; +import com.leonardobishop.quests.menu.element.CustomMenuElement; +import com.leonardobishop.quests.menu.element.MenuElement; +import com.leonardobishop.quests.menu.element.QuestMenuElement; import com.leonardobishop.quests.player.QPlayer; import com.leonardobishop.quests.player.questprogressfile.QuestProgress; import com.leonardobishop.quests.quests.Quest; @@ -25,17 +25,16 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; /** - * Menu for a specific category. + * Represents a menu for a specified category (or all if they are disabled), + * which contains a listing of different quests. */ -public class QMenuQuest implements QMenu { +public class QuestQMenu implements QMenu { private final Quests plugin; private final HashMap<Integer, MenuElement> menuElements = new HashMap<>(); - private final QMenuCategory superMenu; + private final CategoryQMenu superMenu; private final String categoryName; private final int pageSize = 45; private final QPlayer owner; @@ -47,7 +46,7 @@ public class QMenuQuest implements QMenu { private int currentPage = -1; private boolean backButtonEnabled = true; - public QMenuQuest(Quests plugin, QPlayer owner, String categoryName, QMenuCategory superMenu) { + public QuestQMenu(Quests plugin, QPlayer owner, String categoryName, CategoryQMenu superMenu) { this.plugin = plugin; this.owner = owner; this.categoryName = categoryName; @@ -86,7 +85,7 @@ public class QMenuQuest implements QMenu { } } if (Options.GUI_HIDE_QUESTS_NOPERMISSION.getBooleanValue() && quest.isPermissionRequired()) { - if (!Bukkit.getPlayer(owner.getUuid()).hasPermission("quests.quest." + quest.getId())) { + if (!Bukkit.getPlayer(owner.getPlayerUUID()).hasPermission("quests.quest." + quest.getId())) { continue; } } @@ -200,20 +199,15 @@ public class QMenuQuest implements QMenu { @Override public void handleClick(InventoryClickEvent event, MenuController controller) { - //TODO make everything a menu element cuz this is jank + //TODO maybe redo this maybe if (pagePrevLocation == event.getSlot()) { - controller.getBuffer().add(event.getWhoClicked().getUniqueId()); - event.getWhoClicked().openInventory(this.toInventory(currentPage - 1)); + controller.openMenu(event.getWhoClicked(), this, currentPage - 1); } else if (pageNextLocation == event.getSlot()) { - controller.getBuffer().add(event.getWhoClicked().getUniqueId()); - event.getWhoClicked().openInventory(this.toInventory(currentPage + 1)); + controller.openMenu(event.getWhoClicked(), this, currentPage + 1); } else if (Options.CATEGORIES_ENABLED.getBooleanValue() && backButtonLocation == event.getSlot()) { - QMenuCategory qMenuCategory = this.getSuperMenu(); - controller.getBuffer().add(event.getWhoClicked().getUniqueId()); - event.getWhoClicked().openInventory(qMenuCategory.toInventory(1)); - controller.getTracker().put(event.getWhoClicked().getUniqueId(), qMenuCategory); + controller.openMenu(event.getWhoClicked(), superMenu, 1); } else if (event.getSlot() < pageSize && menuElements.containsKey(event.getSlot() + (((currentPage) - 1) * pageSize))) { MenuElement menuElement = menuElements.get(event.getSlot() + ((currentPage - 1) * pageSize)); @@ -222,14 +216,14 @@ public class QMenuQuest implements QMenu { Quest quest = plugin.getQuestManager().getQuestById(questMenuElement.getQuestId()); if (event.getClick() == ClickType.LEFT) { if (Options.QUEST_AUTOSTART.getBooleanValue()) return; - if (this.getOwner().getQuestProgressFile().startQuest(quest) == QuestStartResult.QUEST_SUCCESS) { + if (owner.startQuest(quest) == QuestStartResult.QUEST_SUCCESS) { event.getWhoClicked().closeInventory(); //TODO Option to keep the menu open } } else if (event.getClick() == ClickType.MIDDLE && Options.ALLOW_QUEST_TRACK.getBooleanValue()) { - controller.middleClickQuest(this, quest, Bukkit.getPlayer(this.getOwner().getUuid())); + MenuUtil.handleMiddleClick(this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller); } else if (event.getClick() == ClickType.RIGHT && Options.ALLOW_QUEST_CANCEL.getBooleanValue() - && this.getOwner().getQuestProgressFile().hasStartedQuest(quest)) { - controller.rightClickQuest(this, quest, Bukkit.getPlayer(this.getOwner().getUuid())); + && owner.hasStartedQuest(quest)) { + MenuUtil.handleRightClick(this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller); } } } @@ -247,7 +241,7 @@ public class QMenuQuest implements QMenu { return backButtonLocation; } - public QMenuCategory getSuperMenu() { + public CategoryQMenu getSuperMenu() { return superMenu; } @@ -260,7 +254,7 @@ public class QMenuQuest implements QMenu { List<String> lore = newItemStack.getItemMeta().getLore(); List<String> newLore = new ArrayList<>(); ItemMeta ism = newItemStack.getItemMeta(); - Player player = Bukkit.getPlayer(owner.getUuid()); + Player player = Bukkit.getPlayer(owner.getPlayerUUID()); if (lore != null) { for (String s : lore) { for (Map.Entry<String, String> entry : placeholders.entrySet()) { diff --git a/src/main/java/com/leonardobishop/quests/menu/QMenuStarted.java b/src/main/java/com/leonardobishop/quests/menu/StartedQMenu.java index fbbfae69..0d1f03ea 100644 --- a/src/main/java/com/leonardobishop/quests/menu/QMenuStarted.java +++ b/src/main/java/com/leonardobishop/quests/menu/StartedQMenu.java @@ -8,20 +8,20 @@ import com.leonardobishop.quests.quests.Quest; import com.leonardobishop.quests.util.Items; import com.leonardobishop.quests.util.Options; import org.bukkit.Bukkit; -import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -public class QMenuStarted implements QMenu { +/** + * Represents a menu listing quests the player has started. + */ +public class StartedQMenu implements QMenu { private final Quests plugin; private final HashMap<Integer, String> slotsToQuestIds = new HashMap<>(); @@ -32,7 +32,7 @@ public class QMenuStarted implements QMenu { private int pageNextLocation = -1; private int currentPage = -1; - public QMenuStarted(Quests plugin, QPlayer owner) { + public StartedQMenu(Quests plugin, QPlayer owner) { this.plugin = plugin; this.owner = owner; } @@ -41,7 +41,7 @@ public class QMenuStarted implements QMenu { Collections.sort(quests); int slot = 0; for (QuestSortWrapper quest : quests) { - if (owner.getQuestProgressFile().hasStartedQuest(quest.getQuest())) { + if (owner.hasStartedQuest(quest.getQuest())) { slotsToQuestIds.put(slot, quest.getQuest().getId()); slot++; } @@ -90,11 +90,11 @@ public class QMenuStarted implements QMenu { if (!slotsToQuestIds.isEmpty()) { for (int pointer = pageMin; pointer < pageMax; pointer++) { if (slotsToQuestIds.containsKey(pointer)) { - Quest quest = Quests.get().getQuestManager().getQuestById(slotsToQuestIds.get(pointer)); + Quest quest = plugin.getQuestManager().getQuestById(slotsToQuestIds.get(pointer)); QuestProgress questProgress = owner.getQuestProgressFile().getQuestProgress(quest); - inventory.setItem(invSlot, MenuUtil.applyPlaceholders(plugin, owner.getUuid(), plugin.getQuestManager().getQuestById( - quest.getId()).getDisplayItem().toItemStack(quest, owner.getQuestProgressFile(), questProgress))); + inventory.setItem(invSlot, MenuUtil.applyPlaceholders(plugin, owner.getPlayerUUID(), plugin.getQuestManager().getQuestById( + quest.getId()).getDisplayItem().toItemStack(quest, owner, questProgress))); } invSlot++; } @@ -109,10 +109,10 @@ public class QMenuStarted implements QMenu { pageplaceholders.put("{prevpage}", String.valueOf(page - 1)); pageplaceholders.put("{nextpage}", String.valueOf(page + 1)); pageplaceholders.put("{page}", String.valueOf(page)); - pageIs = MenuUtil.applyPlaceholders(plugin, owner.getUuid(), Items.PAGE_DESCRIPTION.getItem(), pageplaceholders); + pageIs = MenuUtil.applyPlaceholders(plugin, owner.getPlayerUUID(), Items.PAGE_DESCRIPTION.getItem(), pageplaceholders); pageIs.setAmount(Math.min(page, 64)); - pagePrevIs = MenuUtil.applyPlaceholders(plugin, owner.getUuid(), Items.PAGE_PREV.getItem(), pageplaceholders); - pageNextIs = MenuUtil.applyPlaceholders(plugin, owner.getUuid(), Items.PAGE_NEXT.getItem(), pageplaceholders); + pagePrevIs = MenuUtil.applyPlaceholders(plugin, owner.getPlayerUUID(), Items.PAGE_PREV.getItem(), pageplaceholders); + pageNextIs = MenuUtil.applyPlaceholders(plugin, owner.getPlayerUUID(), Items.PAGE_NEXT.getItem(), pageplaceholders); if (slotsToQuestIds.size() > pageSize) { inventory.setItem(49, pageIs); @@ -151,25 +151,22 @@ public class QMenuStarted implements QMenu { @Override public void handleClick(InventoryClickEvent event, MenuController controller) { - if (this.getPagePrevLocation() == event.getSlot()) { - controller.getBuffer().add(event.getWhoClicked().getUniqueId()); - event.getWhoClicked().openInventory(this.toInventory(this.getCurrentPage() - 1)); + if (pagePrevLocation == event.getSlot()) { + controller.openMenu(event.getWhoClicked(), this, currentPage - 1); - } else if (this.getPageNextLocation() == event.getSlot()) { - controller.getBuffer().add(event.getWhoClicked().getUniqueId()); - event.getWhoClicked().openInventory(this.toInventory(this.getCurrentPage() + 1)); + } else if (pageNextLocation == event.getSlot()) { + controller.openMenu(event.getWhoClicked(), this, currentPage + 1); - } else if (event.getSlot() < this.getPageSize() && this.getSlotsToMenu().containsKey(event.getSlot() + (((this - .getCurrentPage()) - 1) * this.getPageSize()))) { + } else if (event.getSlot() < pageSize && slotsToQuestIds.containsKey(event.getSlot() + ((currentPage) - 1) * pageSize)) { // repeat from above - String questid = this.getSlotsToMenu().get(event.getSlot() + (((this.getCurrentPage()) - 1) * this.getPageSize())); + String questid = slotsToQuestIds.get(event.getSlot() + (((currentPage) - 1) * pageSize)); Quest quest = plugin.getQuestManager().getQuestById(questid); if (event.getClick() == ClickType.MIDDLE && Options.ALLOW_QUEST_TRACK.getBooleanValue()) { - controller.middleClickQuest(this, quest, Bukkit.getPlayer(this.getOwner().getUuid())); + MenuUtil.handleMiddleClick(this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller); } else if (event.getClick() == ClickType.RIGHT && Options.ALLOW_QUEST_CANCEL.getBooleanValue() - && this.getOwner().getQuestProgressFile().hasStartedQuest(quest)) { - controller.rightClickQuest(this, quest, Bukkit.getPlayer(this.getOwner().getUuid())); + && owner.hasStartedQuest(quest)) { + MenuUtil.handleRightClick(this, quest, Bukkit.getPlayer(owner.getPlayerUUID()), controller); } } } diff --git a/src/main/java/com/leonardobishop/quests/menu/object/CategoryMenuElement.java b/src/main/java/com/leonardobishop/quests/menu/element/CategoryMenuElement.java index be71ef91..2e1376eb 100644 --- a/src/main/java/com/leonardobishop/quests/menu/object/CategoryMenuElement.java +++ b/src/main/java/com/leonardobishop/quests/menu/element/CategoryMenuElement.java @@ -1,7 +1,7 @@ -package com.leonardobishop.quests.menu.object; +package com.leonardobishop.quests.menu.element; import com.leonardobishop.quests.Quests; -import com.leonardobishop.quests.menu.QMenuQuest; +import com.leonardobishop.quests.menu.QuestQMenu; import com.leonardobishop.quests.quests.Category; import com.leonardobishop.quests.util.Options; import org.bukkit.Bukkit; @@ -17,9 +17,9 @@ public class CategoryMenuElement extends MenuElement { private final Quests plugin; private final UUID owner; - private final QMenuQuest questMenu; + private final QuestQMenu questMenu; - public CategoryMenuElement(Quests plugin, UUID owner, QMenuQuest questMenu) { + public CategoryMenuElement(Quests plugin, UUID owner, QuestQMenu questMenu) { this.plugin = plugin; this.owner = owner; this.questMenu = questMenu; @@ -29,7 +29,7 @@ public class CategoryMenuElement extends MenuElement { return owner; } - public QMenuQuest getQuestMenu() { + public QuestQMenu getQuestMenu() { return questMenu; } diff --git a/src/main/java/com/leonardobishop/quests/menu/object/CustomMenuElement.java b/src/main/java/com/leonardobishop/quests/menu/element/CustomMenuElement.java index d88a0cf9..d1986f18 100644 --- a/src/main/java/com/leonardobishop/quests/menu/object/CustomMenuElement.java +++ b/src/main/java/com/leonardobishop/quests/menu/element/CustomMenuElement.java @@ -1,4 +1,4 @@ -package com.leonardobishop.quests.menu.object; +package com.leonardobishop.quests.menu.element; import org.bukkit.inventory.ItemStack; diff --git a/src/main/java/com/leonardobishop/quests/menu/object/MenuElement.java b/src/main/java/com/leonardobishop/quests/menu/element/MenuElement.java index 9d5cceb6..a7ee580a 100644 --- a/src/main/java/com/leonardobishop/quests/menu/object/MenuElement.java +++ b/src/main/java/com/leonardobishop/quests/menu/element/MenuElement.java @@ -1,4 +1,4 @@ -package com.leonardobishop.quests.menu.object; +package com.leonardobishop.quests.menu.element; import org.bukkit.inventory.ItemStack; diff --git a/src/main/java/com/leonardobishop/quests/menu/object/QuestMenuElement.java b/src/main/java/com/leonardobishop/quests/menu/element/QuestMenuElement.java index 9adc8fa2..b9d1b597 100644 --- a/src/main/java/com/leonardobishop/quests/menu/object/QuestMenuElement.java +++ b/src/main/java/com/leonardobishop/quests/menu/element/QuestMenuElement.java @@ -1,4 +1,4 @@ -package com.leonardobishop.quests.menu.object; +package com.leonardobishop.quests.menu.element; import com.leonardobishop.quests.Quests; import com.leonardobishop.quests.player.QPlayer; @@ -46,7 +46,7 @@ public class QuestMenuElement extends MenuElement { if (!owner.getQuestProgressFile().hasMetRequirements(quest)) { List<String> quests = new ArrayList<>(); for (String requirement : quest.getRequirements()) { - quests.add(Quests.get().getQuestManager().getQuestById(requirement).getDisplayNameStripped()); + quests.add(plugin.getQuestManager().getQuestById(requirement).getDisplayNameStripped()); } Map<String, String> placeholders = new HashMap<>(); placeholders.put("{quest}", quest.getDisplayNameStripped()); @@ -58,19 +58,19 @@ public class QuestMenuElement extends MenuElement { placeholders.put("{quest}", quest.getDisplayNameStripped()); ItemStack is = replaceItemStack(Items.QUEST_COMPLETED.getItem(), placeholders); return is; - } else if (quest.isPermissionRequired() && !Bukkit.getPlayer(owner.getUuid()).hasPermission("quests.quest." + quest.getId())) { + } else if (quest.isPermissionRequired() && !Bukkit.getPlayer(owner.getPlayerUUID()).hasPermission("quests.quest." + quest.getId())) { Map<String, String> placeholders = new HashMap<>(); placeholders.put("{quest}", quest.getDisplayNameStripped()); ItemStack is = replaceItemStack(Items.QUEST_PERMISSION.getItem(), placeholders); return is; } else if (cooldown > 0) { Map<String, String> placeholders = new HashMap<>(); - placeholders.put("{time}", Quests.get().convertToFormat(TimeUnit.SECONDS.convert(cooldown, TimeUnit.MILLISECONDS))); + placeholders.put("{time}", plugin.convertToFormat(TimeUnit.SECONDS.convert(cooldown, TimeUnit.MILLISECONDS))); placeholders.put("{quest}", quest.getDisplayNameStripped()); ItemStack is = replaceItemStack(Items.QUEST_COOLDOWN.getItem(), placeholders); return is; } else { - return replaceItemStack(quest.getDisplayItem().toItemStack(quest, owner.getQuestProgressFile(), questProgress)); + return replaceItemStack(quest.getDisplayItem().toItemStack(quest, owner, questProgress)); } } @@ -83,7 +83,7 @@ public class QuestMenuElement extends MenuElement { List<String> lore = newItemStack.getItemMeta().getLore(); List<String> newLore = new ArrayList<>(); ItemMeta ism = newItemStack.getItemMeta(); - Player player = Bukkit.getPlayer(owner.getUuid()); + Player player = Bukkit.getPlayer(owner.getPlayerUUID()); if (lore != null) { for (String s : lore) { for (Map.Entry<String, String> entry : placeholders.entrySet()) { diff --git a/src/main/java/com/leonardobishop/quests/player/QPlayer.java b/src/main/java/com/leonardobishop/quests/player/QPlayer.java index b2dba6fe..2120c55c 100644 --- a/src/main/java/com/leonardobishop/quests/player/QPlayer.java +++ b/src/main/java/com/leonardobishop/quests/player/QPlayer.java @@ -1,43 +1,328 @@ package com.leonardobishop.quests.player; import com.leonardobishop.quests.Quests; -import com.leonardobishop.quests.events.MenuController; -import com.leonardobishop.quests.menu.QMenuCategory; -import com.leonardobishop.quests.menu.QMenuQuest; -import com.leonardobishop.quests.menu.QMenuStarted; +import com.leonardobishop.quests.api.QuestsAPI; +import com.leonardobishop.quests.api.enums.QuestStartResult; +import com.leonardobishop.quests.api.events.PlayerCancelQuestEvent; +import com.leonardobishop.quests.api.events.PlayerFinishQuestEvent; +import com.leonardobishop.quests.api.events.PlayerStartQuestEvent; +import com.leonardobishop.quests.api.events.PlayerStartTrackQuestEvent; +import com.leonardobishop.quests.api.events.PlayerStopTrackQuestEvent; +import com.leonardobishop.quests.api.events.PreStartQuestEvent; +import com.leonardobishop.quests.menu.CategoryQMenu; +import com.leonardobishop.quests.menu.QuestQMenu; import com.leonardobishop.quests.menu.QuestSortWrapper; +import com.leonardobishop.quests.menu.StartedQMenu; +import com.leonardobishop.quests.player.questprogressfile.QPlayerPreferences; +import com.leonardobishop.quests.player.questprogressfile.QuestProgress; import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile; +import com.leonardobishop.quests.player.questprogressfile.TaskProgress; import com.leonardobishop.quests.quests.Category; import com.leonardobishop.quests.quests.Quest; +import com.leonardobishop.quests.quests.Task; +import com.leonardobishop.quests.util.Messages; import com.leonardobishop.quests.util.Options; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.concurrent.TimeUnit; +/** + * Represents a player. + */ public class QPlayer { private final UUID uuid; + private final QPlayerPreferences playerPreferences; private final QuestProgressFile questProgressFile; private final Quests plugin; - public QPlayer(UUID uuid, QuestProgressFile questProgressFile, Quests plugin) { + public QPlayer(UUID uuid, QuestProgressFile questProgressFile, QPlayerPreferences playerPreferences, Quests plugin) { this.uuid = uuid; + this.playerPreferences = playerPreferences; this.questProgressFile = questProgressFile; this.plugin = plugin; } - public UUID getUuid() { + public UUID getPlayerUUID() { return this.uuid; } /** + * Attempt to complete a quest for the player. This will also play all effects (such as titles, messages etc.) + * and also dispatches all rewards for the player. + * + * Warning: rewards will not be sent and the {@link PlayerFinishQuestEvent} will not be fired if the + * player is not online + * + * @param quest the quest to complete + * @return true (always) + */ + public boolean completeQuest(Quest quest) { + QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + questProgress.setStarted(false); + for (TaskProgress taskProgress : questProgress.getTaskProgress()) { + taskProgress.setCompleted(false); + taskProgress.setProgress(null); + } + questProgress.setCompleted(true); + questProgress.setCompletedBefore(true); + questProgress.setCompletionDate(System.currentTimeMillis()); + if (Options.ALLOW_QUEST_TRACK.getBooleanValue() && Options.QUEST_AUTOTRACK.getBooleanValue() && !(quest.isRepeatable() && !quest.isCooldownEnabled())) { + trackQuest(null); + } + Player player = Bukkit.getPlayer(uuid); + if (player != null) { + QPlayer questPlayer = QuestsAPI.getPlayerManager().getPlayer(uuid); + String questFinishMessage = Messages.QUEST_COMPLETE.getMessage().replace("{quest}", quest.getDisplayNameStripped()); + // PlayerFinishQuestEvent -- start + PlayerFinishQuestEvent questFinishEvent = new PlayerFinishQuestEvent(player, questPlayer, questProgress, questFinishMessage); + Bukkit.getPluginManager().callEvent(questFinishEvent); + // PlayerFinishQuestEvent -- end + Bukkit.getServer().getScheduler().runTask(plugin, () -> { + for (String s : quest.getRewards()) { + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), s.replace("{player}", player.getName())); //TODO PlaceholderAPI support + } + }); + if (questFinishEvent.getQuestFinishMessage() != null) + player.sendMessage(questFinishEvent.getQuestFinishMessage()); + if (Options.TITLES_ENABLED.getBooleanValue()) { + plugin.getTitleHandle().sendTitle(player, Messages.TITLE_QUEST_COMPLETE_TITLE.getMessage().replace("{quest}", quest + .getDisplayNameStripped()), Messages.TITLE_QUEST_COMPLETE_SUBTITLE.getMessage().replace("{quest}", quest + .getDisplayNameStripped())); + } + for (String s : quest.getRewardString()) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', s)); + } + } + return true; + } + + /** + * Attempt to track a quest for the player. This will also play all effects (such as titles, messages etc.) + * + * Warning: {@link PlayerStopTrackQuestEvent} is not fired if the player is not online + * + * @param quest the quest to track + */ + public void trackQuest(Quest quest) { + Player player = Bukkit.getPlayer(uuid); + if (quest == null) { + String currentTrackedQuestId = playerPreferences.getTrackedQuestId(); + playerPreferences.setTrackedQuestId(null); + if (player != null) { + Bukkit.getPluginManager().callEvent(new PlayerStopTrackQuestEvent(player, this)); + Quest currentTrackedQuest; + if (currentTrackedQuestId != null && (currentTrackedQuest = plugin.getQuestManager().getQuestById(currentTrackedQuestId)) != null) { + player.sendMessage(Messages.QUEST_TRACK_STOP.getMessage().replace("{quest}", currentTrackedQuest.getDisplayNameStripped())); + } + } + } else if (hasStartedQuest(quest)) { + playerPreferences.setTrackedQuestId(quest.getId()); + if (player != null) { + Bukkit.getPluginManager().callEvent(new PlayerStartTrackQuestEvent(player, this)); + player.sendMessage(Messages.QUEST_TRACK.getMessage().replace("{quest}", quest.getDisplayNameStripped())); + } + } + } + + /** + * Gets whether or not the player has started a specific quest. + * + * @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) { + if (Options.QUEST_AUTOSTART.getBooleanValue()) { + QuestStartResult response = canStartQuest(quest); + return response == QuestStartResult.QUEST_SUCCESS || response == QuestStartResult.QUEST_ALREADY_STARTED; + } else { + return questProgressFile.hasQuestProgress(quest) && questProgressFile.getQuestProgress(quest).isStarted(); + } + } + + /** + * Attempt to start a quest for the player. This will also play all effects (such as titles, messages etc.) + * + * Warning: will fail if the player is not online. + * + * @param quest the quest to start + * @return the quest start result -- {@code QuestStartResult.QUEST_SUCCESS} indicates success + */ + // TODO PlaceholderAPI support + public QuestStartResult startQuest(Quest quest) { + Player player = Bukkit.getPlayer(uuid); + QuestStartResult code = canStartQuest(quest); + if (player != null) { + String questResultMessage = null; + switch (code) { + case QUEST_SUCCESS: + // This one is hacky + break; + case QUEST_LIMIT_REACHED: + questResultMessage = Messages.QUEST_START_LIMIT.getMessage().replace("{limit}", String.valueOf(Options.QUESTS_START_LIMIT.getIntValue())); + break; + case QUEST_ALREADY_COMPLETED: + questResultMessage = Messages.QUEST_START_DISABLED.getMessage(); + break; + case QUEST_COOLDOWN: + long cooldown = questProgressFile.getCooldownFor(quest); + questResultMessage = Messages.QUEST_START_COOLDOWN.getMessage().replace("{time}", String.valueOf(plugin.convertToFormat(TimeUnit.SECONDS.convert + (cooldown, TimeUnit.MILLISECONDS)))); + break; + case QUEST_LOCKED: + questResultMessage = Messages.QUEST_START_LOCKED.getMessage(); + break; + case QUEST_ALREADY_STARTED: + questResultMessage = Messages.QUEST_START_STARTED.getMessage(); + break; + case QUEST_NO_PERMISSION: + questResultMessage = Messages.QUEST_START_PERMISSION.getMessage(); + break; + case NO_PERMISSION_FOR_CATEGORY: + questResultMessage = Messages.QUEST_CATEGORY_QUEST_PERMISSION.getMessage(); + break; + } + // PreStartQuestEvent -- start + PreStartQuestEvent preStartQuestEvent = new PreStartQuestEvent(player, this, questResultMessage, code); + Bukkit.getPluginManager().callEvent(preStartQuestEvent); + // PreStartQuestEvent -- end + if (preStartQuestEvent.getQuestResultMessage() != null && code != QuestStartResult.QUEST_SUCCESS) + player.sendMessage(preStartQuestEvent.getQuestResultMessage()); + } + if (code == QuestStartResult.QUEST_SUCCESS) { + QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + questProgress.setStarted(true); + for (TaskProgress taskProgress : questProgress.getTaskProgress()) { + taskProgress.setCompleted(false); + taskProgress.setProgress(null); + } + if (Options.ALLOW_QUEST_TRACK.getBooleanValue() && Options.QUEST_AUTOTRACK.getBooleanValue()) { + trackQuest(quest); + } + questProgress.setCompleted(false); + if (player != null) { + String questStartMessage = Messages.QUEST_START.getMessage().replace("{quest}", quest.getDisplayNameStripped()); + // PlayerStartQuestEvent -- start + PlayerStartQuestEvent questStartEvent = new PlayerStartQuestEvent(player, this, questProgress, questStartMessage); + Bukkit.getPluginManager().callEvent(questStartEvent); + // PlayerStartQuestEvent -- end + if (questStartEvent.getQuestStartMessage() != null) + player.sendMessage(questStartEvent.getQuestStartMessage()); //Don't send a message if the event message is null + if (Options.TITLES_ENABLED.getBooleanValue()) { + plugin.getTitleHandle().sendTitle(player, Messages.TITLE_QUEST_START_TITLE.getMessage().replace("{quest}", quest + .getDisplayNameStripped()), Messages.TITLE_QUEST_START_SUBTITLE.getMessage().replace("{quest}", quest + .getDisplayNameStripped())); + } + for (String s : quest.getStartString()) { + player.sendMessage(ChatColor.translateAlternateColorCodes('&', s)); + } + } + for (Task task : quest.getTasks()) { + try { + plugin.getTaskTypeManager().getTaskType(task.getType()).onStart(quest, task, uuid); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + return code; + } + + /** + * Attempt to cancel a quest for the player. This will also play all effects (such as titles, messages etc.) + * + * @param quest the quest to start + * @return true if the quest was cancelled, false otherwise + */ + public boolean cancelQuest(Quest quest) { + QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + Player player = Bukkit.getPlayer(uuid); + if (!questProgress.isStarted()) { + if (player != null) { + player.sendMessage(Messages.QUEST_CANCEL_NOTSTARTED.getMessage()); + } + return false; + } + questProgress.setStarted(false); + for (TaskProgress taskProgress : questProgress.getTaskProgress()) { + taskProgress.setProgress(null); + } + if (player != null) { + String questCancelMessage = Messages.QUEST_CANCEL.getMessage().replace("{quest}", quest.getDisplayNameStripped()); + // PlayerCancelQuestEvent -- start + PlayerCancelQuestEvent questCancelEvent = new PlayerCancelQuestEvent(player, this, questProgress, questCancelMessage); + Bukkit.getPluginManager().callEvent(questCancelEvent); + // PlayerCancelQuestEvent -- end + if (questCancelEvent.getQuestCancelMessage() != null) + player.sendMessage(questCancelEvent.getQuestCancelMessage()); + } + return true; + } + + /** + * Check if the player can start a quest. + * + * Warning: will fail if the player is not online. + * + * @param quest the quest to check + * @return the quest start result + */ + public QuestStartResult canStartQuest(Quest quest) { + Player p = Bukkit.getPlayer(uuid); + if (questProgressFile.getStartedQuests().size() >= Options.QUESTS_START_LIMIT.getIntValue() && !Options.QUEST_AUTOSTART.getBooleanValue()) { + return QuestStartResult.QUEST_LIMIT_REACHED; + } + QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (!quest.isRepeatable() && questProgress.isCompletedBefore()) { + //if (playerUUID != null) { + // ??? + //} + return QuestStartResult.QUEST_ALREADY_COMPLETED; + } + long cooldown = questProgressFile.getCooldownFor(quest); + if (cooldown > 0) { + return QuestStartResult.QUEST_COOLDOWN; + } + if (!questProgressFile.hasMetRequirements(quest)) { + return QuestStartResult.QUEST_LOCKED; + } + if (questProgress.isStarted()) { + return QuestStartResult.QUEST_ALREADY_STARTED; + } + if (quest.isPermissionRequired()) { + if (p != null) { + if (!p.hasPermission("quests.quest." + quest.getId())) { + return QuestStartResult.QUEST_NO_PERMISSION; + } + } else { + return QuestStartResult.QUEST_NO_PERMISSION; + } + } + if (quest.getCategoryId() != null && plugin.getQuestManager().getCategoryById(quest.getCategoryId()) != null && plugin.getQuestManager() + .getCategoryById(quest.getCategoryId()).isPermissionRequired()) { + if (p != null) { + if (!p.hasPermission("quests.category." + quest.getCategoryId())) { + return QuestStartResult.NO_PERMISSION_FOR_CATEGORY; + } + } else { + return QuestStartResult.NO_PERMISSION_FOR_CATEGORY; + } + } + return QuestStartResult.QUEST_SUCCESS; + } + + /** + * Opens a category menu for the player. + * * @return 0 if success, 1 if no permission, 2 is only data loaded, 3 if player not found */ - public int openCategory(Category category, QMenuCategory superMenu, boolean backButton) { + public int openCategory(Category category, CategoryQMenu superMenu, boolean backButton) { Player player = Bukkit.getPlayer(this.uuid); if (player == null) { return 3; @@ -48,7 +333,7 @@ public class QPlayer { } // Using `this` instead of searching again for this QPlayer - QMenuQuest qMenuQuest = new QMenuQuest(plugin, this, category.getId(), superMenu); + QuestQMenu questQMenu = new QuestQMenu(plugin, this, category.getId(), superMenu); List<Quest> quests = new ArrayList<>(); for (String questid : category.getRegisteredQuestIds()) { Quest quest = plugin.getQuestManager().getQuestById(questid); @@ -56,15 +341,17 @@ public class QPlayer { quests.add(quest); } } - qMenuQuest.populate(quests); - qMenuQuest.setBackButtonEnabled(backButton); - return openCategory(category, qMenuQuest); + questQMenu.populate(quests); + questQMenu.setBackButtonEnabled(backButton); + return openCategory(category, questQMenu); } /** + * Opens a category menu for the player. + * * @return 0 if success, 1 if no permission, 2 is only data loaded, 3 if player not found */ - public int openCategory(Category category, QMenuQuest qMenuQuest) { + public int openCategory(Category category, QuestQMenu questQMenu) { Player player = Bukkit.getPlayer(this.uuid); if (player == null) { return 3; @@ -74,8 +361,7 @@ public class QPlayer { return 1; } - player.openInventory(qMenuQuest.toInventory(1)); - MenuController.track(this.uuid, qMenuQuest); + plugin.getMenuController().openMenu(player, questQMenu, 1); return 0; } @@ -89,10 +375,10 @@ public class QPlayer { } if (Options.CATEGORIES_ENABLED.getBooleanValue()) { - QMenuCategory qMenuCategory = new QMenuCategory(plugin, plugin.getPlayerManager().getPlayer(player.getUniqueId())); - List<QMenuQuest> questMenus = new ArrayList<>(); + CategoryQMenu categoryQMenu = new CategoryQMenu(plugin, plugin.getPlayerManager().getPlayer(player.getUniqueId())); + List<QuestQMenu> questMenus = new ArrayList<>(); for (Category category : plugin.getQuestManager().getCategories()) { - QMenuQuest qMenuQuest = new QMenuQuest(plugin, plugin.getPlayerManager().getPlayer(player.getUniqueId()), category.getId(), qMenuCategory); + QuestQMenu questQMenu = new QuestQMenu(plugin, plugin.getPlayerManager().getPlayer(player.getUniqueId()), category.getId(), categoryQMenu); List<Quest> quests = new ArrayList<>(); for (String questid : category.getRegisteredQuestIds()) { Quest quest = plugin.getQuestManager().getQuestById(questid); @@ -100,24 +386,22 @@ public class QPlayer { quests.add(quest); } } - qMenuQuest.populate(quests); - questMenus.add(qMenuQuest); + questQMenu.populate(quests); + questMenus.add(questQMenu); } - qMenuCategory.populate(questMenus); + categoryQMenu.populate(questMenus); - player.openInventory(qMenuCategory.toInventory(1)); - MenuController.track(player.getUniqueId(), qMenuCategory); + plugin.getMenuController().openMenu(player, categoryQMenu, 1); } else { - QMenuQuest qMenuQuest = new QMenuQuest(plugin, plugin.getPlayerManager().getPlayer(player.getUniqueId()), "", null); + QuestQMenu questQMenu = new QuestQMenu(plugin, plugin.getPlayerManager().getPlayer(player.getUniqueId()), "", null); List<Quest> quests = new ArrayList<>(); for (Map.Entry<String, Quest> entry : plugin.getQuestManager().getQuests().entrySet()) { quests.add(entry.getValue()); } - qMenuQuest.populate(quests); - qMenuQuest.setBackButtonEnabled(false); + questQMenu.populate(quests); + questQMenu.setBackButtonEnabled(false); - player.openInventory(qMenuQuest.toInventory(1)); - MenuController.track(player.getUniqueId(), qMenuQuest); + plugin.getMenuController().openMenu(player, questQMenu, 1); } } @@ -130,30 +414,29 @@ public class QPlayer { return; } - QMenuStarted qMenuStarted = new QMenuStarted(plugin, plugin.getPlayerManager().getPlayer(player.getUniqueId())); + StartedQMenu startedQMenu = new StartedQMenu(plugin, plugin.getPlayerManager().getPlayer(player.getUniqueId())); List<QuestSortWrapper> quests = new ArrayList<>(); for (Map.Entry<String, Quest> entry : plugin.getQuestManager().getQuests().entrySet()) { quests.add(new QuestSortWrapper(plugin, entry.getValue())); } - qMenuStarted.populate(quests); + startedQMenu.populate(quests); - player.openInventory(qMenuStarted.toInventory(1)); - MenuController.track(player.getUniqueId(), qMenuStarted); + plugin.getMenuController().openMenu(player, startedQMenu, 1); } public QuestProgressFile getQuestProgressFile() { return questProgressFile; } - public QuestProgressFile setQuestProgressFile() { - return questProgressFile; + public QPlayerPreferences getPlayerPreferences() { + return playerPreferences; } @Override //Used by java GC public boolean equals(Object o) { if (!(o instanceof QPlayer)) return false; QPlayer qPlayer = (QPlayer) o; - return this.uuid == qPlayer.getUuid(); + return this.uuid == qPlayer.getPlayerUUID(); } @Override //Used by java GC diff --git a/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java b/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java index bc79651e..3801b2df 100644 --- a/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java +++ b/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java @@ -82,7 +82,7 @@ public class QPlayerManager { public void loadPlayer(UUID uuid) { plugin.getQuestsLogger().debug("Loading player " + uuid + " from disk. Main thread: " + Bukkit.isPrimaryThread()); qPlayers.computeIfAbsent(uuid, s -> { - QuestProgressFile questProgressFile = new QuestProgressFile(uuid, new QPlayerPreferences(null), plugin); + QuestProgressFile questProgressFile = new QuestProgressFile(uuid, plugin); try { File directory = new File(plugin.getDataFolder() + File.separator + "playerdata"); @@ -123,7 +123,7 @@ public class QPlayerManager { // fuck } - return new QPlayer(uuid, questProgressFile, plugin); + return new QPlayer(uuid, questProgressFile, new QPlayerPreferences(null), plugin); }); // else { // plugin.getQuestsLogger().debug("Player " + uuid + " is already loaded."); diff --git a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java b/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java index a7ee6502..9cc7609e 100644 --- a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java +++ b/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java @@ -29,271 +29,20 @@ import java.util.Map; import java.util.UUID; import java.util.concurrent.TimeUnit; +/** + * Represents underlying quest progress for a player. + */ public class QuestProgressFile { private final Map<String, QuestProgress> questProgress = new HashMap<>(); - private final QPlayerPreferences playerPreferences; private final UUID playerUUID; private final Quests plugin; - public QuestProgressFile(UUID playerUUID, QPlayerPreferences playerPreferences, Quests plugin) { + public QuestProgressFile(UUID playerUUID, Quests plugin) { this.playerUUID = playerUUID; - this.playerPreferences = playerPreferences; this.plugin = plugin; } - /** - * Attempt to complete a quest for the player. This will also play all effects (such as titles, messages etc.) - * and also dispatches all rewards for the player. - * - * Warning: rewards will not be sent and the {@link PlayerFinishQuestEvent} will not be fired if the - * player is not online - * - * @param quest the quest to complete - * @return true (always) - */ - public boolean completeQuest(Quest quest) { - QuestProgress questProgress = getQuestProgress(quest); - questProgress.setStarted(false); - for (TaskProgress taskProgress : questProgress.getTaskProgress()) { - taskProgress.setCompleted(false); - taskProgress.setProgress(null); - } - questProgress.setCompleted(true); - questProgress.setCompletedBefore(true); - questProgress.setCompletionDate(System.currentTimeMillis()); - if (Options.ALLOW_QUEST_TRACK.getBooleanValue() && Options.QUEST_AUTOTRACK.getBooleanValue() && !(quest.isRepeatable() && !quest.isCooldownEnabled())) { - trackQuest(null); - } - Player player = Bukkit.getPlayer(this.playerUUID); - if (player != null) { - QPlayer questPlayer = QuestsAPI.getPlayerManager().getPlayer(this.playerUUID); - String questFinishMessage = Messages.QUEST_COMPLETE.getMessage().replace("{quest}", quest.getDisplayNameStripped()); - // PlayerFinishQuestEvent -- start - PlayerFinishQuestEvent questFinishEvent = new PlayerFinishQuestEvent(player, questPlayer, questProgress, questFinishMessage); - Bukkit.getPluginManager().callEvent(questFinishEvent); - // PlayerFinishQuestEvent -- end - Bukkit.getServer().getScheduler().runTask(plugin, () -> { - for (String s : quest.getRewards()) { - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), s.replace("{player}", player.getName())); //TODO PlaceholderAPI support - } - }); - if (questFinishEvent.getQuestFinishMessage() != null) - player.sendMessage(questFinishEvent.getQuestFinishMessage()); - if (Options.TITLES_ENABLED.getBooleanValue()) { - plugin.getTitle().sendTitle(player, Messages.TITLE_QUEST_COMPLETE_TITLE.getMessage().replace("{quest}", quest - .getDisplayNameStripped()), Messages.TITLE_QUEST_COMPLETE_SUBTITLE.getMessage().replace("{quest}", quest - .getDisplayNameStripped())); - } - for (String s : quest.getRewardString()) { - player.sendMessage(ChatColor.translateAlternateColorCodes('&', s)); - } - } - return true; - } - - /** - * Attempt to track a quest for the player. This will also play all effects (such as titles, messages etc.) - * - * Warning: {@link PlayerStopTrackQuestEvent} is not fired if the player is not online - * - * @param quest the quest to track - */ - public void trackQuest(Quest quest) { - Player player = Bukkit.getPlayer(playerUUID); - if (quest == null) { - String currentTrackedQuestId = playerPreferences.getTrackedQuestId(); - playerPreferences.setTrackedQuestId(null); - if (player != null) { - Bukkit.getPluginManager().callEvent(new PlayerStopTrackQuestEvent(player, this)); - Quest currentTrackedQuest; - if (currentTrackedQuestId != null && (currentTrackedQuest = plugin.getQuestManager().getQuestById(currentTrackedQuestId)) != null) { - player.sendMessage(Messages.QUEST_TRACK_STOP.getMessage().replace("{quest}", currentTrackedQuest.getDisplayNameStripped())); - } - } - } else if (hasStartedQuest(quest)) { - playerPreferences.setTrackedQuestId(quest.getId()); - if (player != null) { - Bukkit.getPluginManager().callEvent(new PlayerStartTrackQuestEvent(player, this)); - player.sendMessage(Messages.QUEST_TRACK.getMessage().replace("{quest}", quest.getDisplayNameStripped())); - } - } - } - - /** - * Check if the player can start a quest. - * - * Warning: will fail if the player is not online. - * - * @param quest the quest to check - * @return the quest start result - */ - public QuestStartResult canStartQuest(Quest quest) { - Player p = Bukkit.getPlayer(playerUUID); - if (getStartedQuests().size() >= Options.QUESTS_START_LIMIT.getIntValue() && !Options.QUEST_AUTOSTART.getBooleanValue()) { - return QuestStartResult.QUEST_LIMIT_REACHED; - } - QuestProgress questProgress = getQuestProgress(quest); - if (!quest.isRepeatable() && questProgress.isCompletedBefore()) { - //if (playerUUID != null) { - // ??? - //} - return QuestStartResult.QUEST_ALREADY_COMPLETED; - } - long cooldown = getCooldownFor(quest); - if (cooldown > 0) { - return QuestStartResult.QUEST_COOLDOWN; - } - if (!hasMetRequirements(quest)) { - return QuestStartResult.QUEST_LOCKED; - } - if (questProgress.isStarted()) { - return QuestStartResult.QUEST_ALREADY_STARTED; - } - if (quest.isPermissionRequired()) { - if (playerUUID != null) { - if (!p.hasPermission("quests.quest." + quest.getId())) { - return QuestStartResult.QUEST_NO_PERMISSION; - } - } else { - return QuestStartResult.QUEST_NO_PERMISSION; - } - } - if (quest.getCategoryId() != null && plugin.getQuestManager().getCategoryById(quest.getCategoryId()) != null && plugin.getQuestManager() - .getCategoryById(quest.getCategoryId()).isPermissionRequired()) { - if (playerUUID != null) { - if (!p.hasPermission("quests.category." + quest.getCategoryId())) { - return QuestStartResult.NO_PERMISSION_FOR_CATEGORY; - } - } else { - return QuestStartResult.NO_PERMISSION_FOR_CATEGORY; - } - } - return QuestStartResult.QUEST_SUCCESS; - } - - /** - * Attempt to start a quest for the player. This will also play all effects (such as titles, messages etc.) - * - * Warning: will fail if the player is not online. - * - * @param quest the quest to start - * @return the quest start result -- {@code QuestStartResult.QUEST_SUCCESS} indicates success - */ - // TODO PlaceholderAPI support - public QuestStartResult startQuest(Quest quest) { - Player player = Bukkit.getPlayer(playerUUID); - QuestStartResult code = canStartQuest(quest); - if (player != null) { - String questResultMessage = null; - switch (code) { - case QUEST_SUCCESS: - // This one is hacky - break; - case QUEST_LIMIT_REACHED: - questResultMessage = Messages.QUEST_START_LIMIT.getMessage().replace("{limit}", String.valueOf(Options.QUESTS_START_LIMIT.getIntValue())); - break; - case QUEST_ALREADY_COMPLETED: - questResultMessage = Messages.QUEST_START_DISABLED.getMessage(); - break; - case QUEST_COOLDOWN: - long cooldown = getCooldownFor(quest); - questResultMessage = Messages.QUEST_START_COOLDOWN.getMessage().replace("{time}", String.valueOf(plugin.convertToFormat(TimeUnit.SECONDS.convert - (cooldown, TimeUnit.MILLISECONDS)))); - break; - case QUEST_LOCKED: - questResultMessage = Messages.QUEST_START_LOCKED.getMessage(); - break; - case QUEST_ALREADY_STARTED: - questResultMessage = Messages.QUEST_START_STARTED.getMessage(); - break; - case QUEST_NO_PERMISSION: - questResultMessage = Messages.QUEST_START_PERMISSION.getMessage(); - break; - case NO_PERMISSION_FOR_CATEGORY: - questResultMessage = Messages.QUEST_CATEGORY_QUEST_PERMISSION.getMessage(); - break; - } - QPlayer questPlayer = QuestsAPI.getPlayerManager().getPlayer(this.playerUUID); - // PreStartQuestEvent -- start - PreStartQuestEvent preStartQuestEvent = new PreStartQuestEvent(player, questPlayer, questResultMessage, code); - Bukkit.getPluginManager().callEvent(preStartQuestEvent); - // PreStartQuestEvent -- end - if (preStartQuestEvent.getQuestResultMessage() != null && code != QuestStartResult.QUEST_SUCCESS) - player.sendMessage(preStartQuestEvent.getQuestResultMessage()); - } - if (code == QuestStartResult.QUEST_SUCCESS) { - QuestProgress questProgress = getQuestProgress(quest); - questProgress.setStarted(true); - for (TaskProgress taskProgress : questProgress.getTaskProgress()) { - taskProgress.setCompleted(false); - taskProgress.setProgress(null); - } - if (Options.ALLOW_QUEST_TRACK.getBooleanValue() && Options.QUEST_AUTOTRACK.getBooleanValue()) { - trackQuest(quest); - } - questProgress.setCompleted(false); - if (player != null) { - QPlayer questPlayer = QuestsAPI.getPlayerManager().getPlayer(this.playerUUID); - String questStartMessage = Messages.QUEST_START.getMessage().replace("{quest}", quest.getDisplayNameStripped()); - // PlayerStartQuestEvent -- start - PlayerStartQuestEvent questStartEvent = new PlayerStartQuestEvent(player, questPlayer, questProgress, questStartMessage); - Bukkit.getPluginManager().callEvent(questStartEvent); - // PlayerStartQuestEvent -- end - if (questStartEvent.getQuestStartMessage() != null) - player.sendMessage(questStartEvent.getQuestStartMessage()); //Don't send a message if the event message is null - if (Options.TITLES_ENABLED.getBooleanValue()) { - plugin.getTitle().sendTitle(player, Messages.TITLE_QUEST_START_TITLE.getMessage().replace("{quest}", quest - .getDisplayNameStripped()), Messages.TITLE_QUEST_START_SUBTITLE.getMessage().replace("{quest}", quest - .getDisplayNameStripped())); - } - for (String s : quest.getStartString()) { - player.sendMessage(ChatColor.translateAlternateColorCodes('&', s)); - } - } - for (Task task : quest.getTasks()) { - try { - plugin.getTaskTypeManager().getTaskType(task.getType()).onStart(quest, task, playerUUID); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - return code; - } - - /** - * Attempt to cancel a quest for the player. This will also play all effects (such as titles, messages etc.) - * - * @param quest the quest to start - * @return true if the quest was cancelled, false otherwise - */ - public boolean cancelQuest(Quest quest) { - QuestProgress questProgress = getQuestProgress(quest); - Player player = Bukkit.getPlayer(this.playerUUID); - if (!questProgress.isStarted()) { - if (player != null) { - player.sendMessage(Messages.QUEST_CANCEL_NOTSTARTED.getMessage()); - } - return false; - } - questProgress.setStarted(false); - for (TaskProgress taskProgress : questProgress.getTaskProgress()) { - taskProgress.setProgress(null); - } - if (player != null) { - QPlayer questPlayer = QuestsAPI.getPlayerManager().getPlayer(this.playerUUID); - String questCancelMessage = Messages.QUEST_CANCEL.getMessage().replace("{quest}", quest.getDisplayNameStripped()); - // PlayerCancelQuestEvent -- start - PlayerCancelQuestEvent questCancelEvent = new PlayerCancelQuestEvent(player, questPlayer, questProgress, questCancelMessage); - Bukkit.getPluginManager().callEvent(questCancelEvent); - // PlayerCancelQuestEvent -- end - if (questCancelEvent.getQuestCancelMessage() != null) - player.sendMessage(questCancelEvent.getQuestCancelMessage()); - } - return true; - } - public void addQuestProgress(QuestProgress questProgress) { this.questProgress.put(questProgress.getQuestId(), questProgress); } @@ -301,9 +50,9 @@ public class QuestProgressFile { /** * Gets all started quests. * Note: if quest autostart is enabled then this may produce unexpected results as quests are - * not "started" by the player if autostart is true. Consider {@link #hasStartedQuest(Quest)} instead. + * not "started" by the player if autostart is true. Consider {@link QPlayer#hasStartedQuest(Quest)} instead. * - * @return + * @return list of started quests */ public List<Quest> getStartedQuests() { List<Quest> startedQuests = new ArrayList<>(); @@ -388,21 +137,6 @@ public class QuestProgressFile { } /** - * Gets whether or not the player has started a specific quest. - * - * @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) { - if (Options.QUEST_AUTOSTART.getBooleanValue()) { - QuestStartResult response = canStartQuest(quest); - return response == QuestStartResult.QUEST_SUCCESS || response == QuestStartResult.QUEST_ALREADY_STARTED; - } else { - return hasQuestProgress(quest) && getQuestProgress(quest).isStarted(); - } - } - - /** * Gets the remaining cooldown before being able to start a specific quest. * * @param quest the quest to test for @@ -425,6 +159,7 @@ public class QuestProgressFile { * @param quest the quest to test for * @return true if they can start the quest */ + //TODO possibly move this public boolean hasMetRequirements(Quest quest) { for (String id : quest.getRequirements()) { Quest q = plugin.getQuestManager().getQuestById(id); @@ -458,36 +193,25 @@ public class QuestProgressFile { public QuestProgress getQuestProgress(Quest quest) { if (questProgress.containsKey(quest.getId())) { return questProgress.get(quest.getId()); - } else if (generateBlankQuestProgress(quest.getId())) { - return getQuestProgress(quest); } - return null; + generateBlankQuestProgress(quest); + return getQuestProgress(quest); } /** - * Generate a new blank {@link QuestProgress} for a specified {@code questid}. - * Has no effect if there is already an existing {@link QuestProgress} for {@code questid}. + * Generate a new blank {@link QuestProgress} for a specified {@code quest}. + * Has no effect if there is already an existing {@link QuestProgress} for {@code quest}. * - * @param questid the quest to generate progress for - * @return true if successful + * @param quest the quest to generate progress for */ - public boolean generateBlankQuestProgress(String questid) { - if (plugin.getQuestManager().getQuestById(questid) != null) { - Quest quest = plugin.getQuestManager().getQuestById(questid); - QuestProgress questProgress = new QuestProgress(plugin, quest.getId(), false, false, 0, playerUUID, false, false); - for (Task task : quest.getTasks()) { - TaskProgress taskProgress = new TaskProgress(questProgress, task.getId(), null, playerUUID, false, false); - questProgress.addTaskProgress(taskProgress); - } - - addQuestProgress(questProgress); - return true; + public void generateBlankQuestProgress(Quest quest) { + QuestProgress questProgress = new QuestProgress(plugin, quest.getId(), false, false, 0, playerUUID, false, false); + for (Task task : quest.getTasks()) { + TaskProgress taskProgress = new TaskProgress(questProgress, task.getId(), null, playerUUID, false, false); + questProgress.addTaskProgress(taskProgress); } - return false; - } - public QPlayerPreferences getPlayerPreferences() { - return playerPreferences; + addQuestProgress(questProgress); } /** diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BreedingTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BreedingTaskType.java index 752092a1..97b4dc78 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BreedingTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BreedingTaskType.java @@ -66,11 +66,9 @@ public final class BreedingTaskType extends TaskType { continue; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(player, task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BrewingTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BrewingTaskType.java index 6c6c366e..b43a4bd7 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BrewingTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BrewingTaskType.java @@ -75,11 +75,9 @@ public final class BrewingTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(player, task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BuildingCertainTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BuildingCertainTaskType.java index 8484d441..29a2d14c 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BuildingCertainTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BuildingCertainTaskType.java @@ -83,11 +83,13 @@ public final class BuildingCertainTaskType extends TaskType { if (event.getPlayer().hasMetadata("NPC")) return; QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId()); - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); + if (qPlayer == null) { + return; + } for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(event.getPlayer(), task)) continue; @@ -116,11 +118,9 @@ public final class BuildingCertainTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BuildingTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BuildingTaskType.java index e3c0a32d..4e782baf 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BuildingTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BuildingTaskType.java @@ -51,11 +51,9 @@ public final class BuildingTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(event.getPlayer(), task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/CommandTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/CommandTaskType.java index 8c2bd081..9e80b102 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/CommandTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/CommandTaskType.java @@ -55,11 +55,9 @@ public final class CommandTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(player, task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/DealDamageTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/DealDamageTaskType.java index 8835d69b..8bfd2bba 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/DealDamageTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/DealDamageTaskType.java @@ -59,11 +59,9 @@ public final class DealDamageTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(player, task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/DistancefromTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/DistancefromTaskType.java index 0704a9f2..c03a8925 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/DistancefromTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/DistancefromTaskType.java @@ -84,11 +84,9 @@ public final class DistancefromTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/EnchantingTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/EnchantingTaskType.java index 0ee2a1c4..457e9991 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/EnchantingTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/EnchantingTaskType.java @@ -54,11 +54,9 @@ public final class EnchantingTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(player, task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/ExpEarnTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/ExpEarnTaskType.java index 9df8a0ef..c387fe73 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/ExpEarnTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/ExpEarnTaskType.java @@ -51,11 +51,10 @@ public final class ExpEarnTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - + for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(e.getPlayer(), task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/FarmingTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/FarmingTaskType.java index 3eab0955..23f4f561 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/FarmingTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/FarmingTaskType.java @@ -49,11 +49,9 @@ public final class FarmingTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(event.getPlayer(), task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/FishingTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/FishingTaskType.java index afe87786..876957a3 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/FishingTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/FishingTaskType.java @@ -63,11 +63,9 @@ public final class FishingTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(player, task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/InventoryTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/InventoryTaskType.java index 88921877..bc7c8534 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/InventoryTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/InventoryTaskType.java @@ -29,9 +29,11 @@ import java.util.List; public final class InventoryTaskType extends TaskType { private List<ConfigValue> creatorConfigValues = new ArrayList<>(); - - public InventoryTaskType() { + private final Quests plugin; + + public InventoryTaskType(Quests plugin) { super("inventory", "LMBishop", "Obtain a set of items."); + this.plugin = plugin; this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of item to retrieve.")); this.creatorConfigValues.add(new ConfigValue("item", true, "Name or ID of item.")); this.creatorConfigValues.add(new ConfigValue("data", false, "Data of item.")); @@ -57,7 +59,7 @@ public final class InventoryTaskType extends TaskType { QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(""), root + ".item.type")); } else { String type = String.valueOf(section.get(itemloc)); - if (!Quests.get().getItemGetter().isValidMaterial(type)) { + if (!plugin.getItemGetter().isValidMaterial(type)) { problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING, QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(type), root + ".item." + itemloc)); } @@ -88,12 +90,12 @@ public final class InventoryTaskType extends TaskType { public void onItemPickup(PlayerPickupItemEvent event) { if (event.getPlayer().hasMetadata("NPC")) return; - Bukkit.getScheduler().runTaskLater(Quests.get(), () -> this.checkInventory(event.getPlayer()), 1L); + Bukkit.getScheduler().runTaskLater(plugin, () -> this.checkInventory(event.getPlayer()), 1L); } @EventHandler(priority = EventPriority.MONITOR) public void onInventoryClick(InventoryCloseEvent event) { - Bukkit.getScheduler().runTaskLater(Quests.get(), () -> checkInventory((Player) event.getPlayer()), 1L); //Still some work to do as it doesn't really work + Bukkit.getScheduler().runTaskLater(plugin, () -> checkInventory((Player) event.getPlayer()), 1L); //Still some work to do as it doesn't really work } @SuppressWarnings("deprecation") @@ -107,11 +109,9 @@ public final class InventoryTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(player, task)) continue; @@ -130,7 +130,7 @@ public final class InventoryTaskType extends TaskType { ItemStack is; if (configBlock instanceof ConfigurationSection) { - is = Quests.get().getItemStack("", (org.bukkit.configuration.ConfigurationSection) configBlock); + is = plugin.getItemStack("", (org.bukkit.configuration.ConfigurationSection) configBlock); } else { material = Material.getMaterial(String.valueOf(configBlock)); diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MilkingTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MilkingTaskType.java index fa7df3a2..2528fb02 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MilkingTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MilkingTaskType.java @@ -64,8 +64,8 @@ public final class MilkingTaskType extends TaskType { QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(player, task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MiningCertainTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MiningCertainTaskType.java index 8be6dc0e..9fe54d7d 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MiningCertainTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MiningCertainTaskType.java @@ -25,10 +25,12 @@ import java.util.List; public final class MiningCertainTaskType extends TaskType { + private final Quests plugin; private List<ConfigValue> creatorConfigValues = new ArrayList<>(); - public MiningCertainTaskType() { + public MiningCertainTaskType(Quests plugin) { super("blockbreakcertain", "LMBishop", "Break a set amount of a specific block."); + this.plugin = plugin; this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of blocks to be broken.")); this.creatorConfigValues.add(new ConfigValue("block", true, "Name or ID of block.", "block")); // Can use name:datacode this.creatorConfigValues.add(new ConfigValue("blocks", true, "List of blocks (alias for block for config readability).", "block")); @@ -93,11 +95,9 @@ public final class MiningCertainTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); @@ -110,7 +110,7 @@ public final class MiningCertainTaskType extends TaskType { boolean coreProtectEnabled = (boolean) task.getConfigValue("check-coreprotect", false); int coreProtectTime = (int) task.getConfigValue("check-coreprotect-time", 3600); - if (coreProtectEnabled && Quests.get().getCoreProtectHook().checkBlock(event.getBlock(), coreProtectTime)) { + if (coreProtectEnabled && plugin.getCoreProtectHook().checkBlock(event.getBlock(), coreProtectTime)) { continue; } increment(task, taskProgress, 1); @@ -126,11 +126,10 @@ public final class MiningCertainTaskType extends TaskType { if (event.getPlayer().hasMetadata("NPC")) return; QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId()); - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(event.getPlayer(), task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MiningTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MiningTaskType.java index 45661bb4..9222e699 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MiningTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MiningTaskType.java @@ -54,11 +54,9 @@ public final class MiningTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); // the quest progress file stores progress about all quests and tasks - for (Quest quest : super.getRegisteredQuests()) { // iterate through all quests which are registered to use this task type - if (questProgressFile.hasStartedQuest(quest)) { // check if the player has actually started the quest before progressing it - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); // get their progress for the specific quest + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { // get all tasks of this type if (!TaskUtils.validateWorld(event.getPlayer(), task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MobkillingCertainTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MobkillingCertainTaskType.java index 689f7235..47e4a1a4 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MobkillingCertainTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MobkillingCertainTaskType.java @@ -76,11 +76,9 @@ public final class MobkillingCertainTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(killer, task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MobkillingTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MobkillingTaskType.java index e92466b8..8b41f7bd 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MobkillingTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MobkillingTaskType.java @@ -67,11 +67,9 @@ public final class MobkillingTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(killer, task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PermissionTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PermissionTaskType.java index f094e5cf..96cb94f7 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PermissionTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PermissionTaskType.java @@ -20,11 +20,13 @@ import java.util.List; public final class PermissionTaskType extends TaskType { + private Quests plugin; private BukkitTask poll; private List<ConfigValue> creatorConfigValues = new ArrayList<>(); - public PermissionTaskType() { + public PermissionTaskType(Quests plugin) { super("permission", "LMBishop", "Test if a player has a permission"); + this.plugin = plugin; this.creatorConfigValues.add(new ConfigValue("permission", true, "The required permission.")); } @@ -38,10 +40,9 @@ public final class PermissionTaskType extends TaskType { if (qPlayer == null) { continue; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); for (Quest quest : PermissionTaskType.super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(PermissionTaskType.super.getType())) { TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); if (taskProgress.isCompleted()) { @@ -58,7 +59,7 @@ public final class PermissionTaskType extends TaskType { } } } - }.runTaskTimer(Quests.get(), 30L, 30L); + }.runTaskTimer(plugin, 30L, 30L); } @Override diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlayerkillingTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlayerkillingTaskType.java index 6b6785a2..3aa326dc 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlayerkillingTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlayerkillingTaskType.java @@ -63,11 +63,9 @@ public final class PlayerkillingTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(killer, task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlaytimeTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlaytimeTaskType.java index fd05e9c8..c3fe7733 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlaytimeTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlaytimeTaskType.java @@ -23,11 +23,13 @@ import java.util.List; public final class PlaytimeTaskType extends TaskType { + private final Quests plugin; private BukkitTask poll; private List<ConfigValue> creatorConfigValues = new ArrayList<>(); - public PlaytimeTaskType() { + public PlaytimeTaskType(Quests plugin) { super("playtime", "Reinatix", "Track the amount of playing time a user has been on"); + this.plugin = plugin; this.creatorConfigValues.add(new ConfigValue("minutes", true, "Time in minutes.")); } @@ -52,10 +54,9 @@ public final class PlaytimeTaskType extends TaskType { continue; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); for (Quest quest : PlaytimeTaskType.super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(PlaytimeTaskType.super.getType())) { if (!TaskUtils.validateWorld(player, task)) continue; @@ -77,7 +78,7 @@ public final class PlaytimeTaskType extends TaskType { } } } - }.runTaskTimer(Quests.get(), 1200L, 1200L); + }.runTaskTimer(plugin, 1200L, 1200L); } } diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PositionTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PositionTaskType.java index 5082c43e..862a74e0 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PositionTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PositionTaskType.java @@ -70,11 +70,9 @@ public final class PositionTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/ShearingTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/ShearingTaskType.java index 3c242aa8..2ed0775b 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/ShearingTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/ShearingTaskType.java @@ -59,11 +59,9 @@ public final class ShearingTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(player, task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/TamingTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/TamingTaskType.java index 06015448..66f96e9e 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/TamingTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/TamingTaskType.java @@ -58,11 +58,9 @@ public final class TamingTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(player, task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/WalkingTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/WalkingTaskType.java index 16e87d9f..be8d08b9 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/WalkingTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/WalkingTaskType.java @@ -58,11 +58,9 @@ public final class WalkingTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(player, task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ASkyBlockLevelType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ASkyBlockLevelType.java index aebe573c..9ebc31c2 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ASkyBlockLevelType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ASkyBlockLevelType.java @@ -48,11 +48,9 @@ public final class ASkyBlockLevelType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/BentoBoxLevelTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/BentoBoxLevelTaskType.java index ca6f5b61..c6621f97 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/BentoBoxLevelTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/BentoBoxLevelTaskType.java @@ -67,11 +67,9 @@ public final class BentoBoxLevelTaskType extends TaskType { continue; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensDeliverTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensDeliverTaskType.java index 57ca29f8..8afe3a4d 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensDeliverTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensDeliverTaskType.java @@ -27,10 +27,12 @@ import java.util.List; public final class CitizensDeliverTaskType extends TaskType { + private final Quests plugin; private List<ConfigValue> creatorConfigValues = new ArrayList<>(); - public CitizensDeliverTaskType() { + public CitizensDeliverTaskType(Quests plugin) { super("citizens_deliver", "LMBishop", "Deliver a set of items to a NPC."); + this.plugin = plugin; this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of item to retrieve.")); this.creatorConfigValues.add(new ConfigValue("item", true, "Name or ID of item.")); this.creatorConfigValues.add(new ConfigValue("npc-name", true, "Name of the NPC.")); @@ -55,7 +57,7 @@ public final class CitizensDeliverTaskType extends TaskType { QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(""), root + ".item.type")); } else { String type = String.valueOf(section.get(itemloc)); - if (!Quests.get().getItemGetter().isValidMaterial(type)) { + if (!plugin.getItemGetter().isValidMaterial(type)) { problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING, QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(type), root + ".item." + itemloc)); } @@ -81,7 +83,7 @@ public final class CitizensDeliverTaskType extends TaskType { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onNPCClick(NPCRightClickEvent event) { - Bukkit.getScheduler().runTaskLater(Quests.get(), () -> checkInventory(event.getClicker(), event.getNPC().getName()), 1L); + Bukkit.getScheduler().runTaskLater(plugin, () -> checkInventory(event.getClicker(), event.getNPC().getName()), 1L); } @SuppressWarnings("deprecation") @@ -89,16 +91,14 @@ public final class CitizensDeliverTaskType extends TaskType { if (player == null || !player.isOnline()) { return; } - QPlayer qPlayer = Quests.get().getPlayerManager().getPlayer(player.getUniqueId()); + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); if (qPlayer == null) { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', String.valueOf(task.getConfigValue("npc-name")))).equals(ChatColor diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensInteractTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensInteractTaskType.java index f3692cee..3ce7bb01 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensInteractTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensInteractTaskType.java @@ -51,11 +51,9 @@ public final class CitizensInteractTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(event.getClicker(), task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/EssentialsBalanceTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/EssentialsBalanceTaskType.java index 7a07fc32..b110a038 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/EssentialsBalanceTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/EssentialsBalanceTaskType.java @@ -72,11 +72,9 @@ public class EssentialsBalanceTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/EssentialsMoneyEarnTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/EssentialsMoneyEarnTaskType.java index 1a8d6076..ea517e7d 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/EssentialsMoneyEarnTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/EssentialsMoneyEarnTaskType.java @@ -50,11 +50,9 @@ public class EssentialsMoneyEarnTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/IridiumSkyblockValueType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/IridiumSkyblockValueType.java index 5191c52e..611a0d47 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/IridiumSkyblockValueType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/IridiumSkyblockValueType.java @@ -2,7 +2,6 @@ package com.leonardobishop.quests.quests.tasktypes.types.dependent; import com.iridium.iridiumskyblock.Island; import com.iridium.iridiumskyblock.api.IslandWorthCalculatedEvent; -import com.leonardobishop.quests.Quests; import com.leonardobishop.quests.QuestsConfigLoader; import com.leonardobishop.quests.api.QuestsAPI; import com.leonardobishop.quests.player.QPlayer; @@ -47,7 +46,6 @@ public final class IridiumSkyblockValueType extends TaskType { try { uuid = UUID.fromString(player); } catch (Exception e) { - Quests.get().getQuestsLogger().debug("Cannot convert from String to UUID for IridiumSkyblock"); continue; } QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(uuid); @@ -55,11 +53,9 @@ public final class IridiumSkyblockValueType extends TaskType { continue; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : IridiumSkyblockValueType.super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(IridiumSkyblockValueType.super.getType())) { TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/MythicMobsKillingType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/MythicMobsKillingType.java index f314ca10..e98501cd 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/MythicMobsKillingType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/MythicMobsKillingType.java @@ -65,11 +65,9 @@ public final class MythicMobsKillingType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(killer.getWorld().getName(), task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/PlaceholderAPIEvaluateTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/PlaceholderAPIEvaluateTaskType.java index d6b8d2df..9932ac5a 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/PlaceholderAPIEvaluateTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/PlaceholderAPIEvaluateTaskType.java @@ -24,11 +24,13 @@ import java.util.List; public final class PlaceholderAPIEvaluateTaskType extends TaskType { + private final Quests plugin; private BukkitTask poll; private List<ConfigValue> creatorConfigValues = new ArrayList<>(); - public PlaceholderAPIEvaluateTaskType() { + public PlaceholderAPIEvaluateTaskType(Quests plugin) { super("placeholderapi_evaluate", "LMBishop", "Evaluate the result of a placeholder"); + this.plugin = plugin; this.creatorConfigValues.add(new ConfigValue("placeholder", true, "The placeholder string (including %%).")); this.creatorConfigValues.add(new ConfigValue("evaluates", true, "What it should evaluate to be marked as complete.")); this.creatorConfigValues.add(new ConfigValue("operator", false, "Comparison method.")); @@ -73,10 +75,9 @@ public final class PlaceholderAPIEvaluateTaskType extends TaskType { continue; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); for (Quest quest : PlaceholderAPIEvaluateTaskType.super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(PlaceholderAPIEvaluateTaskType.super.getType())) { if (!TaskUtils.validateWorld(player, task)) continue; TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); @@ -138,7 +139,7 @@ public final class PlaceholderAPIEvaluateTaskType extends TaskType { } } } - }.runTaskTimer(Quests.get(), 30L, 30L); + }.runTaskTimer(plugin, 30L, 30L); } @Override diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ShopGUIPlusBuyCertainTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ShopGUIPlusBuyCertainTaskType.java index ae757e50..417df314 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ShopGUIPlusBuyCertainTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ShopGUIPlusBuyCertainTaskType.java @@ -43,11 +43,9 @@ public class ShopGUIPlusBuyCertainTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(event.getPlayer().getWorld().getName(), task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ShopGUIPlusSellCertainTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ShopGUIPlusSellCertainTaskType.java index 1a062393..623b2199 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ShopGUIPlusSellCertainTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ShopGUIPlusSellCertainTaskType.java @@ -43,11 +43,9 @@ public class ShopGUIPlusSellCertainTaskType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { if (!TaskUtils.validateWorld(event.getPlayer().getWorld().getName(), task)) continue; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/uSkyBlockLevelType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/uSkyBlockLevelType.java index f6a23e45..a45653dd 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/uSkyBlockLevelType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/uSkyBlockLevelType.java @@ -49,11 +49,9 @@ public final class uSkyBlockLevelType extends TaskType { return; } - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(super.getType())) { TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); diff --git a/src/main/java/com/leonardobishop/quests/updater/Updater.java b/src/main/java/com/leonardobishop/quests/updater/Updater.java index 5fa1a7e5..6bd28b49 100644 --- a/src/main/java/com/leonardobishop/quests/updater/Updater.java +++ b/src/main/java/com/leonardobishop/quests/updater/Updater.java @@ -14,46 +14,54 @@ import java.util.concurrent.TimeUnit; public class Updater { private static final int PROJECT_ID = 23696; - private final String installedVersion; private final Quests plugin; + private final boolean enabled; private String returnedVersion; private URL api; private boolean updateReady; private long lastCheck; - public Updater(Quests plugin) { + public Updater(Quests plugin, boolean enabled) { this.plugin = plugin; this.installedVersion = plugin.getDescription().getVersion(); + this.enabled = enabled; try { - this.api = new URL("https://api.spigotmc.org/legacy/update.php?resource=" + PROJECT_ID); - } catch (MalformedURLException ignored) { - // shit + fan - } + this.api = new URL(getApiUrl()); + } catch (MalformedURLException ignored) { } } - public String getLink() { + public String getUpdateLink() { return "https://www.spigotmc.org/resources/" + PROJECT_ID; } + + public String getApiUrl() { + return "https://api.spigotmc.org/legacy/update.php?resource=" + PROJECT_ID; + } - public boolean check() { + public void check() { + if (!enabled) { + return; + } + // stop users from spamming the command and making needless requests if (lastCheck != 0 && TimeUnit.MINUTES.convert(System.currentTimeMillis() - lastCheck, TimeUnit.MILLISECONDS) < 10) { - return updateReady; + return; } try { lastCheck = System.currentTimeMillis(); URLConnection con = api.openConnection(); returnedVersion = new BufferedReader(new InputStreamReader(con.getInputStream())).readLine(); if (!returnedVersion.equals(installedVersion)) { - plugin.getQuestsLogger().info("A new version " + returnedVersion + " was found on Spigot (your version: " + installedVersion + "). Please update me! <3 - Link: " + getLink()); + plugin.getQuestsLogger().info("A new version " + returnedVersion + " was found on Spigot (your version: " + installedVersion + "). Please update me! <3 - Link: " + getUpdateLink()); updateReady = true; + } else { + updateReady = false; } } catch (IOException e) { - plugin.getQuestsLogger().warning("Failed to check for updates. You can check manually at " + getLink()); + plugin.getQuestsLogger().warning("Failed to check for updates. You can check manually at " + getUpdateLink()); // probably offline } - return false; } public boolean isUpdateReady() { @@ -61,6 +69,6 @@ public class Updater { } public String getMessage() { - return Messages.QUEST_UPDATER.getMessage().replace("{newver}", returnedVersion).replace("{oldver}", installedVersion).replace("{link}", getLink()); + return Messages.QUEST_UPDATER.getMessage().replace("{newver}", returnedVersion).replace("{oldver}", installedVersion).replace("{link}", getUpdateLink()); } }
\ No newline at end of file diff --git a/src/main/java/com/leonardobishop/quests/util/Items.java b/src/main/java/com/leonardobishop/quests/util/Items.java index a6af8cd5..be34d72c 100644 --- a/src/main/java/com/leonardobishop/quests/util/Items.java +++ b/src/main/java/com/leonardobishop/quests/util/Items.java @@ -3,6 +3,9 @@ package com.leonardobishop.quests.util; import com.leonardobishop.quests.Quests; import org.bukkit.inventory.ItemStack; +import java.util.HashMap; +import java.util.Map; + public enum Items { BACK_BUTTON("gui.back-button"), @@ -18,6 +21,8 @@ public enum Items { QUEST_CANCEL_NO("gui.quest-cancel-no"), QUEST_CANCEL_BACKGROUND("gui.quest-cancel-background"); + private static final Map<String, ItemStack> cachedItemStacks = new HashMap<>(); + private final String path; Items(String path) { @@ -25,7 +30,7 @@ public enum Items { } public ItemStack getItem() { - return Quests.get().getItemStack(path, Quests.get().getConfig()); + return new ItemStack(cachedItemStacks.computeIfAbsent(path, s -> Quests.get().getItemStack(path, Quests.get().getConfig()))); } } diff --git a/src/main/java/com/leonardobishop/quests/util/Options.java b/src/main/java/com/leonardobishop/quests/util/Options.java index e1737f4b..1a11b402 100644 --- a/src/main/java/com/leonardobishop/quests/util/Options.java +++ b/src/main/java/com/leonardobishop/quests/util/Options.java @@ -9,6 +9,7 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public enum Options { + CATEGORIES_ENABLED("options.categories-enabled"), TRIM_GUI_SIZE("options.trim-gui-size"), QUESTS_START_LIMIT("options.quest-started-limit"), |
