aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
authorlmbishop <13875753+lmbishop@users.noreply.github.com>2019-06-29 17:43:27 +0100
committerLMBishop <13875753+LMBishop@users.noreply.github.com>2019-06-29 18:02:52 +0100
commite4e2a28defeb7dded336cc385135cbe2b4efe316 (patch)
treea5b964289c28879eb9b30dd3838e8ac6341bd965 /src/main/java
parent2ddfbb5a0da6c3606ad3602d13942a7ca5a5dc0e (diff)
Auto start
- Quests can now be auto started - Removed tests
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/leonardobishop/quests/Quests.java60
-rw-r--r--src/main/java/com/leonardobishop/quests/events/EventInventory.java2
-rw-r--r--src/main/java/com/leonardobishop/quests/obj/Options.java3
-rw-r--r--src/main/java/com/leonardobishop/quests/obj/misc/QItemStack.java7
-rw-r--r--src/main/java/com/leonardobishop/quests/obj/misc/QMenuCancel.java2
-rw-r--r--src/main/java/com/leonardobishop/quests/obj/misc/QMenuQuest.java2
-rw-r--r--src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java110
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/tasktypes/TaskType.java26
8 files changed, 140 insertions, 72 deletions
diff --git a/src/main/java/com/leonardobishop/quests/Quests.java b/src/main/java/com/leonardobishop/quests/Quests.java
index e1acd4a3..79724c66 100644
--- a/src/main/java/com/leonardobishop/quests/Quests.java
+++ b/src/main/java/com/leonardobishop/quests/Quests.java
@@ -127,35 +127,6 @@ public class Quests extends JavaPlugin {
dataGenerator();
setupTitle();
- taskTypeManager.registerTaskType(new MiningTaskType());
- taskTypeManager.registerTaskType(new MiningCertainTaskType());
- 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 WalkingTaskType());
- taskTypeManager.registerTaskType(new TamingTaskType());
- taskTypeManager.registerTaskType(new MilkingTaskType());
- taskTypeManager.registerTaskType(new ShearingTaskType());
- taskTypeManager.registerTaskType(new PositionTaskType());
- taskTypeManager.registerTaskType(new PlaytimeTaskType());
- taskTypeManager.registerTaskType(new BrewingTaskType());
- // TODO: FIX
- // taskTypeManager.registerTaskType(new BrewingCertainTaskType());
- if (Bukkit.getPluginManager().isPluginEnabled("ASkyBlock")) {
- taskTypeManager.registerTaskType(new ASkyBlockLevelType());
- }
- if (Bukkit.getPluginManager().isPluginEnabled("uSkyBlock")) {
- taskTypeManager.registerTaskType(new uSkyBlockLevelType());
- }
- if (Bukkit.getPluginManager().isPluginEnabled("Citizens")) {
- taskTypeManager.registerTaskType(new CitizensDeliverTaskType());
- taskTypeManager.registerTaskType(new CitizensInteractTaskType());
- }
-
Bukkit.getPluginCommand("quests").setExecutor(new CommandQuests());
Bukkit.getPluginManager().registerEvents(new EventPlayerJoin(), this);
Bukkit.getPluginManager().registerEvents(new EventInventory(), this);
@@ -169,6 +140,35 @@ public class Quests extends JavaPlugin {
new BukkitRunnable() {
@Override
public void run() {
+ taskTypeManager.registerTaskType(new MiningTaskType());
+ taskTypeManager.registerTaskType(new MiningCertainTaskType());
+ 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 WalkingTaskType());
+ taskTypeManager.registerTaskType(new TamingTaskType());
+ taskTypeManager.registerTaskType(new MilkingTaskType());
+ taskTypeManager.registerTaskType(new ShearingTaskType());
+ taskTypeManager.registerTaskType(new PositionTaskType());
+ taskTypeManager.registerTaskType(new PlaytimeTaskType());
+ taskTypeManager.registerTaskType(new BrewingTaskType());
+ // TODO: FIX
+ // taskTypeManager.registerTaskType(new BrewingCertainTaskType());
+ if (Bukkit.getPluginManager().isPluginEnabled("ASkyBlock")) {
+ taskTypeManager.registerTaskType(new ASkyBlockLevelType());
+ }
+ if (Bukkit.getPluginManager().isPluginEnabled("uSkyBlock")) {
+ taskTypeManager.registerTaskType(new uSkyBlockLevelType());
+ }
+ if (Bukkit.getPluginManager().isPluginEnabled("Citizens")) {
+ taskTypeManager.registerTaskType(new CitizensDeliverTaskType());
+ taskTypeManager.registerTaskType(new CitizensInteractTaskType());
+ }
+
reloadQuests();
for (Player player : Bukkit.getOnlinePlayers()) {
@@ -198,7 +198,7 @@ public class Quests extends JavaPlugin {
for (Map.Entry<String, Quest> entry : Quests.getQuestManager().getQuests().entrySet()) {
Quest quest = entry.getValue();
QuestProgress questProgress = questProgressFile.getQuestProgress(quest);
- if (questProgress != null && questProgress.isStarted()) {
+ if (questProgressFile.hasStartedQuest(quest)) {
boolean complete = true;
for (Task task : quest.getTasks()) {
TaskProgress taskProgress;
diff --git a/src/main/java/com/leonardobishop/quests/events/EventInventory.java b/src/main/java/com/leonardobishop/quests/events/EventInventory.java
index ce989d4f..623f8c25 100644
--- a/src/main/java/com/leonardobishop/quests/events/EventInventory.java
+++ b/src/main/java/com/leonardobishop/quests/events/EventInventory.java
@@ -52,6 +52,8 @@ public class EventInventory implements Listener {
} else if (event.getSlot() < qMenuQuest.getPageSize() && qMenuQuest.getSlotsToMenu().containsKey(event.getSlot() + (((qMenuQuest
.getCurrentPage()) - 1) * qMenuQuest.getPageSize()))) {
+ if (Options.QUEST_AUTOSTART.getBooleanValue()) return;
+
String questid = qMenuQuest.getSlotsToMenu().get(event.getSlot() + (((qMenuQuest.getCurrentPage()) - 1) * qMenuQuest.getPageSize()));
Quest quest = Quests.getQuestManager().getQuestById(questid);
if (event.getClick() == ClickType.LEFT) {
diff --git a/src/main/java/com/leonardobishop/quests/obj/Options.java b/src/main/java/com/leonardobishop/quests/obj/Options.java
index 2fe624d3..238c77cf 100644
--- a/src/main/java/com/leonardobishop/quests/obj/Options.java
+++ b/src/main/java/com/leonardobishop/quests/obj/Options.java
@@ -19,7 +19,8 @@ public enum Options {
GUITITLE_QUESTS("options.guinames.quests-menu"),
GUITITLE_DAILY_QUESTS("options.guinames.daily-quests"),
GUITITLE_QUEST_CANCEL("options.guinames.quest-cancel"),
- ALLOW_QUEST_CANCEL("options.allow-quest-cancel");
+ ALLOW_QUEST_CANCEL("options.allow-quest-cancel"),
+ QUEST_AUTOSTART("options.quest-autostart");
private String path;
diff --git a/src/main/java/com/leonardobishop/quests/obj/misc/QItemStack.java b/src/main/java/com/leonardobishop/quests/obj/misc/QItemStack.java
index 8d5c82e9..775e19bb 100644
--- a/src/main/java/com/leonardobishop/quests/obj/misc/QItemStack.java
+++ b/src/main/java/com/leonardobishop/quests/obj/misc/QItemStack.java
@@ -1,6 +1,9 @@
package com.leonardobishop.quests.obj.misc;
+import com.leonardobishop.quests.Quests;
import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
+import com.leonardobishop.quests.quests.Quest;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemFlag;
@@ -68,14 +71,14 @@ public class QItemStack {
this.data = data;
}
- public ItemStack toItemStack(QuestProgress questProgress) {
+ public ItemStack toItemStack(Quest quest, QuestProgressFile questProgressFile, QuestProgress questProgress) {
ItemStack is = new ItemStack(type, 1, (short) data);
ItemMeta ism = is.getItemMeta();
ism.setDisplayName(name);
List<String> formattedLore = new ArrayList<>();
List<String> tempLore = new ArrayList<>();
tempLore.addAll(loreNormal);
- if (questProgress != null && questProgress.isStarted()) {
+ if (questProgressFile.hasStartedQuest(quest)) {
tempLore.addAll(loreStarted);
ism.addEnchant(Enchantment.ARROW_INFINITE, 1, true);
try {
diff --git a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuCancel.java b/src/main/java/com/leonardobishop/quests/obj/misc/QMenuCancel.java
index b23911fc..abebb17d 100644
--- a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuCancel.java
+++ b/src/main/java/com/leonardobishop/quests/obj/misc/QMenuCancel.java
@@ -66,7 +66,7 @@ public class QMenuCancel implements QMenu {
inventory.setItem(10, no);
inventory.setItem(11, no);
inventory.setItem(12, no);
- inventory.setItem(13, quest.getDisplayItem().toItemStack(owner.getQuestProgressFile().getQuestProgress(quest)));
+ inventory.setItem(13, quest.getDisplayItem().toItemStack(quest, owner.getQuestProgressFile(), owner.getQuestProgressFile().getQuestProgress(quest)));
inventory.setItem(14, yes);
inventory.setItem(15, yes);
inventory.setItem(16, yes);
diff --git a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuQuest.java b/src/main/java/com/leonardobishop/quests/obj/misc/QMenuQuest.java
index 6aabfe6e..370374f1 100644
--- a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuQuest.java
+++ b/src/main/java/com/leonardobishop/quests/obj/misc/QMenuQuest.java
@@ -135,7 +135,7 @@ public class QMenuQuest implements QMenu {
ItemStack is = replaceItemStack(Items.QUEST_COOLDOWN.getItem(), placeholders);
inventory.setItem(invSlot, is);
} else {
- inventory.setItem(invSlot, Quests.getQuestManager().getQuestById(quest.getId()).getDisplayItem().toItemStack(questProgress));
+ inventory.setItem(invSlot, Quests.getQuestManager().getQuestById(quest.getId()).getDisplayItem().toItemStack(quest, owner.getQuestProgressFile(), questProgress));
}
}
invSlot++;
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 8950d158..5fbb9e9f 100644
--- a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java
+++ b/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java
@@ -1,10 +1,10 @@
package com.leonardobishop.quests.player.questprogressfile;
-import com.leonardobishop.quests.quests.Quest;
-import com.leonardobishop.quests.quests.Task;
import com.leonardobishop.quests.Quests;
import com.leonardobishop.quests.obj.Messages;
import com.leonardobishop.quests.obj.Options;
+import com.leonardobishop.quests.quests.Quest;
+import com.leonardobishop.quests.quests.Task;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.YamlConfiguration;
@@ -53,51 +53,39 @@ public class QuestProgressFile {
}
/**
- * Start a quest for the player.
+ * Check if the player can start a quest.
+ * <p>
+ * Warning: will fail if the player is not online.
*
* @param quest the quest to check
- * @return 0 if successful, 1 if limit reached, 2 if quest is already completed, 3 if quest has cooldown, 4 if still locked, 5 if already started, 6 if
+ * @return 0 if true, 1 if limit reached, 2 if quest is already completed, 3 if quest has cooldown, 4 if still locked, 5 if already started, 6 if
* no permission, 7 if no permission for category
*/
- public int startQuest(Quest quest) {
+ public int canStartQuest(Quest quest) {
Player p = Bukkit.getPlayer(player);
if (getStartedQuests().size() >= Options.QUESTS_START_LIMIT.getIntValue()) {
- if (player != null) {
- p.sendMessage(Messages.QUEST_START_LIMIT.getMessage().replace("{limit}", String.valueOf(Options.QUESTS_START_LIMIT.getIntValue())));
- }
return 1;
}
QuestProgress questProgress = getQuestProgress(quest);
if (!quest.isRepeatable() && questProgress.isCompletedBefore()) {
if (player != null) {
- p.sendMessage(Messages.QUEST_START_DISABLED.getMessage());
+
}
return 2;
}
long cooldown = getCooldownFor(quest);
if (cooldown > 0) {
- if (player != null) {
- p.sendMessage(Messages.QUEST_START_COOLDOWN.getMessage().replace("{time}", String.valueOf(Quests.convertToFormat(TimeUnit.MINUTES.convert
- (cooldown, TimeUnit.MILLISECONDS)))));
- }
return 3;
}
if (!hasMetRequirements(quest)) {
- if (player != null) {
- p.sendMessage(Messages.QUEST_START_LOCKED.getMessage());
- }
return 4;
}
if (questProgress.isStarted()) {
- if (player != null) {
- p.sendMessage(Messages.QUEST_START_STARTED.getMessage());
- }
return 5;
}
if (quest.isPermissionRequired()) {
if (player != null) {
if (!p.hasPermission("quests.quest." + quest.getId())) {
- p.sendMessage(Messages.QUEST_START_PERMISSION.getMessage());
return 6;
}
} else {
@@ -108,30 +96,75 @@ public class QuestProgressFile {
.getCategoryById(quest.getCategoryId()).isPermissionRequired()) {
if (player != null) {
if (!p.hasPermission("quests.category." + quest.getCategoryId())) {
- p.sendMessage(Messages.QUEST_CATEGORY_QUEST_PERMISSION.getMessage());
return 7;
}
} else {
return 7;
}
}
+ return 0;
+ }
- questProgress.setStarted(true);
- for (TaskProgress taskProgress : questProgress.getTaskProgress()) {
- taskProgress.setCompleted(false);
- taskProgress.setProgress(null);
+ /**
+ * Start a quest for the player.
+ * <p>
+ * Warning: will fail if the player is not online.
+ *
+ * @param quest the quest to check
+ * @return 0 if successful, 1 if limit reached, 2 if quest is already completed, 3 if quest has cooldown, 4 if still locked, 5 if already started, 6 if
+ * no permission, 7 if no permission for category, 8 if other
+ */
+ public int startQuest(Quest quest) {
+ Player p = Bukkit.getPlayer(player);
+ int code = canStartQuest(quest);
+ if (p != null) {
+ switch (code) {
+ case 0:
+ break;
+ case 1:
+ p.sendMessage(Messages.QUEST_START_LIMIT.getMessage().replace("{limit}", String.valueOf(Options.QUESTS_START_LIMIT.getIntValue())));
+ break;
+ case 2:
+ p.sendMessage(Messages.QUEST_START_DISABLED.getMessage());
+ break;
+ case 3:
+ long cooldown = getCooldownFor(quest);
+ p.sendMessage(Messages.QUEST_START_COOLDOWN.getMessage().replace("{time}", String.valueOf(Quests.convertToFormat(TimeUnit.MINUTES.convert
+ (cooldown, TimeUnit.MILLISECONDS)))));
+ break;
+ case 4:
+ p.sendMessage(Messages.QUEST_START_LOCKED.getMessage());
+ break;
+ case 5:
+ p.sendMessage(Messages.QUEST_START_STARTED.getMessage());
+ break;
+ case 6:
+ p.sendMessage(Messages.QUEST_START_PERMISSION.getMessage());
+ break;
+ case 7:
+ p.sendMessage(Messages.QUEST_CATEGORY_QUEST_PERMISSION.getMessage());
+ break;
+ }
}
- questProgress.setCompleted(false);
- if (Bukkit.getPlayer(player) != null) {
- Player player = Bukkit.getPlayer(getPlayer());
- player.sendMessage(Messages.QUEST_START.getMessage().replace("{quest}", quest.getDisplayNameStripped()));
- if (Options.TITLES_ENABLED.getBooleanValue()) {
- Quests.getTitle().sendTitle(player, Messages.TITLE_QUEST_START_TITLE.getMessage().replace("{quest}", quest
- .getDisplayNameStripped()), Messages.TITLE_QUEST_START_SUBTITLE.getMessage().replace("{quest}", quest
- .getDisplayNameStripped()));
+ if (code == 0) {
+ QuestProgress questProgress = getQuestProgress(quest);
+ questProgress.setStarted(true);
+ for (TaskProgress taskProgress : questProgress.getTaskProgress()) {
+ taskProgress.setCompleted(false);
+ taskProgress.setProgress(null);
+ }
+ questProgress.setCompleted(false);
+ if (Bukkit.getPlayer(player) != null) {
+ Player player = Bukkit.getPlayer(getPlayer());
+ player.sendMessage(Messages.QUEST_START.getMessage().replace("{quest}", quest.getDisplayNameStripped()));
+ if (Options.TITLES_ENABLED.getBooleanValue()) {
+ Quests.getTitle().sendTitle(player, Messages.TITLE_QUEST_START_TITLE.getMessage().replace("{quest}", quest
+ .getDisplayNameStripped()), Messages.TITLE_QUEST_START_SUBTITLE.getMessage().replace("{quest}", quest
+ .getDisplayNameStripped()));
+ }
}
}
- return 0;
+ return code;
}
public boolean cancelQuest(Quest quest) {
@@ -171,12 +204,15 @@ public class QuestProgressFile {
}
public boolean hasStartedQuest(Quest quest) {
- //TODO always return true if the need for starting quests is disabled & requirements are met
- if (hasQuestProgress(quest)) {
- if (getQuestProgress(quest).isStarted()) {
+ if (!Options.QUEST_AUTOSTART.getBooleanValue()) {
+ if (hasQuestProgress(quest) && getQuestProgress(quest).isStarted()) {
return true;
}
+ } else {
+ int response = canStartQuest(quest);
+ if (response == 0 || response == 5) return true;
}
+
return false;
}
diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/TaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/TaskType.java
index 51770401..d3d00962 100644
--- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/TaskType.java
+++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/TaskType.java
@@ -7,6 +7,12 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+/**
+ * A task type which can be used within Quests. A {@link Quest}
+ * will be registered to this if it contains at least 1 task
+ * which is of this type. This is so you do not have to
+ * iterate through every single quest.
+ */
public abstract class TaskType implements Listener {
private List<Quest> quests = new ArrayList<>();
@@ -14,26 +20,46 @@ public abstract class TaskType implements Listener {
private String author;
private String description;
+ /**
+ * @param type the name of the task type, should not contain spaces
+ * @param author the name of the person (or people) who wrote it
+ * @param description a short, simple description of the task type
+ */
public TaskType(String type, String author, String description) {
this.type = type;
this.author = author;
this.description = description;
}
+ /**
+ * @param type the name of the task type, should not contain spaces
+ */
public TaskType(String type) {
this.type = type;
}
+ /**
+ * Registers a {@link Quest} to this task type. This is usually done when
+ * all the quests are initially loaded.
+ *
+ * @param quest the {@link Quest} to register.
+ */
public final void registerQuest(Quest quest) {
if (!quests.contains(quest)) {
quests.add(quest);
}
}
+ /**
+ * Clears the list which contains the registered quests.
+ */
public final void unregisterAll() {
quests.clear();
}
+ /**
+ * @return {@link List} of type {@link Quest} of all registered quests.
+ */
public final List<Quest> getRegisteredQuests() {
return quests;
}