From 6f21bc6a50603cc9bc82b099633455b9ef915b7b Mon Sep 17 00:00:00 2001 From: LMBishop <13875753+LMBishop@users.noreply.github.com> Date: Tue, 28 Sep 2021 13:47:40 +0100 Subject: Add cancel shortcut command (closes #283) --- .../bukkit/command/CancelCommandHandler.java | 56 ++++++++++++++++++++++ .../bukkit/command/QuestsCommandSwitcher.java | 2 + .../quests/bukkit/util/Messages.java | 1 + 3 files changed, 59 insertions(+) create mode 100644 bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CancelCommandHandler.java (limited to 'bukkit/src/main/java') diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CancelCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CancelCommandHandler.java new file mode 100644 index 00000000..73d2fd61 --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CancelCommandHandler.java @@ -0,0 +1,56 @@ +package com.leonardobishop.quests.bukkit.command; + +import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; +import com.leonardobishop.quests.bukkit.util.Messages; +import com.leonardobishop.quests.common.player.QPlayer; +import com.leonardobishop.quests.common.quest.Quest; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; +import java.util.List; + +public class CancelCommandHandler implements CommandHandler { + + private final BukkitQuestsPlugin plugin; + + public CancelCommandHandler(BukkitQuestsPlugin plugin) { + this.plugin = plugin; + } + + @Override + public void handle(CommandSender sender, String[] args) { + Player player = (Player) sender; + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); + if (qPlayer == null) { + player.sendMessage(Messages.COMMAND_DATA_NOT_LOADED.getMessage()); + return; + } + + Quest quest; + if (qPlayer.getQuestProgressFile().getStartedQuests().size() == 1) { + quest = qPlayer.getQuestProgressFile().getStartedQuests().get(0); + } else if (args.length >= 2) { + quest = plugin.getQuestManager().getQuestById(args[1]); + if (quest == null) { + sender.sendMessage(Messages.COMMAND_QUEST_GENERAL_DOESNTEXIST.getMessage().replace("{quest}", args[1])); + return; + } + } else { + sender.sendMessage(Messages.COMMAND_QUEST_CANCEL_SPECIFY.getMessage()); + return; + } + qPlayer.cancelQuest(quest); + } + + @Override + public List tabComplete(CommandSender sender, String[] args) { + return Collections.emptyList(); + } + + @Override + public @Nullable String getPermission() { + return null; + } +} diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommandSwitcher.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommandSwitcher.java index 993b686b..e1216293 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommandSwitcher.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommandSwitcher.java @@ -28,6 +28,7 @@ public class QuestsCommandSwitcher extends CommandSwitcher implements TabExecuto super.subcommands.put("random", new RandomCommandHandler(plugin)); super.subcommands.put("started", new StartedCommandHandler(plugin)); super.subcommands.put("admin", new AdminCommandSwitcher(plugin)); + super.subcommands.put("cancel", new CancelCommandHandler(plugin)); super.aliases.put("q", "quest"); super.aliases.put("c", "category"); @@ -83,6 +84,7 @@ public class QuestsCommandSwitcher extends CommandSwitcher implements TabExecuto sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests c/category " + ChatColor.DARK_GRAY + ": open category by ID"); sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests q/quest (start|cancel|track) " + ChatColor.DARK_GRAY + ": start, cancel or track quest by ID"); sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests started " + ChatColor.DARK_GRAY + ": show started quests"); + sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests cancel [questid]" + ChatColor.DARK_GRAY + ": cancel active quest/quest bu name"); if (sender.hasPermission(subcommands.get("random").getPermission())) { sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests random " + ChatColor.DARK_GRAY + ": show random quests"); } 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 7d87a399..a3cf4bee 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 @@ -32,6 +32,7 @@ public enum Messages { 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."), + COMMAND_QUEST_CANCEL_SPECIFY("messages.quest-cancel-specify", "&7You must specify a quest to cancel."), COMMAND_QUEST_START_DOESNTEXIST("messages.command-quest-start-doesntexist", "&7The specified quest '&c{quest}&7' does not exist."), COMMAND_QUEST_GENERAL_DOESNTEXIST("messages.command-quest-general-doesntexist", "&7The specified quest '&c{quest}&7' does not exist."), COMMAND_QUEST_OPENCATEGORY_ADMIN_SUCCESS("messages.command-quest-opencategory-admin-success", "&7Opened category &c{category} &7for player &c{player}&7."), -- cgit v1.2.3-70-g09d2