diff options
4 files changed, 42 insertions, 0 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 39146730..7c6a5be0 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 @@ -269,6 +269,7 @@ public class BukkitQuestsLoader implements QuestsLoader { List<String> startString = config.getStringList("startstring"); List<String> startCommands = config.getStringList("startcommands"); List<String> cancelCommands = config.getStringList("cancelcommands"); + List<String> expiryCommands = config.getStringList("expirycommands"); boolean repeatable = config.getBoolean("options.repeatable", false); boolean cooldown = config.getBoolean("options.cooldown.enabled", false); boolean timeLimit = config.getBoolean("options.time-limit.enabled", false); @@ -300,6 +301,7 @@ public class BukkitQuestsLoader implements QuestsLoader { .withStartString(startString) .withStartCommands(startCommands) .withCancelCommands(cancelCommands) + .withExpiryCommands(expiryCommands) .withPlaceholders(placeholders) .withProgressPlaceholders(progressPlaceholders) .withCooldown(cooldownTime) 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 01cc2788..47f108b5 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 @@ -329,6 +329,14 @@ public class NormalQuestController implements QuestController { Bukkit.getPluginManager().callEvent(questCancelEvent); // PlayerCancelQuestEvent -- end Messages.send(questCancelEvent.getQuestExpireMessage(), player); + for (String s : quest.getExpiryCommands()) { + s = s.replace("{player}", player.getName()); + if (plugin.getConfig().getBoolean("options.quests-use-placeholderapi")) { + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), plugin.getPlaceholderAPIProcessor().apply(player, s)); + } else { + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), s); + } + } } if (config.getBoolean("options.allow-quest-track") && config.getBoolean("options.quest-autotrack") 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 6af3fcf3..3e7fc193 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 @@ -22,6 +22,7 @@ public class Quest implements Comparable<Quest> { private List<String> startString; private List<String> startCommands; private List<String> cancelCommands; + private List<String> expiryCommands; private boolean repeatEnabled; private boolean cooldownEnabled; private int cooldown; @@ -173,6 +174,16 @@ public class Quest implements Comparable<Quest> { } /** + * Get the expiry commands for this quest. + * The expiry commands is a list of commands to be executed upon expiring the quest. + * + * @return immutable list of commands + */ + public List<String> getExpiryCommands() { + return Collections.unmodifiableList(expiryCommands); + } + + /** * Get if this quest can be repeated after completion. * * @return boolean @@ -306,6 +317,7 @@ public class Quest implements Comparable<Quest> { private List<String> startString = Collections.emptyList(); private List<String> startCommands = Collections.emptyList(); private List<String> cancelCommands = Collections.emptyList(); + private List<String> expiryCommands = Collections.emptyList(); private boolean repeatEnabled = false; private boolean cooldownEnabled = false; private int cooldown = 0; @@ -354,6 +366,11 @@ public class Quest implements Comparable<Quest> { return this; } + public Builder withExpiryCommands(List<String> expiryCommands) { + this.expiryCommands = expiryCommands; + return this; + } + public Builder withSortOrder(int sortOrder) { this.sortOrder = sortOrder; return this; @@ -428,6 +445,7 @@ public class Quest implements Comparable<Quest> { quest.startString = this.startString; quest.startCommands = this.startCommands; quest.cancelCommands = this.cancelCommands; + quest.expiryCommands = this.expiryCommands; quest.repeatEnabled = this.repeatEnabled; quest.cooldownEnabled = this.cooldownEnabled; quest.cooldown = this.cooldown; diff --git a/docs/configuration/creating-a-quest.md b/docs/configuration/creating-a-quest.md index 6b47e3e6..eb9f1850 100644 --- a/docs/configuration/creating-a-quest.md +++ b/docs/configuration/creating-a-quest.md @@ -155,6 +155,20 @@ cancelcommands: - "broadcast {player} has cancelled a quest" ``` +## Expiry commands + + +*`expirycommands`* + +**Optional.** This is a list of commands which will be executed when the +the player's quest expires. You can use `{player}` and the player's name +will be substituted in place. + +``` yaml +expirycommands: + - "broadcast {player}'s quest has expired" +``` + ## Start string |
