summaryrefslogtreecommitdiffstats
path: root/bukkit/src/main/java/com
diff options
context:
space:
mode:
authorLMBishop <13875753+LMBishop@users.noreply.github.com>2021-06-24 13:17:16 +0100
committerLMBishop <13875753+LMBishop@users.noreply.github.com>2021-06-24 13:17:16 +0100
commit367cbbede13140cc7c5e13de1041fdf4bd62f105 (patch)
tree07e24f67dc43fd42c98bf35e10953dc212b31b7c /bukkit/src/main/java/com
parent2d3a885c70640aed6db1269d0ed7333fdb0ebef2 (diff)
Add quest-specific autostart
- Closes #188 - Closes #125
Diffstat (limited to 'bukkit/src/main/java/com')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommand.java1
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java24
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java41
3 files changed, 58 insertions, 8 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommand.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommand.java
index 37a388fb..488f91f0 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommand.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommand.java
@@ -205,6 +205,7 @@ public class QuestsCommand implements TabExecutor {
sender.sendMessage(ChatColor.RED + "Requirements: " + ChatColor.GRAY + String.join(", ", quest.getRequirements()));
sender.sendMessage(ChatColor.RED + "Cooldown enabled: " + ChatColor.GRAY + quest.isCooldownEnabled());
sender.sendMessage(ChatColor.RED + "Cooldown time: " + ChatColor.GRAY + quest.getCooldown());
+ sender.sendMessage(ChatColor.RED + "Autostart: " + ChatColor.GRAY + quest.isAutoStartEnabled());
}
return true;
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java
index f80ec3f0..e80b30e1 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java
@@ -176,12 +176,13 @@ public class BukkitQuestsLoader implements QuestsLoader {
boolean repeatable = config.getBoolean("options.repeatable", false);
boolean cooldown = config.getBoolean("options.cooldown.enabled", false);
boolean permissionRequired = config.getBoolean("options.permission-required", false);
+ boolean autostart = config.getBoolean("options.autostart", false);
int cooldownTime = config.getInt("options.cooldown.time", 10);
int sortOrder = config.getInt("options.sort-order", 1);
String category = config.getString("options.category");
Map<String, String> placeholders = new HashMap<>();
- if (category == null) category = "";
+ if (category != null && category.equals("")) category = null;
if (questController.getName().equals("daily")) {
repeatable = true;
@@ -191,11 +192,22 @@ public class BukkitQuestsLoader implements QuestsLoader {
permissionRequired = false;
}
- Quest quest;
- if (category.equals("")) {
- quest = new Quest(id, rewards, requirements, repeatable, cooldown, cooldownTime, permissionRequired, rewardString, startString, placeholders, sortOrder);
- } else {
- quest = new Quest(id, rewards, requirements, repeatable, cooldown, cooldownTime, permissionRequired, rewardString, startString, placeholders, category, sortOrder);
+ Quest quest = new Quest.Builder(id)
+ .withRewards(rewards)
+ .withRequirements(requirements)
+ .withRewardString(rewardString)
+ .withStartString(startString)
+ .withPlaceholders(placeholders)
+ .withCooldown(cooldownTime)
+ .withSortOrder(sortOrder)
+ .withCooldownEnabled(cooldown)
+ .withPermissionRequired(permissionRequired)
+ .withRepeatEnabled(repeatable)
+ .withAutoStartEnabled(autostart)
+ .inCategory(category)
+ .build();
+
+ if (category != null) {
Category c = questManager.getCategoryById(category);
if (c != null) {
c.registerQuestId(id);
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java
index c9c95eb7..d32218b6 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java
@@ -23,6 +23,10 @@ import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
import java.util.concurrent.TimeUnit;
public class NormalQuestController implements QuestController {
@@ -30,9 +34,18 @@ public class NormalQuestController implements QuestController {
private final BukkitQuestsPlugin plugin;
private final BukkitQuestsConfig config;
+ private final List<Quest> autoStartQuestCache;
+
public NormalQuestController(BukkitQuestsPlugin plugin) {
this.plugin = plugin;
this.config = (BukkitQuestsConfig) plugin.getQuestsConfig();
+
+ List<Quest> autoStartQuestCache = new ArrayList<>();
+ List<Quest> nonAutoStartQuestCache = new ArrayList<>();
+ for (Quest quest : plugin.getQuestManager().getQuests().values()) {
+ if (quest.isAutoStartEnabled()) autoStartQuestCache.add(quest);
+ }
+ this.autoStartQuestCache = autoStartQuestCache;
}
@Override
@@ -125,7 +138,7 @@ public class NormalQuestController implements QuestController {
@Override
public QuestStartResult canPlayerStartQuest(QPlayer qPlayer, Quest quest) {
Player p = Bukkit.getPlayer(qPlayer.getPlayerUUID());
- if (qPlayer.getQuestProgressFile().getStartedQuests().size() >= config.getInt("options.quest-started-limit") && !config.getBoolean("options.quest-autostart")) {
+ if (getStartedQuestsForPlayer(qPlayer).size() >= config.getInt("options.quest-started-limit") && !config.getBoolean("options.quest-autostart")) {
return QuestStartResult.QUEST_LIMIT_REACHED;
}
QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest);
@@ -223,7 +236,10 @@ public class NormalQuestController implements QuestController {
QuestStartResult response = canPlayerStartQuest(qPlayer, quest);
return response == QuestStartResult.QUEST_SUCCESS || response == QuestStartResult.QUEST_ALREADY_STARTED;
} else {
- return qPlayer.getQuestProgressFile().hasQuestProgress(quest) && qPlayer.getQuestProgressFile().getQuestProgress(quest).isStarted();
+ if (quest.isAutoStartEnabled()) {
+ QuestStartResult response = canPlayerStartQuest(qPlayer, quest);
+ return response == QuestStartResult.QUEST_SUCCESS || response == QuestStartResult.QUEST_ALREADY_STARTED;
+ } else return qPlayer.getQuestProgressFile().hasQuestProgress(quest) && qPlayer.getQuestProgressFile().getQuestProgress(quest).isStarted();
}
}
@@ -282,4 +298,25 @@ public class NormalQuestController implements QuestController {
}
}
+ private Set<Quest> getStartedQuestsForPlayer(QPlayer qPlayer) {
+ Set<Quest> startedQuests = new HashSet<>();
+ if (config.getBoolean("options.quest-autostart")) {
+ for (Quest quest : plugin.getQuestManager().getQuests().values()) {
+ QuestStartResult response = canPlayerStartQuest(qPlayer, quest);
+ if (response == QuestStartResult.QUEST_SUCCESS || response == QuestStartResult.QUEST_ALREADY_STARTED) {
+ startedQuests.add(quest);
+ }
+ }
+ } else {
+ startedQuests.addAll(qPlayer.getQuestProgressFile().getStartedQuests());
+ for (Quest quest : autoStartQuestCache) {
+ QuestStartResult response = canPlayerStartQuest(qPlayer, quest);
+ if (response == QuestStartResult.QUEST_SUCCESS || response == QuestStartResult.QUEST_ALREADY_STARTED) {
+ startedQuests.add(quest);
+ }
+ }
+ }
+ return startedQuests;
+ }
+
}