From 5743352d1f41d6c097b80e9ac666da474295fcfb Mon Sep 17 00:00:00 2001 From: snake Date: Mon, 19 Dec 2022 00:31:17 +0900 Subject: Add command permissions --- .../bukkit/command/CancelCommandHandler.java | 5 +- .../bukkit/command/CategoryCommandHandler.java | 2 +- .../quests/bukkit/command/CommandSwitcher.java | 9 +++- .../quests/bukkit/command/QuestCommandHandler.java | 2 +- .../bukkit/command/QuestsCommandSwitcher.java | 24 +++++++-- .../quests/bukkit/command/StartCommandHandler.java | 57 ++++++++++++++++++++++ .../bukkit/command/StartedCommandHandler.java | 2 +- .../quests/bukkit/command/TrackCommandHandler.java | 57 ++++++++++++++++++++++ .../quests/bukkit/util/Messages.java | 1 + 9 files changed, 149 insertions(+), 10 deletions(-) create mode 100644 bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/StartCommandHandler.java create mode 100644 bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/TrackCommandHandler.java (limited to 'bukkit/src/main/java/com') 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 index e2cba558..0eb16537 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CancelCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CancelCommandHandler.java @@ -52,11 +52,14 @@ public class CancelCommandHandler implements CommandHandler { @Override public List tabComplete(CommandSender sender, String[] args) { + if (args.length == 2) { + return TabHelper.tabCompleteQuests(args[1]); + } return Collections.emptyList(); } @Override public @Nullable String getPermission() { - return null; + return "quests.command.cancel"; } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CategoryCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CategoryCommandHandler.java index a21e0ccd..d536b3ca 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CategoryCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CategoryCommandHandler.java @@ -54,7 +54,7 @@ public class CategoryCommandHandler implements CommandHandler { @Override public @Nullable String getPermission() { - return null; + return "quests.command.category"; } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CommandSwitcher.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CommandSwitcher.java index 1280ee5a..f920c8f2 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CommandSwitcher.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CommandSwitcher.java @@ -1,5 +1,6 @@ package com.leonardobishop.quests.bukkit.command; +import com.leonardobishop.quests.bukkit.util.Messages; import org.bukkit.command.CommandSender; import java.util.*; @@ -19,8 +20,12 @@ public abstract class CommandSwitcher implements CommandHandler { if (args.length > switchingIndex) { String subcommand = args[switchingIndex].toLowerCase(); CommandHandler handler = subcommands.getOrDefault(subcommand, subcommands.get(aliases.get(subcommand))); - if (handler != null && (handler.getPermission() == null || sender.hasPermission(handler.getPermission()))) { - handler.handle(sender, args); + if (handler != null) { + if ((handler.getPermission() == null || sender.hasPermission(handler.getPermission()))) { + handler.handle(sender, args); + } else { + Messages.COMMAND_NO_PERMISSION.send(sender); + } return; } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestCommandHandler.java index a827d7cb..882a38b2 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestCommandHandler.java @@ -61,7 +61,7 @@ public class QuestCommandHandler implements CommandHandler { @Override public @Nullable String getPermission() { - return null; + return "quests.command.quest"; } } 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 d253a1a3..c880a851 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 @@ -27,6 +27,8 @@ 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("start", new StartCommandHandler(plugin)); + super.subcommands.put("track", new TrackCommandHandler(plugin)); super.subcommands.put("cancel", new CancelCommandHandler(plugin)); super.aliases.put("q", "quest"); @@ -80,10 +82,24 @@ public class QuestsCommandSwitcher extends CommandSwitcher implements TabExecuto .getDescription().getVersion() + " " + ChatColor.GRAY.toString() + ChatColor.STRIKETHROUGH + "]=------------"); sender.sendMessage(ChatColor.GRAY + "The following commands are available: "); sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests " + ChatColor.DARK_GRAY + ": show quests"); - 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 by name"); + if (sender.hasPermission(subcommands.get("category").getPermission())) { + sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests c/category " + ChatColor.DARK_GRAY + ": open category by ID"); + } + if (sender.hasPermission(subcommands.get("started").getPermission())) { + sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests started " + ChatColor.DARK_GRAY + ": show started quests"); + } + if (sender.hasPermission(subcommands.get("quest").getPermission())) { + sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests q/quest (start|cancel|track) " + ChatColor.DARK_GRAY + ": start, cancel or track quest by ID"); + } + if (sender.hasPermission(subcommands.get("start").getPermission())) { + sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests start " + ChatColor.DARK_GRAY + ": start quest by name"); + } + if (sender.hasPermission(subcommands.get("track").getPermission())) { + sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests track " + ChatColor.DARK_GRAY + ": track quest by name"); + } + if (sender.hasPermission(subcommands.get("cancel").getPermission())) { + sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests cancel [questid]" + ChatColor.DARK_GRAY + ": cancel active quest by 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/command/StartCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/StartCommandHandler.java new file mode 100644 index 00000000..dae14d50 --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/StartCommandHandler.java @@ -0,0 +1,57 @@ +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.ChatColor; +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 StartCommandHandler implements CommandHandler { + + private final BukkitQuestsPlugin plugin; + + public StartCommandHandler(BukkitQuestsPlugin plugin) { + this.plugin = plugin; + } + + @Override + public void handle(CommandSender sender, String[] args) { + Player player = (Player) sender; + if (args.length >= 2) { + Quest quest = plugin.getQuestManager().getQuestById(args[1]); + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); + if (qPlayer == null) { + Messages.COMMAND_DATA_NOT_LOADED.send(player); + return; + } + if (quest == null) { + Messages.COMMAND_QUEST_GENERAL_DOESNTEXIST.send(sender, "{quest}", args[1]); + return; + } else { + qPlayer.startQuest(quest); + } + return; + } + sender.sendMessage(ChatColor.RED + "/quests start "); + } + + @Override + public List tabComplete(CommandSender sender, String[] args) { + if (args.length == 2) { + return TabHelper.tabCompleteQuests(args[1]); + } + return Collections.emptyList(); + } + + @Override + public @Nullable String getPermission() { + return "quests.command.start"; + } + +} diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/StartedCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/StartedCommandHandler.java index 5433f7b3..0eacba4a 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/StartedCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/StartedCommandHandler.java @@ -36,6 +36,6 @@ public class StartedCommandHandler implements CommandHandler { @Override public @Nullable String getPermission() { - return null; + return "quests.command.started"; } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/TrackCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/TrackCommandHandler.java new file mode 100644 index 00000000..75b19a84 --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/TrackCommandHandler.java @@ -0,0 +1,57 @@ +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.ChatColor; +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 TrackCommandHandler implements CommandHandler { + + private final BukkitQuestsPlugin plugin; + + public TrackCommandHandler(BukkitQuestsPlugin plugin) { + this.plugin = plugin; + } + + @Override + public void handle(CommandSender sender, String[] args) { + Player player = (Player) sender; + if (args.length >= 2) { + Quest quest = plugin.getQuestManager().getQuestById(args[1]); + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); + if (qPlayer == null) { + Messages.COMMAND_DATA_NOT_LOADED.send(player); + return; + } + if (quest == null) { + Messages.COMMAND_QUEST_GENERAL_DOESNTEXIST.send(sender, "{quest}", args[1]); + return; + } else { + qPlayer.trackQuest(quest); + } + return; + } + sender.sendMessage(ChatColor.RED + "/quests track "); + } + + @Override + public List tabComplete(CommandSender sender, String[] args) { + if (args.length == 2) { + return TabHelper.tabCompleteQuests(args[1]); + } + return Collections.emptyList(); + } + + @Override + public @Nullable String getPermission() { + return "quests.command.track"; + } + +} 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 c6d3525e..d2aaf448 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 @@ -35,6 +35,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_NO_PERMISSION("messages.command-no-permission", "&7You do not have permission to use this command."), 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."), -- cgit v1.2.3-70-g09d2