summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
authorLMBishop <13875753+LMBishop@users.noreply.github.com>2021-03-03 14:03:43 +0000
committerLMBishop <13875753+LMBishop@users.noreply.github.com>2021-03-03 14:03:43 +0000
commit3a454e2597263bac73ac31d250347f7a356fd69f (patch)
treef31d1496d7435e36c3a48a2a6305802b9aa880e4 /src/main/java
parent77aa3763412ce2ee1da814bba7d8e26ea85240fb (diff)
Restructued menu classes
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/leonardobishop/quests/Quests.java6
-rw-r--r--src/main/java/com/leonardobishop/quests/QuestsAutosaveRunnable.java3
-rw-r--r--src/main/java/com/leonardobishop/quests/QuestsConfigLoader.java4
-rw-r--r--src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java4
-rw-r--r--src/main/java/com/leonardobishop/quests/commands/CommandQuests.java18
-rw-r--r--src/main/java/com/leonardobishop/quests/events/EventInventory.java188
-rw-r--r--src/main/java/com/leonardobishop/quests/events/EventPlayerJoin.java4
-rw-r--r--src/main/java/com/leonardobishop/quests/events/MenuController.java105
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/QItemStack.java (renamed from src/main/java/com/leonardobishop/quests/obj/misc/QItemStack.java)4
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/QMenu.java (renamed from src/main/java/com/leonardobishop/quests/obj/misc/QMenu.java)5
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/QMenuCancel.java (renamed from src/main/java/com/leonardobishop/quests/obj/misc/QMenuCancel.java)24
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/QMenuCategory.java (renamed from src/main/java/com/leonardobishop/quests/obj/misc/QMenuCategory.java)19
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/QMenuDaily.java106
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/QMenuQuest.java (renamed from src/main/java/com/leonardobishop/quests/obj/misc/QMenuQuest.java)45
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/QMenuStarted.java (renamed from src/main/java/com/leonardobishop/quests/obj/misc/QMenuStarted.java)34
-rw-r--r--src/main/java/com/leonardobishop/quests/menu/QuestSortWrapper.java (renamed from src/main/java/com/leonardobishop/quests/obj/misc/QuestSortWrapper.java)2
-rw-r--r--src/main/java/com/leonardobishop/quests/obj/misc/QMenuDaily.java110
-rw-r--r--src/main/java/com/leonardobishop/quests/obj/misc/creator/QMenuCreator.java71
-rw-r--r--src/main/java/com/leonardobishop/quests/player/QPlayer.java20
-rw-r--r--src/main/java/com/leonardobishop/quests/player/QPlayerManager.java3
-rw-r--r--src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java4
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/Quest.java2
-rw-r--r--src/main/java/com/leonardobishop/quests/updater/Updater.java2
-rw-r--r--src/main/java/com/leonardobishop/quests/util/Items.java (renamed from src/main/java/com/leonardobishop/quests/obj/Items.java)2
-rw-r--r--src/main/java/com/leonardobishop/quests/util/Messages.java (renamed from src/main/java/com/leonardobishop/quests/obj/Messages.java)2
-rw-r--r--src/main/java/com/leonardobishop/quests/util/Options.java (renamed from src/main/java/com/leonardobishop/quests/obj/Options.java)3
26 files changed, 367 insertions, 423 deletions
diff --git a/src/main/java/com/leonardobishop/quests/Quests.java b/src/main/java/com/leonardobishop/quests/Quests.java
index 63fcdf08..eee970b3 100644
--- a/src/main/java/com/leonardobishop/quests/Quests.java
+++ b/src/main/java/com/leonardobishop/quests/Quests.java
@@ -2,7 +2,7 @@ package com.leonardobishop.quests;
import com.leonardobishop.quests.bstats.Metrics;
import com.leonardobishop.quests.commands.CommandQuests;
-import com.leonardobishop.quests.events.EventInventory;
+import com.leonardobishop.quests.events.MenuController;
import com.leonardobishop.quests.events.EventPlayerJoin;
import com.leonardobishop.quests.events.EventPlayerLeave;
import com.leonardobishop.quests.hooks.itemgetter.ItemGetter;
@@ -15,7 +15,7 @@ import com.leonardobishop.quests.hooks.title.Title;
import com.leonardobishop.quests.hooks.title.Title_Bukkit;
import com.leonardobishop.quests.hooks.title.Title_BukkitNoTimings;
import com.leonardobishop.quests.hooks.title.Title_Other;
-import com.leonardobishop.quests.obj.Messages;
+import com.leonardobishop.quests.util.Messages;
import com.leonardobishop.quests.player.QPlayer;
import com.leonardobishop.quests.player.QPlayerManager;
import com.leonardobishop.quests.quests.QuestManager;
@@ -113,7 +113,7 @@ public class Quests extends JavaPlugin {
Bukkit.getPluginCommand("quests").setExecutor(new CommandQuests(this));
Bukkit.getPluginManager().registerEvents(new EventPlayerJoin(this), this);
- Bukkit.getPluginManager().registerEvents(new EventInventory(this), this);
+ Bukkit.getPluginManager().registerEvents(new MenuController(this), this);
Bukkit.getPluginManager().registerEvents(new EventPlayerLeave(this), this);
Metrics metrics = new Metrics(this);
diff --git a/src/main/java/com/leonardobishop/quests/QuestsAutosaveRunnable.java b/src/main/java/com/leonardobishop/quests/QuestsAutosaveRunnable.java
index 71e42dff..67b545f6 100644
--- a/src/main/java/com/leonardobishop/quests/QuestsAutosaveRunnable.java
+++ b/src/main/java/com/leonardobishop/quests/QuestsAutosaveRunnable.java
@@ -1,12 +1,11 @@
package com.leonardobishop.quests;
-import com.leonardobishop.quests.obj.Options;
+import com.leonardobishop.quests.util.Options;
import com.leonardobishop.quests.player.QPlayer;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
-import java.util.Collection;
import java.util.LinkedList;
import java.util.Queue;
import java.util.UUID;
diff --git a/src/main/java/com/leonardobishop/quests/QuestsConfigLoader.java b/src/main/java/com/leonardobishop/quests/QuestsConfigLoader.java
index 05e94e8f..1ad75d2a 100644
--- a/src/main/java/com/leonardobishop/quests/QuestsConfigLoader.java
+++ b/src/main/java/com/leonardobishop/quests/QuestsConfigLoader.java
@@ -1,8 +1,8 @@
package com.leonardobishop.quests;
import com.leonardobishop.quests.hooks.itemgetter.ItemGetter;
-import com.leonardobishop.quests.obj.Options;
-import com.leonardobishop.quests.obj.misc.QItemStack;
+import com.leonardobishop.quests.util.Options;
+import com.leonardobishop.quests.menu.QItemStack;
import com.leonardobishop.quests.quests.Category;
import com.leonardobishop.quests.quests.Quest;
import com.leonardobishop.quests.quests.Task;
diff --git a/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java b/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java
index 0b8e99f7..b45919b1 100644
--- a/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java
+++ b/src/main/java/com/leonardobishop/quests/api/QuestsPlaceholders.java
@@ -2,8 +2,8 @@ package com.leonardobishop.quests.api;
import com.leonardobishop.quests.Quests;
import com.leonardobishop.quests.api.enums.QuestStartResult;
-import com.leonardobishop.quests.obj.Options;
-import com.leonardobishop.quests.obj.misc.QItemStack;
+import com.leonardobishop.quests.util.Options;
+import com.leonardobishop.quests.menu.QItemStack;
import com.leonardobishop.quests.player.QPlayer;
import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
import com.leonardobishop.quests.quests.Category;
diff --git a/src/main/java/com/leonardobishop/quests/commands/CommandQuests.java b/src/main/java/com/leonardobishop/quests/commands/CommandQuests.java
index d88ca70f..4df5cd7d 100644
--- a/src/main/java/com/leonardobishop/quests/commands/CommandQuests.java
+++ b/src/main/java/com/leonardobishop/quests/commands/CommandQuests.java
@@ -3,8 +3,8 @@ package com.leonardobishop.quests.commands;
import com.leonardobishop.quests.Quests;
import com.leonardobishop.quests.QuestsConfigLoader;
import com.leonardobishop.quests.api.enums.QuestStartResult;
-import com.leonardobishop.quests.obj.Messages;
-import com.leonardobishop.quests.obj.Options;
+import com.leonardobishop.quests.util.Messages;
+import com.leonardobishop.quests.util.Options;
import com.leonardobishop.quests.player.QPlayer;
import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
import com.leonardobishop.quests.quests.Category;
@@ -377,17 +377,23 @@ public class CommandQuests implements TabExecutor {
} else {
if (qPlayer == null) {
// shit + fan
- sender.sendMessage(ChatColor.RED + "An error occurred finding your player."); //lazy? :)
+ sender.sendMessage(ChatColor.RED + "Your quest progress file has not been loaded yet."); //lazy? :)
} else {
qPlayer.getQuestProgressFile().startQuest(quest);
}
}
} else if (args[2].equalsIgnoreCase("c") || args[2].equalsIgnoreCase("cancel")) {
if (qPlayer == null) {
- sender.sendMessage(ChatColor.RED + "An error occurred finding your player."); //lazy x2? ;)
+ sender.sendMessage(ChatColor.RED + "Your quest progress file has not been loaded yet."); //lazy x2? ;)
} else {
qPlayer.getQuestProgressFile().cancelQuest(quest);
}
+ } else if (args[2].equalsIgnoreCase("t") || args[2].equalsIgnoreCase("track")) {
+ if (qPlayer == null) {
+ sender.sendMessage(ChatColor.RED + "Your quest progress file has not been loaded yet."); //lazy x2? ;)
+ } else {
+ qPlayer.getQuestProgressFile().trackQuest(quest);
+ }
} else {
sender.sendMessage(Messages.COMMAND_SUB_DOESNTEXIST.getMessage().replace("{sub}", args[2]));
}
@@ -481,7 +487,7 @@ public class CommandQuests implements TabExecutor {
sender.sendMessage(ChatColor.GRAY + "The following commands are available: ");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests " + ChatColor.DARK_GRAY + ": show quests");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests c/category <categoryid> " + ChatColor.DARK_GRAY + ": open category by ID");
- sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests q/quest <questid> <start/cancel>" + ChatColor.DARK_GRAY + ": start or cancel quest by ID");
+ sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests q/quest <questid> <start|cancel|track>" + ChatColor.DARK_GRAY + ": start, cancel or track quest by ID");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a/admin " + ChatColor.DARK_GRAY + ": view help for admins");
sender.sendMessage(ChatColor.GRAY.toString() + ChatColor.STRIKETHROUGH + "--------=[" + ChatColor.RED + " made with <3 by LMBishop " + ChatColor
.GRAY.toString() + ChatColor.STRIKETHROUGH + "]=--------");
@@ -578,7 +584,7 @@ public class CommandQuests implements TabExecutor {
&& sender.hasPermission("quests.admin")) {
Quest q = plugin.getQuestManager().getQuestById(args[1]);
if (q != null) {
- List<String> options = Arrays.asList("start", "cancel");
+ List<String> options = Arrays.asList("start", "cancel", "track");
return matchTabComplete(args[2], options);
}
} else if (args[0].equalsIgnoreCase("a") || args[0].equalsIgnoreCase("admin")
diff --git a/src/main/java/com/leonardobishop/quests/events/EventInventory.java b/src/main/java/com/leonardobishop/quests/events/EventInventory.java
deleted file mode 100644
index e1c4d0c2..00000000
--- a/src/main/java/com/leonardobishop/quests/events/EventInventory.java
+++ /dev/null
@@ -1,188 +0,0 @@
-package com.leonardobishop.quests.events;
-
-import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.api.enums.QuestStartResult;
-import com.leonardobishop.quests.obj.Messages;
-import com.leonardobishop.quests.obj.Options;
-import com.leonardobishop.quests.obj.misc.*;
-import com.leonardobishop.quests.quests.Quest;
-import org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.inventory.ClickType;
-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 EventInventory implements Listener {
-
- private static final HashMap<UUID, QMenu> tracker = new HashMap<>();
- private final Quests plugin;
-
- // ADD PLAYERS TO THE BUFFER BEFORE AN ANTICIPATED MENU CHANGE SO THAT
- // THEY ARE NOT LOST FROM THE TRACKER WHEN CHANGING MENUS
- private final ArrayList<UUID> buffer = new ArrayList<>();
-
- public EventInventory(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);
- }
-
- @EventHandler
- public void onEvent(InventoryClickEvent event) {
- // check if the player has a quest menu open
- if (tracker.containsKey(event.getWhoClicked().getUniqueId())) {
- event.setCancelled(true);
- if (event.getClickedInventory() == null)
- return; //The player clicked outside the inventory
- if (event.getClickedInventory().getType() == InventoryType.PLAYER)
- return; //The clicked inventory is a player inventory type
- QMenu qMenu = tracker.get(event.getWhoClicked().getUniqueId());
-
- // **** MENU TYPE: QUESTS IN CATEGORY/ALL QUESTS ****
- if (qMenu instanceof QMenuQuest) {
- QMenuQuest qMenuQuest = (QMenuQuest) qMenu;
-
- if (qMenuQuest.getPagePrevLocation() == event.getSlot()) {
- // (see line 26)
- buffer.add(event.getWhoClicked().getUniqueId());
- event.getWhoClicked().openInventory(qMenuQuest.toInventory(qMenuQuest.getCurrentPage() - 1));
-
- } else if (qMenuQuest.getPageNextLocation() == event.getSlot()) {
- //This shouldn't be here lol, forgot about it
- buffer.add(event.getWhoClicked().getUniqueId());
- event.getWhoClicked().openInventory(qMenuQuest.toInventory(qMenuQuest.getCurrentPage() + 1));
-
- // return to QMenuCategory (category listing)
- } else if (Options.CATEGORIES_ENABLED.getBooleanValue() && qMenuQuest.getBackButtonLocation() == event.getSlot()) {
- QMenuCategory qMenuCategory = qMenuQuest.getSuperMenu();
- buffer.add(event.getWhoClicked().getUniqueId());
- event.getWhoClicked().openInventory(qMenuCategory.toInventory(1));
- tracker.put(event.getWhoClicked().getUniqueId(), qMenuCategory);
-
- // handle when player wishes to start a quest by matching the slot they clicked to a predetermined
- // map which maps quests to slots so you do not have to compare the item stack
- } else if (event.getSlot() < qMenuQuest.getPageSize() && qMenuQuest.getSlotsToMenu().containsKey(event.getSlot() + (((qMenuQuest
- .getCurrentPage()) - 1) * qMenuQuest.getPageSize()))) {
-
- String questid = qMenuQuest.getSlotsToMenu().get(event.getSlot() + (((qMenuQuest.getCurrentPage()) - 1) * qMenuQuest.getPageSize()));
- Quest quest = plugin.getQuestManager().getQuestById(questid);
- if (event.getClick() == ClickType.LEFT) {
- if (Options.QUEST_AUTOSTART.getBooleanValue()) return;
- if (qMenuQuest.getOwner().getQuestProgressFile().startQuest(quest) == QuestStartResult.QUEST_SUCCESS) {
- event.getWhoClicked().closeInventory(); //TODO Option to keep the menu open
- }
- } else if (event.getClick() == ClickType.MIDDLE && Options.ALLOW_QUEST_TRACK.getBooleanValue()) {
- middleClickQuest(qMenuQuest, quest, Bukkit.getPlayer(qMenuQuest.getOwner().getUuid()));
- } else if (event.getClick() == ClickType.RIGHT && Options.ALLOW_QUEST_CANCEL.getBooleanValue()
- && qMenuQuest.getOwner().getQuestProgressFile().hasStartedQuest(quest)) {
- rightClickQuest(qMenuQuest, quest, Bukkit.getPlayer(qMenuQuest.getOwner().getUuid()));
- }
- }
-
- // **** MENU TYPE: STARTED QUESTS ****
- } else if (qMenu instanceof QMenuStarted) {
- QMenuStarted qMenuQuest = (QMenuStarted) qMenu;
-
- if (qMenuQuest.getPagePrevLocation() == event.getSlot()) {
- buffer.add(event.getWhoClicked().getUniqueId());
- event.getWhoClicked().openInventory(qMenuQuest.toInventory(qMenuQuest.getCurrentPage() - 1));
-
- } else if (qMenuQuest.getPageNextLocation() == event.getSlot()) {
- buffer.add(event.getWhoClicked().getUniqueId());
- event.getWhoClicked().openInventory(qMenuQuest.toInventory(qMenuQuest.getCurrentPage() + 1));
-
- } else if (event.getSlot() < qMenuQuest.getPageSize() && qMenuQuest.getSlotsToMenu().containsKey(event.getSlot() + (((qMenuQuest
- .getCurrentPage()) - 1) * qMenuQuest.getPageSize()))) {
-
- // repeat from above
- String questid = qMenuQuest.getSlotsToMenu().get(event.getSlot() + (((qMenuQuest.getCurrentPage()) - 1) * qMenuQuest.getPageSize()));
- Quest quest = plugin.getQuestManager().getQuestById(questid);
- if (event.getClick() == ClickType.MIDDLE && Options.ALLOW_QUEST_TRACK.getBooleanValue()) {
- middleClickQuest(qMenuQuest, quest, Bukkit.getPlayer(qMenuQuest.getOwner().getUuid()));
- } else if (event.getClick() == ClickType.RIGHT && Options.ALLOW_QUEST_CANCEL.getBooleanValue()
- && qMenuQuest.getOwner().getQuestProgressFile().hasStartedQuest(quest)) {
- rightClickQuest(qMenuQuest, quest, Bukkit.getPlayer(qMenuQuest.getOwner().getUuid()));
- }
- }
-
- // **** MENU TYPE: CATEGORY LISTING ****
- } else if (qMenu instanceof QMenuCategory) {
- QMenuCategory qMenuCategory = (QMenuCategory) qMenu;
-
- if (qMenuCategory.getSlotsToMenu().containsKey(event.getSlot())) {
- QMenuQuest qMenuQuest = qMenuCategory.getSlotsToMenu().get(event.getSlot());
- buffer.add(event.getWhoClicked().getUniqueId());
- if (qMenuCategory.getOwner().openCategory(plugin.getQuestManager().getCategoryById(qMenuQuest.getCategoryName()), qMenuQuest) != 0) {
- buffer.remove(event.getWhoClicked().getUniqueId());
- event.getWhoClicked().sendMessage(Messages.QUEST_CATEGORY_PERMISSION.getMessage());
- }
- }
-
- // **** MENU TYPE: CANCELLING QUEST MENU ****
- } else if (qMenu instanceof QMenuCancel) {
- QMenuCancel qMenuCancel = (QMenuCancel) qMenu;
-
- event.setCancelled(true);
- if (event.getSlot() == 10 || event.getSlot() == 11 || event.getSlot() == 12) {
- QMenu qSuperMenu = qMenuCancel.getSuperMenu();
- buffer.add(event.getWhoClicked().getUniqueId());
- event.getWhoClicked().openInventory(qSuperMenu.toInventory(1));
- tracker.put(event.getWhoClicked().getUniqueId(), qSuperMenu);
- } else if (event.getSlot() == 14 || event.getSlot() == 15 || event.getSlot() == 16) {
- if (qMenuCancel.getOwner().getQuestProgressFile().cancelQuest(qMenuCancel.getQuest())) {
- event.getWhoClicked().closeInventory();
- }
- }
- }
- }
- }
-
- private 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)) {
- player.sendMessage(Messages.QUEST_TRACK_STOP.getMessage().replace("{quest}", quest.getDisplayNameStripped()));
- menu.getOwner().getQuestProgressFile().trackQuest(null);
- } else {
- player.sendMessage(Messages.QUEST_TRACK.getMessage().replace("{quest}", quest.getDisplayNameStripped()));
- menu.getOwner().getQuestProgressFile().trackQuest(quest);
- }
- player.closeInventory();
- }
- }
-
- private 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/events/EventPlayerJoin.java b/src/main/java/com/leonardobishop/quests/events/EventPlayerJoin.java
index 5c12770d..143046be 100644
--- a/src/main/java/com/leonardobishop/quests/events/EventPlayerJoin.java
+++ b/src/main/java/com/leonardobishop/quests/events/EventPlayerJoin.java
@@ -1,8 +1,8 @@
package com.leonardobishop.quests.events;
import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.obj.Messages;
-import com.leonardobishop.quests.obj.Options;
+import com.leonardobishop.quests.util.Messages;
+import com.leonardobishop.quests.util.Options;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
diff --git a/src/main/java/com/leonardobishop/quests/events/MenuController.java b/src/main/java/com/leonardobishop/quests/events/MenuController.java
new file mode 100644
index 00000000..9cc390be
--- /dev/null
+++ b/src/main/java/com/leonardobishop/quests/events/MenuController.java
@@ -0,0 +1,105 @@
+package com.leonardobishop.quests.events;
+
+import com.leonardobishop.quests.Quests;
+import com.leonardobishop.quests.api.enums.QuestStartResult;
+import com.leonardobishop.quests.menu.QMenu;
+import com.leonardobishop.quests.menu.QMenuCancel;
+import com.leonardobishop.quests.menu.QMenuCategory;
+import com.leonardobishop.quests.menu.QMenuQuest;
+import com.leonardobishop.quests.menu.QMenuStarted;
+import com.leonardobishop.quests.util.Messages;
+import com.leonardobishop.quests.util.Options;
+import com.leonardobishop.quests.quests.Quest;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.inventory.ClickType;
+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 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 ArrayList<UUID> getBuffer() {
+ return buffer;
+ }
+
+ @EventHandler
+ public void onEvent(InventoryClickEvent event) {
+ // check if the player has a quest menu open
+ if (tracker.containsKey(event.getWhoClicked().getUniqueId())) {
+ event.setCancelled(true);
+ if (event.getClickedInventory() == null)
+ return; //The player clicked outside the inventory
+ if (event.getClickedInventory().getType() == InventoryType.PLAYER)
+ return; //The clicked inventory is a player inventory type
+
+ QMenu qMenu = tracker.get(event.getWhoClicked().getUniqueId());
+ qMenu.handleClick(event, this);
+ }
+ }
+
+ // 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)) {
+ player.sendMessage(Messages.QUEST_TRACK_STOP.getMessage().replace("{quest}", quest.getDisplayNameStripped()));
+ menu.getOwner().getQuestProgressFile().trackQuest(null);
+ } else {
+ player.sendMessage(Messages.QUEST_TRACK.getMessage().replace("{quest}", quest.getDisplayNameStripped()));
+ 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/obj/misc/QItemStack.java b/src/main/java/com/leonardobishop/quests/menu/QItemStack.java
index 1995fffe..4577bd59 100644
--- a/src/main/java/com/leonardobishop/quests/obj/misc/QItemStack.java
+++ b/src/main/java/com/leonardobishop/quests/menu/QItemStack.java
@@ -1,7 +1,7 @@
-package com.leonardobishop.quests.obj.misc;
+package com.leonardobishop.quests.menu;
import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.obj.Options;
+import com.leonardobishop.quests.util.Options;
import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
import com.leonardobishop.quests.quests.Quest;
diff --git a/src/main/java/com/leonardobishop/quests/obj/misc/QMenu.java b/src/main/java/com/leonardobishop/quests/menu/QMenu.java
index a4f1bafb..1efc34e8 100644
--- a/src/main/java/com/leonardobishop/quests/obj/misc/QMenu.java
+++ b/src/main/java/com/leonardobishop/quests/menu/QMenu.java
@@ -1,6 +1,8 @@
-package com.leonardobishop.quests.obj.misc;
+package com.leonardobishop.quests.menu;
+import com.leonardobishop.quests.events.MenuController;
import com.leonardobishop.quests.player.QPlayer;
+import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import java.util.HashMap;
@@ -10,5 +12,6 @@ public interface QMenu {
QPlayer getOwner();
HashMap<?, ?> getSlotsToMenu();
Inventory toInventory(int page);
+ void handleClick(InventoryClickEvent event, MenuController controller);
}
diff --git a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuCancel.java b/src/main/java/com/leonardobishop/quests/menu/QMenuCancel.java
index 1c04d5cc..797223cc 100644
--- a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuCancel.java
+++ b/src/main/java/com/leonardobishop/quests/menu/QMenuCancel.java
@@ -1,18 +1,18 @@
-package com.leonardobishop.quests.obj.misc;
+package com.leonardobishop.quests.menu;
-import com.leonardobishop.quests.obj.Items;
-import com.leonardobishop.quests.obj.Options;
+import com.leonardobishop.quests.events.MenuController;
+import com.leonardobishop.quests.util.Items;
+import com.leonardobishop.quests.util.Options;
import com.leonardobishop.quests.player.QPlayer;
import com.leonardobishop.quests.quests.Quest;
import org.bukkit.Bukkit;
+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.HashMap;
import java.util.List;
-import java.util.Map;
public class QMenuCancel implements QMenu {
@@ -73,6 +73,20 @@ public class QMenuCancel implements QMenu {
return inventory;
}
+ @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);
+ } else if (event.getSlot() == 14 || event.getSlot() == 15 || event.getSlot() == 16) {
+ if (this.getOwner().getQuestProgressFile().cancelQuest(this.getQuest())) {
+ event.getWhoClicked().closeInventory();
+ }
+ }
+ }
+
public QMenu getSuperMenu() {
return superMenu;
}
diff --git a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuCategory.java b/src/main/java/com/leonardobishop/quests/menu/QMenuCategory.java
index 86f4d57f..f8b4cd8a 100644
--- a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuCategory.java
+++ b/src/main/java/com/leonardobishop/quests/menu/QMenuCategory.java
@@ -1,12 +1,15 @@
-package com.leonardobishop.quests.obj.misc;
+package com.leonardobishop.quests.menu;
import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.obj.Options;
+import com.leonardobishop.quests.events.MenuController;
+import com.leonardobishop.quests.util.Messages;
+import com.leonardobishop.quests.util.Options;
import com.leonardobishop.quests.player.QPlayer;
import com.leonardobishop.quests.quests.Category;
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;
@@ -102,6 +105,18 @@ public class QMenuCategory implements QMenu {
}
+ @Override
+ public void handleClick(InventoryClickEvent event, MenuController controller) {
+ if (this.getSlotsToMenu().containsKey(event.getSlot())) {
+ QMenuQuest qMenuQuest = this.getSlotsToMenu().get(event.getSlot());
+ controller.getBuffer().add(event.getWhoClicked().getUniqueId());
+ if (this.getOwner().openCategory(plugin.getQuestManager().getCategoryById(qMenuQuest.getCategoryName()), qMenuQuest) != 0) {
+ controller.getBuffer().remove(event.getWhoClicked().getUniqueId());
+ event.getWhoClicked().sendMessage(Messages.QUEST_CATEGORY_PERMISSION.getMessage());
+ }
+ }
+ }
+
public ItemStack replaceItemStack(ItemStack is) {
if (plugin.getPlaceholderAPIHook() != null && Options.GUI_USE_PLACEHOLDERAPI.getBooleanValue()) {
ItemStack newItemStack = is.clone();
diff --git a/src/main/java/com/leonardobishop/quests/menu/QMenuDaily.java b/src/main/java/com/leonardobishop/quests/menu/QMenuDaily.java
new file mode 100644
index 00000000..a89765e4
--- /dev/null
+++ b/src/main/java/com/leonardobishop/quests/menu/QMenuDaily.java
@@ -0,0 +1,106 @@
+//package com.leonardobishop.quests.menu;
+//
+//import com.leonardobishop.quests.util.Options;
+//import com.leonardobishop.quests.player.QPlayer;
+//import com.leonardobishop.quests.quests.Quest;
+//import org.bukkit.Bukkit;
+//import org.bukkit.inventory.Inventory;
+//
+//import java.util.HashMap;
+//import java.util.List;
+//
+//public class QMenuDaily implements QMenu {
+//
+// private final HashMap<Integer, String> slotsToQuestIds = new HashMap<>();
+// private int backButtonLocation = -1;
+// private boolean backButtonEnabled = true;
+// private final QMenuCategory superMenu;
+// private String categoryName;
+// private final int pageSize = 45;
+// private final QPlayer owner;
+//
+// public QMenuDaily(QPlayer owner, QMenuCategory superMenu) {
+// this.owner = owner;
+// this.superMenu = superMenu;
+// }
+//
+// public void populate(List<Quest> quests) {
+// int slot = 11;
+// for (Quest quest : quests) {
+// slotsToQuestIds.put(slot, quest.getId());
+// slot++;
+// if (slot == 16) {
+// break;
+// }
+// }
+// }
+//
+// @Override
+// public HashMap<Integer, String> getSlotsToMenu() {
+// return slotsToQuestIds;
+// }
+//
+// @Override
+// public QPlayer getOwner() {
+// return owner;
+// }
+//
+// public String getCategoryName() {
+// return categoryName;
+// }
+//
+// public Inventory toInventory(int page) {
+// int pageMin = pageSize * (page - 1);
+// int pageMax = pageSize * page;
+// String title = Options.GUITITLE_DAILY_QUESTS.toString();
+//
+// // Inventory inventory = Bukkit.createInventory(null, 27, title);
+//
+// //TODO daily quests
+//
+//// int invSlot = 11;
+//// for (int pointer = pageMin; pointer < pageMax; pointer++) {
+//// if (slotsToQuestIds.containsKey(pointer)) {
+//// Quest quest = Quests.getQuestManager().getQuestById(slotsToQuestIds.get(pointer));
+//// QuestProgress questProgress = owner.getQuestProgressFile().getQuestProgress(quest);
+//// long cooldown = owner.getQuestProgressFile().getCooldownFor(quest);
+//// if (!owner.getQuestProgressFile().hasMetRequirements(quest)) {
+//// List<String> quests = new ArrayList<>();
+//// for (String requirement : quest.getRequirements()) {
+//// quests.add(Quests.getQuestManager().getQuestById(requirement).getDisplayNameStripped());
+//// }
+//// Map<String, String> placeholders = new HashMap<>();
+//// placeholders.put("{quest}", quest.getDisplayNameStripped());
+//// placeholders.put("{requirements}", String.join(", ", quests));
+//// ItemStack is = replaceItemStack(Items.QUEST_LOCKED.getItem(), placeholders);
+//// inventory.setItem(invSlot, is);
+//// } else if (!quest.isRepeatable() && questProgress.isCompletedBefore()) {
+//// Map<String, String> placeholders = new HashMap<>();
+//// placeholders.put("{quest}", quest.getDisplayNameStripped());
+//// ItemStack is = replaceItemStack(Items.QUEST_COMPLETED.getItem(), placeholders);
+//// inventory.setItem(invSlot, is);
+//// } else if (cooldown > 0) {
+//// Map<String, String> placeholders = new HashMap<>();
+//// placeholders.put("{time}", Quests.convertToFormat(TimeUnit.MINUTES.convert(cooldown, TimeUnit.MILLISECONDS)));
+//// placeholders.put("{quest}", quest.getDisplayNameStripped());
+//// ItemStack is = replaceItemStack(Items.QUEST_COOLDOWN.getItem(), placeholders);
+//// inventory.setItem(invSlot, is);
+//// } else {
+//// inventory.setItem(invSlot, Quests.getQuestManager().getQuestById(quest.getId()).getDisplayItem().toItemStack(questProgress));
+//// }
+//// }
+//// invSlot++;
+//// }
+//// return inventory;
+// return Bukkit.createInventory(null, 27, title);
+// }
+//
+// //Implement too
+// public QMenuCategory getSuperMenu() {
+// return this.superMenu;
+// }
+//
+// public int getPageSize() {
+// return this.pageSize;
+// }
+//}
diff --git a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuQuest.java b/src/main/java/com/leonardobishop/quests/menu/QMenuQuest.java
index dbaf23ff..bdcf20c7 100644
--- a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuQuest.java
+++ b/src/main/java/com/leonardobishop/quests/menu/QMenuQuest.java
@@ -1,13 +1,17 @@
-package com.leonardobishop.quests.obj.misc;
+package com.leonardobishop.quests.menu;
import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.obj.Items;
-import com.leonardobishop.quests.obj.Options;
+import com.leonardobishop.quests.api.enums.QuestStartResult;
+import com.leonardobishop.quests.events.MenuController;
+import com.leonardobishop.quests.util.Items;
+import com.leonardobishop.quests.util.Options;
import com.leonardobishop.quests.player.QPlayer;
import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
import com.leonardobishop.quests.quests.Quest;
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;
@@ -203,6 +207,41 @@ public class QMenuQuest implements QMenu {
return inventory;
}
+ @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));
+
+ } else if (this.getPageNextLocation() == event.getSlot()) {
+ controller.getBuffer().add(event.getWhoClicked().getUniqueId());
+ event.getWhoClicked().openInventory(this.toInventory(this.getCurrentPage() + 1));
+
+ } else if (Options.CATEGORIES_ENABLED.getBooleanValue() && this.getBackButtonLocation() == 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);
+
+ } else if (event.getSlot() < this.getPageSize() && this.getSlotsToMenu().containsKey(event.getSlot() + (((this
+ .getCurrentPage()) - 1) * this.getPageSize()))) {
+
+ String questid = this.getSlotsToMenu().get(event.getSlot() + (((this.getCurrentPage()) - 1) * this.getPageSize()));
+ Quest quest = plugin.getQuestManager().getQuestById(questid);
+ if (event.getClick() == ClickType.LEFT) {
+ if (Options.QUEST_AUTOSTART.getBooleanValue()) return;
+ if (this.getOwner().getQuestProgressFile().startQuest(quest) == QuestStartResult.QUEST_SUCCESS) {
+ event.getWhoClicked().closeInventory(); //TODO Option to keep the menu open
+ }
+ } else if (event.getClick() == ClickType.MIDDLE && Options.ALLOW_QUEST_TRACK.getBooleanValue()) {
+ controller.middleClickQuest(this, quest, Bukkit.getPlayer(this.getOwner().getUuid()));
+ } 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()));
+ }
+ }
+ }
+
public boolean isBackButtonEnabled() {
return backButtonEnabled;
}
diff --git a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuStarted.java b/src/main/java/com/leonardobishop/quests/menu/QMenuStarted.java
index 88222b57..5faf2b5b 100644
--- a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuStarted.java
+++ b/src/main/java/com/leonardobishop/quests/menu/QMenuStarted.java
@@ -1,13 +1,16 @@
-package com.leonardobishop.quests.obj.misc;
+package com.leonardobishop.quests.menu;
import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.obj.Items;
-import com.leonardobishop.quests.obj.Options;
+import com.leonardobishop.quests.events.MenuController;
+import com.leonardobishop.quests.util.Items;
+import com.leonardobishop.quests.util.Options;
import com.leonardobishop.quests.player.QPlayer;
import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
import com.leonardobishop.quests.quests.Quest;
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;
@@ -142,6 +145,31 @@ public class QMenuStarted implements QMenu {
return inventory;
}
+ @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));
+
+ } else if (this.getPageNextLocation() == event.getSlot()) {
+ controller.getBuffer().add(event.getWhoClicked().getUniqueId());
+ event.getWhoClicked().openInventory(this.toInventory(this.getCurrentPage() + 1));
+
+ } else if (event.getSlot() < this.getPageSize() && this.getSlotsToMenu().containsKey(event.getSlot() + (((this
+ .getCurrentPage()) - 1) * this.getPageSize()))) {
+
+ // repeat from above
+ String questid = this.getSlotsToMenu().get(event.getSlot() + (((this.getCurrentPage()) - 1) * this.getPageSize()));
+ 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()));
+ } 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()));
+ }
+ }
+ }
+
public ItemStack replaceItemStack(ItemStack is) {
return replaceItemStack(is, Collections.emptyMap());
}
diff --git a/src/main/java/com/leonardobishop/quests/obj/misc/QuestSortWrapper.java b/src/main/java/com/leonardobishop/quests/menu/QuestSortWrapper.java
index 40cd563d..a742e6e8 100644
--- a/src/main/java/com/leonardobishop/quests/obj/misc/QuestSortWrapper.java
+++ b/src/main/java/com/leonardobishop/quests/menu/QuestSortWrapper.java
@@ -1,4 +1,4 @@
-package com.leonardobishop.quests.obj.misc;
+package com.leonardobishop.quests.menu;
import com.leonardobishop.quests.Quests;
import com.leonardobishop.quests.quests.Category;
diff --git a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuDaily.java b/src/main/java/com/leonardobishop/quests/obj/misc/QMenuDaily.java
deleted file mode 100644
index 0e0cc132..00000000
--- a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuDaily.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package com.leonardobishop.quests.obj.misc;
-
-import com.leonardobishop.quests.obj.Options;
-import com.leonardobishop.quests.player.QPlayer;
-import com.leonardobishop.quests.quests.Quest;
-import org.bukkit.Bukkit;
-import org.bukkit.inventory.Inventory;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class QMenuDaily implements QMenu {
-
- private final HashMap<Integer, String> slotsToQuestIds = new HashMap<>();
- private int backButtonLocation = -1;
- private boolean backButtonEnabled = true;
- private final QMenuCategory superMenu;
- private String categoryName;
- private final int pageSize = 45;
- private final QPlayer owner;
-
- public QMenuDaily(QPlayer owner, QMenuCategory superMenu) {
- this.owner = owner;
- this.superMenu = superMenu;
- }
-
- public void populate(List<Quest> quests) {
- int slot = 11;
- for (Quest quest : quests) {
- slotsToQuestIds.put(slot, quest.getId());
- slot++;
- if (slot == 16) {
- break;
- }
- }
- }
-
- @Override
- public HashMap<Integer, String> getSlotsToMenu() {
- return slotsToQuestIds;
- }
-
- @Override
- public QPlayer getOwner() {
- return owner;
- }
-
- public String getCategoryName() {
- return categoryName;
- }
-
- public Inventory toInventory(int page) {
- int pageMin = pageSize * (page - 1);
- int pageMax = pageSize * page;
- String title = Options.GUITITLE_DAILY_QUESTS.toString();
-
- // Inventory inventory = Bukkit.createInventory(null, 27, title);
-
- //TODO daily quests
-
-// int invSlot = 11;
-// for (int pointer = pageMin; pointer < pageMax; pointer++) {
-// if (slotsToQuestIds.containsKey(pointer)) {
-// Quest quest = Quests.getQuestManager().getQuestById(slotsToQuestIds.get(pointer));
-// QuestProgress questProgress = owner.getQuestProgressFile().getQuestProgress(quest);
-// long cooldown = owner.getQuestProgressFile().getCooldownFor(quest);
-// if (!owner.getQuestProgressFile().hasMetRequirements(quest)) {
-// List<String> quests = new ArrayList<>();
-// for (String requirement : quest.getRequirements()) {
-// quests.add(Quests.getQuestManager().getQuestById(requirement).getDisplayNameStripped());
-// }
-// Map<String, String> placeholders = new HashMap<>();
-// placeholders.put("{quest}", quest.getDisplayNameStripped());
-// placeholders.put("{requirements}", String.join(", ", quests));
-// ItemStack is = replaceItemStack(Items.QUEST_LOCKED.getItem(), placeholders);
-// inventory.setItem(invSlot, is);
-// } else if (!quest.isRepeatable() && questProgress.isCompletedBefore()) {
-// Map<String, String> placeholders = new HashMap<>();
-// placeholders.put("{quest}", quest.getDisplayNameStripped());
-// ItemStack is = replaceItemStack(Items.QUEST_COMPLETED.getItem(), placeholders);
-// inventory.setItem(invSlot, is);
-// } else if (cooldown > 0) {
-// Map<String, String> placeholders = new HashMap<>();
-// placeholders.put("{time}", Quests.convertToFormat(TimeUnit.MINUTES.convert(cooldown, TimeUnit.MILLISECONDS)));
-// placeholders.put("{quest}", quest.getDisplayNameStripped());
-// ItemStack is = replaceItemStack(Items.QUEST_COOLDOWN.getItem(), placeholders);
-// inventory.setItem(invSlot, is);
-// } else {
-// inventory.setItem(invSlot, Quests.getQuestManager().getQuestById(quest.getId()).getDisplayItem().toItemStack(questProgress));
-// }
-// }
-// invSlot++;
-// }
-// return inventory;
- return Bukkit.createInventory(null, 27, title);
- }
-
- //Implement too
- public QMenuCategory getSuperMenu() {
- return this.superMenu;
- }
-
- public int getPageSize() {
- return this.pageSize;
- }
-}
diff --git a/src/main/java/com/leonardobishop/quests/obj/misc/creator/QMenuCreator.java b/src/main/java/com/leonardobishop/quests/obj/misc/creator/QMenuCreator.java
deleted file mode 100644
index a8800d54..00000000
--- a/src/main/java/com/leonardobishop/quests/obj/misc/creator/QMenuCreator.java
+++ /dev/null
@@ -1,71 +0,0 @@
-//package com.leonardobishop.quests.obj.misc.creator;
-//
-//import com.leonardobishop.quests.obj.misc.QMenu;
-//import com.leonardobishop.quests.player.QPlayer;
-//import org.bukkit.Bukkit;
-//import org.bukkit.ChatColor;
-//import org.bukkit.Material;
-//import org.bukkit.inventory.Inventory;
-//import org.bukkit.inventory.ItemStack;
-//import org.bukkit.inventory.meta.ItemMeta;
-//
-//import java.util.ArrayList;
-//import java.util.HashMap;
-//import java.util.List;
-//
-//public class QMenuCreator implements QMenu {
-//
-// private final QPlayer owner;
-//
-// public QMenuCreator(QPlayer owner) {
-// this.owner = owner;
-// }
-//
-// @Override
-// public HashMap<Integer, String> getSlotsToMenu() {
-// return null;
-// }
-//
-// @Override
-// public QPlayer getOwner() {
-// return owner;
-// }
-//
-// public Inventory toInventory(int page) {
-// String title = "Quest Creator";
-//
-// Inventory inventory = Bukkit.createInventory(null, 9, title);
-//
-// ItemStack newQuest = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 5);
-// ItemMeta newQuestM = newQuest.getItemMeta();
-// List<String> newQuestL = new ArrayList<>();
-// newQuestM.setDisplayName(ChatColor.GREEN.toString() + ChatColor.BOLD + "New Quest");
-// newQuestL.add(ChatColor.GRAY + "Click to make a new quest.");
-// newQuestM.setLore(newQuestL);
-// newQuest.setItemMeta(newQuestM);
-//
-// ItemStack editQuest = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 1);
-// ItemMeta editQuestM = editQuest.getItemMeta();
-// List<String> editQuestL = new ArrayList<>();
-// editQuestM.setDisplayName(ChatColor.GREEN.toString() + ChatColor.BOLD + "Edit Quest");
-// editQuestL.add(ChatColor.GRAY + "Click to edit an existing quest.");
-// editQuestM.setLore(editQuestL);
-// editQuest.setItemMeta(editQuestM);
-//
-// ItemStack removeQuest = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14);
-// ItemMeta removeQuestM = removeQuest.getItemMeta();
-// List<String> removeQuestL = new ArrayList<>();
-// removeQuestM.setDisplayName(ChatColor.GREEN.toString() + ChatColor.BOLD + "Delete Quest");
-// removeQuestL.add(ChatColor.GRAY + "Click to delete an existing quest.");
-// removeQuestM.setLore(removeQuestL);
-// removeQuest.setItemMeta(removeQuestM);
-//
-// inventory.setItem(2, newQuest);
-// inventory.setItem(4, editQuest);
-// inventory.setItem(6, removeQuest);
-// return inventory;
-//
-// return Bukkit.createInventory(null, 9, title);
-// }
-//
-//}
diff --git a/src/main/java/com/leonardobishop/quests/player/QPlayer.java b/src/main/java/com/leonardobishop/quests/player/QPlayer.java
index 45d58012..d5d5b66a 100644
--- a/src/main/java/com/leonardobishop/quests/player/QPlayer.java
+++ b/src/main/java/com/leonardobishop/quests/player/QPlayer.java
@@ -1,12 +1,12 @@
package com.leonardobishop.quests.player;
import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.events.EventInventory;
-import com.leonardobishop.quests.obj.Options;
-import com.leonardobishop.quests.obj.misc.QMenuCategory;
-import com.leonardobishop.quests.obj.misc.QMenuQuest;
-import com.leonardobishop.quests.obj.misc.QMenuStarted;
-import com.leonardobishop.quests.obj.misc.QuestSortWrapper;
+import com.leonardobishop.quests.events.MenuController;
+import com.leonardobishop.quests.util.Options;
+import com.leonardobishop.quests.menu.QMenuCategory;
+import com.leonardobishop.quests.menu.QMenuQuest;
+import com.leonardobishop.quests.menu.QMenuStarted;
+import com.leonardobishop.quests.menu.QuestSortWrapper;
import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
import com.leonardobishop.quests.quests.Category;
import com.leonardobishop.quests.quests.Quest;
@@ -75,7 +75,7 @@ public class QPlayer {
}
player.openInventory(qMenuQuest.toInventory(1));
- EventInventory.track(this.uuid, qMenuQuest);
+ MenuController.track(this.uuid, qMenuQuest);
return 0;
}
@@ -106,7 +106,7 @@ public class QPlayer {
qMenuCategory.populate(questMenus);
player.openInventory(qMenuCategory.toInventory(1));
- EventInventory.track(player.getUniqueId(), qMenuCategory);
+ MenuController.track(player.getUniqueId(), qMenuCategory);
} else {
QMenuQuest qMenuQuest = new QMenuQuest(plugin, plugin.getPlayerManager().getPlayer(player.getUniqueId()), "", null);
List<Quest> quests = new ArrayList<>();
@@ -117,7 +117,7 @@ public class QPlayer {
qMenuQuest.setBackButtonEnabled(false);
player.openInventory(qMenuQuest.toInventory(1));
- EventInventory.track(player.getUniqueId(), qMenuQuest);
+ MenuController.track(player.getUniqueId(), qMenuQuest);
}
}
@@ -138,7 +138,7 @@ public class QPlayer {
qMenuStarted.populate(quests);
player.openInventory(qMenuStarted.toInventory(1));
- EventInventory.track(player.getUniqueId(), qMenuStarted);
+ MenuController.track(player.getUniqueId(), qMenuStarted);
}
public QuestProgressFile getQuestProgressFile() {
diff --git a/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java b/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java
index ba942978..cc33b0ff 100644
--- a/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java
+++ b/src/main/java/com/leonardobishop/quests/player/QPlayerManager.java
@@ -2,7 +2,7 @@ package com.leonardobishop.quests.player;
import com.leonardobishop.quests.Quests;
import com.leonardobishop.quests.QuestsLogger;
-import com.leonardobishop.quests.obj.Options;
+import com.leonardobishop.quests.util.Options;
import com.leonardobishop.quests.player.questprogressfile.QPlayerPreferences;
import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
@@ -12,7 +12,6 @@ import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.util.Collection;
-import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
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 b2596079..e7a77853 100644
--- a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java
+++ b/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java
@@ -9,8 +9,8 @@ import com.leonardobishop.quests.api.events.PlayerStartQuestEvent;
import com.leonardobishop.quests.api.events.PlayerStartTrackQuestEvent;
import com.leonardobishop.quests.api.events.PlayerStopTrackQuestEvent;
import com.leonardobishop.quests.api.events.PreStartQuestEvent;
-import com.leonardobishop.quests.obj.Messages;
-import com.leonardobishop.quests.obj.Options;
+import com.leonardobishop.quests.util.Messages;
+import com.leonardobishop.quests.util.Options;
import com.leonardobishop.quests.player.QPlayer;
import com.leonardobishop.quests.quests.Quest;
import com.leonardobishop.quests.quests.Task;
diff --git a/src/main/java/com/leonardobishop/quests/quests/Quest.java b/src/main/java/com/leonardobishop/quests/quests/Quest.java
index 76aaefcf..eddeaa8b 100644
--- a/src/main/java/com/leonardobishop/quests/quests/Quest.java
+++ b/src/main/java/com/leonardobishop/quests/quests/Quest.java
@@ -1,6 +1,6 @@
package com.leonardobishop.quests.quests;
-import com.leonardobishop.quests.obj.misc.QItemStack;
+import com.leonardobishop.quests.menu.QItemStack;
import org.bukkit.ChatColor;
import java.util.*;
diff --git a/src/main/java/com/leonardobishop/quests/updater/Updater.java b/src/main/java/com/leonardobishop/quests/updater/Updater.java
index 6c197b88..5fa1a7e5 100644
--- a/src/main/java/com/leonardobishop/quests/updater/Updater.java
+++ b/src/main/java/com/leonardobishop/quests/updater/Updater.java
@@ -1,7 +1,7 @@
package com.leonardobishop.quests.updater;
import com.leonardobishop.quests.Quests;
-import com.leonardobishop.quests.obj.Messages;
+import com.leonardobishop.quests.util.Messages;
import java.io.BufferedReader;
import java.io.IOException;
diff --git a/src/main/java/com/leonardobishop/quests/obj/Items.java b/src/main/java/com/leonardobishop/quests/util/Items.java
index 9725459a..a6af8cd5 100644
--- a/src/main/java/com/leonardobishop/quests/obj/Items.java
+++ b/src/main/java/com/leonardobishop/quests/util/Items.java
@@ -1,4 +1,4 @@
-package com.leonardobishop.quests.obj;
+package com.leonardobishop.quests.util;
import com.leonardobishop.quests.Quests;
import org.bukkit.inventory.ItemStack;
diff --git a/src/main/java/com/leonardobishop/quests/obj/Messages.java b/src/main/java/com/leonardobishop/quests/util/Messages.java
index 44d82f07..fc9fb976 100644
--- a/src/main/java/com/leonardobishop/quests/obj/Messages.java
+++ b/src/main/java/com/leonardobishop/quests/util/Messages.java
@@ -1,4 +1,4 @@
-package com.leonardobishop.quests.obj;
+package com.leonardobishop.quests.util;
import com.leonardobishop.quests.Quests;
import org.bukkit.ChatColor;
diff --git a/src/main/java/com/leonardobishop/quests/obj/Options.java b/src/main/java/com/leonardobishop/quests/util/Options.java
index 0d8fdc2c..e1737f4b 100644
--- a/src/main/java/com/leonardobishop/quests/obj/Options.java
+++ b/src/main/java/com/leonardobishop/quests/util/Options.java
@@ -1,10 +1,9 @@
-package com.leonardobishop.quests.obj;
+package com.leonardobishop.quests.util;
import com.leonardobishop.quests.Quests;
import org.bukkit.ChatColor;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;