summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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
-rw-r--r--common/src/main/java/com/leonardobishop/quests/common/quest/Quest.java153
4 files changed, 179 insertions, 40 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;
+ }
+
}
diff --git a/common/src/main/java/com/leonardobishop/quests/common/quest/Quest.java b/common/src/main/java/com/leonardobishop/quests/common/quest/Quest.java
index 510e88d9..c1f6f47f 100644
--- a/common/src/main/java/com/leonardobishop/quests/common/quest/Quest.java
+++ b/common/src/main/java/com/leonardobishop/quests/common/quest/Quest.java
@@ -2,45 +2,29 @@ package com.leonardobishop.quests.common.quest;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Quest implements Comparable<Quest> {
- private Map<String, Task> tasks = new HashMap<>();
- private final String id;
- private final List<String> rewards;
- private final List<String> requirements;
- private final List<String> rewardString;
- private final List<String> startString;
- private final boolean repeatable;
- private final boolean cooldownEnabled;
- private final int cooldown;
- private final int sortOrder;
- private final boolean permissionRequired;
- private final Map<String, String> placeholders;
+ private final Map<String, Task> tasks = new HashMap<>();
+ private String id;
+ private List<String> rewards;
+ private List<String> requirements;
+ private List<String> rewardString;
+ private List<String> startString;
+ private boolean repeatEnabled;
+ private boolean cooldownEnabled;
+ private int cooldown;
+ private int sortOrder;
+ private boolean permissionRequired;
+ private boolean autoStartEnabled;
+ private Map<String, String> placeholders;
private String categoryid;
-
- public Quest(String id, List<String> rewards, List<String> requirements, boolean repeatable, boolean cooldownEnabled, int cooldown, boolean permissionRequired, List<String> rewardString, List<String> startString, Map<String, String> placeholders, String categoryid, int sortOrder) {
- this(id, rewards, requirements, repeatable, cooldownEnabled, cooldown, permissionRequired, rewardString, startString, placeholders, sortOrder);
- this.categoryid = categoryid;
- }
-
- public Quest(String id, List<String> rewards, List<String> requirements, boolean repeatable, boolean cooldownEnabled, int cooldown, boolean permissionRequired, List<String> rewardString, List<String> startString, Map<String, String> placeholders, int sortOrder) {
- this.id = id;
- this.rewards = rewards;
- this.requirements = requirements;
- this.repeatable = repeatable;
- this.cooldownEnabled = cooldownEnabled;
- this.cooldown = cooldown;
- this.permissionRequired = permissionRequired;
- this.rewardString = rewardString;
- this.startString = startString;
- this.placeholders = placeholders;
- this.sortOrder = sortOrder;
- }
+ private Quest() { }
public void registerTask(Task task) {
tasks.put(task.getId(), task);
@@ -90,7 +74,7 @@ public class Quest implements Comparable<Quest> {
}
public boolean isRepeatable() {
- return repeatable;
+ return repeatEnabled;
}
public boolean isCooldownEnabled() {
@@ -113,8 +97,113 @@ public class Quest implements Comparable<Quest> {
return sortOrder;
}
+ public boolean isAutoStartEnabled() {
+ return autoStartEnabled;
+ }
+
@Override
public int compareTo(Quest quest) {
return (sortOrder - quest.sortOrder);
}
+
+ public static class Builder {
+
+ private final String id;
+ private List<String> rewards = Collections.emptyList();
+ private List<String> requirements = Collections.emptyList();
+ private List<String> rewardString = Collections.emptyList();
+ private List<String> startString = Collections.emptyList();
+ private boolean repeatEnabled = false;
+ private boolean cooldownEnabled = false;
+ private int cooldown = 0;
+ private int sortOrder = 1;
+ private boolean permissionRequired = false;
+ private boolean autoStartEnabled = false;
+ private Map<String, String> placeholders = Collections.emptyMap();
+ private String categoryid = null;
+
+ public Builder(String id) {
+ this.id = id;
+ }
+
+ public Builder withRewards(List<String> rewards) {
+ this.rewards = rewards;
+ return this;
+ }
+
+ public Builder withRequirements(List<String> requirements) {
+ this.requirements = requirements;
+ return this;
+ }
+
+ public Builder withRewardString(List<String> rewardString) {
+ this.rewardString = rewardString;
+ return this;
+ }
+
+ public Builder withStartString(List<String> startString) {
+ this.startString = startString;
+ return this;
+ }
+
+ public Builder withSortOrder(int sortOrder) {
+ this.sortOrder = sortOrder;
+ return this;
+ }
+
+ public Builder withCooldown(int cooldown) {
+ this.cooldown = cooldown;
+ return this;
+ }
+
+ public Builder withPlaceholders(Map<String, String> placeholders) {
+ this.placeholders = placeholders;
+ return this;
+ }
+
+ public Builder withRepeatEnabled(boolean repeatEnabled) {
+ this.repeatEnabled = repeatEnabled;
+ return this;
+ }
+
+ public Builder withCooldownEnabled(boolean cooldownEnabled) {
+ this.cooldownEnabled = cooldownEnabled;
+ return this;
+ }
+
+ public Builder withPermissionRequired(boolean permissionRequired) {
+ this.permissionRequired = permissionRequired;
+ return this;
+ }
+
+ public Builder withAutoStartEnabled(boolean autoStartEnabled) {
+ this.autoStartEnabled = autoStartEnabled;
+ return this;
+ }
+
+ public Builder inCategory(String categoryid) {
+ this.categoryid = categoryid;
+ return this;
+ }
+
+ public Quest build() {
+ Quest quest = new Quest();
+ quest.id = this.id;
+ quest.rewards = this.rewards;
+ quest.requirements = this.requirements;
+ quest.rewardString = this.rewardString;
+ quest.startString = this.startString;
+ quest.repeatEnabled = this.repeatEnabled;
+ quest.cooldownEnabled = this.cooldownEnabled;
+ quest.cooldown = this.cooldown;
+ quest.sortOrder = this.sortOrder;
+ quest.permissionRequired = this.permissionRequired;
+ quest.autoStartEnabled = this.autoStartEnabled;
+ quest.placeholders = this.placeholders;
+ quest.categoryid = this.categoryid;
+
+ return quest;
+ }
+
+ }
}