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