diff options
| author | LMBishop <13875753+LMBishop@users.noreply.github.com> | 2022-04-29 18:10:50 +0100 |
|---|---|---|
| committer | LMBishop <13875753+LMBishop@users.noreply.github.com> | 2022-04-29 18:10:50 +0100 |
| commit | d89f8086a496ed0923e41e86f11ab60b51e7f787 (patch) | |
| tree | ab2084c5197726c3cc3230e8d6f5c92113b83674 | |
| parent | 70bac90ae8c547e7e1fd4331f7079d458de08d34 (diff) | |
Add cancellable and counts towards limit options (closes #383)
6 files changed, 57 insertions, 3 deletions
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 e4015530..282b0d61 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 @@ -225,6 +225,8 @@ public class BukkitQuestsLoader implements QuestsLoader { boolean cooldown = config.getBoolean("options.cooldown.enabled", false); boolean permissionRequired = config.getBoolean("options.permission-required", false); boolean autostart = config.getBoolean("options.autostart", false); + boolean cancellable = config.getBoolean("options.cancellable", true); + boolean countsTowardsLimit = config.getBoolean("options.counts-towards-limit", true); int cooldownTime = config.getInt("options.cooldown.time", 10); int sortOrder = config.getInt("options.sort-order", 1); String category = config.getString("options.category"); @@ -252,6 +254,8 @@ public class BukkitQuestsLoader implements QuestsLoader { .withCooldownEnabled(cooldown) .withPermissionRequired(permissionRequired) .withRepeatEnabled(repeatable) + .withCancellable(cancellable) + .withCancellable(countsTowardsLimit) .withAutoStartEnabled(autostart) .inCategory(category) .build(); 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 35409a00..4b8d5a44 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 @@ -179,8 +179,17 @@ public class NormalQuestController implements QuestController { return QuestStartResult.NO_PERMISSION_FOR_CATEGORY; } } - if (!config.getBoolean("options.quest-autostart") && getStartedQuestsForPlayer(qPlayer).size() >= config.getQuestLimit(p)) { - return QuestStartResult.QUEST_LIMIT_REACHED; + if (!config.getBoolean("options.quest-autostart")) { + Set<Quest> startedQuests = getStartedQuestsForPlayer(qPlayer); + int questLimitCount = 0; + for (Quest q : startedQuests) { + if (q.doesCountTowardsLimit()) { + questLimitCount++; + } + } + if (questLimitCount >= config.getQuestLimit(p)) { + return QuestStartResult.QUEST_LIMIT_REACHED; + } } return QuestStartResult.QUEST_SUCCESS; } @@ -257,6 +266,10 @@ public class NormalQuestController implements QuestController { } return false; } + if (!quest.isCancellable()) { + Messages.QUEST_CANCEL_NOTCANCELLABLE.send(player); + return false; + } questProgress.setStarted(false); for (TaskProgress taskProgress : questProgress.getTaskProgress()) { taskProgress.setProgress(null); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/MenuUtils.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/MenuUtils.java index 1b801146..3379883f 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/MenuUtils.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/MenuUtils.java @@ -67,7 +67,8 @@ public class MenuUtils { if (menu.getOwner().hasStartedQuest(quest)) { if (!plugin.getQuestsConfig().getBoolean("options.allow-quest-cancel") || plugin.getConfig().getBoolean("options.quest-autostart") - || quest.isAutoStartEnabled()) { + || quest.isAutoStartEnabled() + || !quest.isCancellable()) { return; } if (plugin.getQuestsConfig().getBoolean("options.gui-confirm-cancel", true)) { diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java index 34fcfdc5..c63a2f05 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java @@ -31,6 +31,7 @@ public enum Messages { QUEST_CATEGORY_QUEST_PERMISSION("messages.quest-category-quest-permission", "&7You do not have permission to view this category."), QUEST_CATEGORY_PERMISSION("messages.quest-category-permission", "&7You do not have permission to start this quest since it is in a category you do not have permission to view."), QUEST_CANCEL_NOTSTARTED("messages.quest-cancel-notstarted", "&7You have not started this quest."), + QUEST_CANCEL_NOTCANCELLABLE("messages.quest-cancel-notcancellable", "&7You cannot cancel this quest."), QUEST_UPDATER("messages.quest-updater", "&cQuests > &7A new version &c{newver} &7was found on Spigot (your version: &c{oldver}&7). Please update me! <3 - Link: {link}"), COMMAND_DATA_NOT_LOADED("messages.command-data-not-loaded", "&4Your quests progress file has not been loaded; you cannot use quests. If this issue persists, contact an admin."), COMMAND_SUB_DOESNTEXIST("messages.command-sub-doesntexist", "&7The specified subcommand '&c{sub}' &7does not exist."), diff --git a/bukkit/src/main/resources/resources/bukkit/config.yml b/bukkit/src/main/resources/resources/bukkit/config.yml index 26e27923..0e7192c6 100644 --- a/bukkit/src/main/resources/resources/bukkit/config.yml +++ b/bukkit/src/main/resources/resources/bukkit/config.yml @@ -323,6 +323,7 @@ messages: quest-category-permission: "&7You do not have permission to view this category." quest-category-quest-permission: "&7You do not have permission to start this quest since it is in a category you do not have permission to view." quest-cancel-notstarted: "&7You have not started this quest." + quest-cancel-notcancellable: "&7You cannot cancel this quest." quest-updater: "&cQuests > &7A new version &c{newver} &7was found on Spigot (your version: &c{oldver}&7). Please update me! <3 - Link: {link}" command-data-not-loaded: "&4Your quests progress file has not been loaded; you cannot use quests. If this issue persists, contact an admin." command-sub-doesntexist: "&7The specified subcommand '&c{sub}' &7does not exist." 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 085ac0e9..999507b2 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 @@ -21,6 +21,8 @@ public class Quest implements Comparable<Quest> { private int sortOrder; private boolean permissionRequired; private boolean autoStartEnabled; + private boolean cancellable; + private boolean countsTowardsLimit; private Map<String, String> placeholders; private String categoryid; @@ -218,6 +220,24 @@ public class Quest implements Comparable<Quest> { } /** + * Get if this quest should be cancellable. + * + * @return boolean + */ + public boolean isCancellable() { + return cancellable; + } + + /** + * Get whether this quest should count towards the player's total quest limit. + * + * @return boolean + */ + public boolean doesCountTowardsLimit() { + return countsTowardsLimit; + } + + /** * Compare the sort orders for this quest with another quest. * * @see Comparable#compareTo(Object) @@ -243,6 +263,8 @@ public class Quest implements Comparable<Quest> { private int sortOrder = 1; private boolean permissionRequired = false; private boolean autoStartEnabled = false; + private boolean cancellable = true; + private boolean countsTowardsLimit = true; private Map<String, String> placeholders = Collections.emptyMap(); private String categoryid = null; @@ -310,6 +332,16 @@ public class Quest implements Comparable<Quest> { return this; } + public Builder withCancellable(boolean cancellable) { + this.cancellable = cancellable; + return this; + } + + public Builder withCountsTowardsLimit(boolean countsTowardsLimit) { + this.countsTowardsLimit = countsTowardsLimit; + return this; + } + public Builder inCategory(String categoryid) { this.categoryid = categoryid; return this; @@ -329,6 +361,8 @@ public class Quest implements Comparable<Quest> { quest.sortOrder = this.sortOrder; quest.permissionRequired = this.permissionRequired; quest.autoStartEnabled = this.autoStartEnabled; + quest.countsTowardsLimit = countsTowardsLimit; + quest.cancellable = this.cancellable; quest.placeholders = this.placeholders; quest.categoryid = this.categoryid; |
