diff options
Diffstat (limited to 'src/main/java/com')
27 files changed, 192 insertions, 241 deletions
diff --git a/src/main/java/com/leonardobishop/quests/Quests.java b/src/main/java/com/leonardobishop/quests/Quests.java index 1997699b..7f5df19e 100644 --- a/src/main/java/com/leonardobishop/quests/Quests.java +++ b/src/main/java/com/leonardobishop/quests/Quests.java @@ -76,17 +76,19 @@ 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; + + private QuestManager questManager; + private QPlayerManager qPlayerManager; + private TaskTypeManager taskTypeManager; + + private Title titleHandle; private ItemGetter itemGetter; private QuestCompleter questCompleter; private QuestsConfigLoader questsConfigLoader; private QuestsLogger questsLogger; + private MenuController menuController; private IPlaceholderAPIHook placeholderAPIHook; private ICoreProtectHook coreProtectHook; @@ -119,8 +121,8 @@ public class Quests extends JavaPlugin { this.brokenConfig = brokenConfig; } - public Title getTitle() { - return title; + public Title getTitleHandle() { + return titleHandle; } public Updater getUpdater() { @@ -131,6 +133,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 +158,14 @@ public class Quests extends JavaPlugin { taskTypeManager = new TaskTypeManager(this); questManager = new QuestManager(this); qPlayerManager = new QPlayerManager(this); + menuController = new MenuController(this); dataGenerator(); setupVersionSpecific(); Bukkit.getPluginCommand("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 +178,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 +215,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()); @@ -346,7 +353,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 +361,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,9 +377,9 @@ 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."); 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/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..c1479beb 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; } @@ -75,10 +66,7 @@ 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(), this.getSuperMenu(), 1); } else if (event.getSlot() == 14 || event.getSlot() == 15 || event.getSlot() == 16) { if (this.getOwner().getQuestProgressFile().cancelQuest(this.getQuest())) { 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..8a56c044 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.getUuid()).hasPermission("quests.category." + questQMenu.getCategoryName())) { continue; } } - menuElements.put(slot, new CategoryMenuElement(plugin, owner.getUuid(), qMenuQuest)); + menuElements.put(slot, new CategoryMenuElement(plugin, owner.getUuid(), questQMenu)); slot++; } @@ -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..c3f1a94f 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().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(); + } + } + + public static void handleRightClick(QMenu menu, Quest quest, Player player, MenuController controller) { + if (menu.getOwner().getQuestProgressFile().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..e2a918dc 100644 --- a/src/main/java/com/leonardobishop/quests/menu/QItemStack.java +++ b/src/main/java/com/leonardobishop/quests/menu/QItemStack.java @@ -93,19 +93,13 @@ public class QItemStack { 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 { + 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..0499174c 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; @@ -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(), this.getSuperMenu(), 1); } else if (event.getSlot() < pageSize && menuElements.containsKey(event.getSlot() + (((currentPage) - 1) * pageSize))) { MenuElement menuElement = menuElements.get(event.getSlot() + ((currentPage - 1) * pageSize)); @@ -226,10 +220,10 @@ public class QMenuQuest implements QMenu { 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.getUuid()), 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())); + MenuUtil.handleRightClick(this, quest, Bukkit.getPlayer(owner.getUuid()), controller); } } } @@ -247,7 +241,7 @@ public class QMenuQuest implements QMenu { return backButtonLocation; } - public QMenuCategory getSuperMenu() { + public CategoryQMenu getSuperMenu() { return superMenu; } diff --git a/src/main/java/com/leonardobishop/quests/menu/QMenuStarted.java b/src/main/java/com/leonardobishop/quests/menu/StartedQMenu.java index fbbfae69..4bb06bfe 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; } @@ -90,7 +90,7 @@ 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( @@ -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.getUuid()), 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.getQuestProgressFile().hasStartedQuest(quest)) { + MenuUtil.handleRightClick(this, quest, Bukkit.getPlayer(owner.getUuid()), 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..e1cd6c22 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()); @@ -65,7 +65,7 @@ public class QuestMenuElement extends MenuElement { 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; diff --git a/src/main/java/com/leonardobishop/quests/player/QPlayer.java b/src/main/java/com/leonardobishop/quests/player/QPlayer.java index b2dba6fe..9b4807e9 100644 --- a/src/main/java/com/leonardobishop/quests/player/QPlayer.java +++ b/src/main/java/com/leonardobishop/quests/player/QPlayer.java @@ -1,11 +1,10 @@ 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.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.QuestProgressFile; import com.leonardobishop.quests.quests.Category; import com.leonardobishop.quests.quests.Quest; @@ -37,7 +36,7 @@ public class QPlayer { /** * @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 +47,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 +55,15 @@ 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); } /** * @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 +73,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 +87,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 +98,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,15 +126,14 @@ 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() { 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..137d83f9 100644 --- a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java +++ b/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java @@ -81,7 +81,7 @@ public class QuestProgressFile { 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 + plugin.getTitleHandle().sendTitle(player, Messages.TITLE_QUEST_COMPLETE_TITLE.getMessage().replace("{quest}", quest .getDisplayNameStripped()), Messages.TITLE_QUEST_COMPLETE_SUBTITLE.getMessage().replace("{quest}", quest .getDisplayNameStripped())); } @@ -243,7 +243,7 @@ public class QuestProgressFile { 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 + plugin.getTitleHandle().sendTitle(player, Messages.TITLE_QUEST_START_TITLE.getMessage().replace("{quest}", quest .getDisplayNameStripped()), Messages.TITLE_QUEST_START_SUBTITLE.getMessage().replace("{quest}", quest .getDisplayNameStripped())); } 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..5db2ee7c 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") @@ -130,7 +132,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/MiningCertainTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MiningCertainTaskType.java index 8be6dc0e..e3f89ff6 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")); @@ -110,7 +112,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); 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..59e48061 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.")); } @@ -58,7 +60,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/PlaytimeTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlaytimeTaskType.java index fd05e9c8..7fee929b 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.")); } @@ -77,7 +79,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/dependent/CitizensDeliverTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensDeliverTaskType.java index ccced949..d7d73131 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,7 +91,7 @@ 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; } @@ -121,7 +123,7 @@ public final class CitizensDeliverTaskType extends TaskType { ItemStack is; if (configBlock instanceof ConfigurationSection) { - is = Quests.get().getItemStack(null, (org.bukkit.configuration.ConfigurationSection) configBlock); + is = plugin.getItemStack(null, (org.bukkit.configuration.ConfigurationSection) configBlock); } else { material = Material.getMaterial(String.valueOf(configBlock)); 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..76b2df1a 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); 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..9ba9005b 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.")); @@ -138,7 +140,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/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"), |
