aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/leonardobishop/quests/Quests.java47
-rw-r--r--src/main/java/com/leonardobishop/quests/QuestsAutosaveRunnable.java1
-rw-r--r--src/main/java/com/leonardobishop/quests/events/EventPlayerJoin.java3
-rw-r--r--src/main/java/com/leonardobishop/quests/events/EventPlayerLeave.java5
-rw-r--r--src/main/java/com/leonardobishop/quests/events/MenuController.java65
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/CancelQMenu.java (renamed from src/main/java/com/leonardobishop/quests/menu/QMenuCancel.java)24
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/CategoryQMenu.java (renamed from src/main/java/com/leonardobishop/quests/menu/QMenuCategory.java)41
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/DailyQMenu.java (renamed from src/main/java/com/leonardobishop/quests/menu/QMenuDaily.java)0
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/MenuUtil.java23
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/QItemStack.java18
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/QuestQMenu.java (renamed from src/main/java/com/leonardobishop/quests/menu/QMenuQuest.java)36
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/StartedQMenu.java (renamed from src/main/java/com/leonardobishop/quests/menu/QMenuStarted.java)33
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/element/CategoryMenuElement.java (renamed from src/main/java/com/leonardobishop/quests/menu/object/CategoryMenuElement.java)10
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/element/CustomMenuElement.java (renamed from src/main/java/com/leonardobishop/quests/menu/object/CustomMenuElement.java)2
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/element/MenuElement.java (renamed from src/main/java/com/leonardobishop/quests/menu/object/MenuElement.java)2
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/element/QuestMenuElement.java (renamed from src/main/java/com/leonardobishop/quests/menu/object/QuestMenuElement.java)6
-rw-r--r--src/main/java/com/leonardobishop/quests/player/QPlayer.java53
-rw-r--r--src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java4
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/tasktypes/types/InventoryTaskType.java14
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MiningCertainTaskType.java6
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PermissionTaskType.java6
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlaytimeTaskType.java6
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensDeliverTaskType.java12
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/IridiumSkyblockValueType.java2
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/PlaceholderAPIEvaluateTaskType.java6
-rw-r--r--src/main/java/com/leonardobishop/quests/util/Items.java7
-rw-r--r--src/main/java/com/leonardobishop/quests/util/Options.java1
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"),