diff options
Diffstat (limited to 'bukkit/src')
25 files changed, 283 insertions, 135 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java index 65b2ed7a..10fc9e8a 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java @@ -1,7 +1,7 @@ package com.leonardobishop.quests.bukkit; +import com.leonardobishop.quests.bukkit.command.QuestCommandHandler; import com.leonardobishop.quests.bukkit.command.QuestsCommandSwitcher; -import com.leonardobishop.quests.bukkit.command.QuestsCommandTabCompleter; import com.leonardobishop.quests.bukkit.config.BukkitQuestsConfig; import com.leonardobishop.quests.bukkit.config.BukkitQuestsLoader; import com.leonardobishop.quests.bukkit.hook.coreprotect.AbstractCoreProtectHook; @@ -234,8 +234,9 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { } // Set commands - super.getCommand("quests").setTabCompleter(new QuestsCommandTabCompleter(this)); - super.getCommand("quests").setExecutor(new QuestsCommandSwitcher(this)); + QuestsCommandSwitcher questsCommandSwitcher = new QuestsCommandSwitcher(this); + super.getCommand("quests").setTabCompleter(questsCommandSwitcher); + super.getCommand("quests").setExecutor(questsCommandSwitcher); // Register events super.getServer().getPluginManager().registerEvents(new PlayerJoinListener(this), this); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminAboutCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminAboutCommandHandler.java index 87995372..5992b3f5 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminAboutCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminAboutCommandHandler.java @@ -5,6 +5,9 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + public class AdminAboutCommandHandler implements CommandHandler { private final BukkitQuestsPlugin plugin; @@ -25,6 +28,11 @@ public class AdminAboutCommandHandler implements CommandHandler { } @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + return Collections.emptyList(); + } + + @Override public @Nullable String getPermission() { return "quests.admin"; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminConfigCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminConfigCommandHandler.java index 90cbe76d..6c0c1703 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminConfigCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminConfigCommandHandler.java @@ -5,6 +5,9 @@ import com.leonardobishop.quests.bukkit.util.CommandUtils; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + public class AdminConfigCommandHandler implements CommandHandler { private final BukkitQuestsPlugin plugin; @@ -19,6 +22,11 @@ public class AdminConfigCommandHandler implements CommandHandler { } @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + return Collections.emptyList(); + } + + @Override public @Nullable String getPermission() { return "quests.admin"; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminInfoCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminInfoCommandHandler.java index 12913954..4ff8fb08 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminInfoCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminInfoCommandHandler.java @@ -8,6 +8,8 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; import java.util.Map; public class AdminInfoCommandHandler implements CommandHandler { @@ -71,6 +73,14 @@ public class AdminInfoCommandHandler implements CommandHandler { } @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + if (args.length == 3) { + return TabHelper.tabCompleteQuests(args[2]); + } + return Collections.emptyList(); + } + + @Override public @Nullable String getPermission() { return "quests.admin"; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminItemsCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminItemsCommandHandler.java index a18a316b..78b16a73 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminItemsCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminItemsCommandHandler.java @@ -13,6 +13,9 @@ import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.IOException; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; public class AdminItemsCommandHandler implements CommandHandler { @@ -67,6 +70,15 @@ public class AdminItemsCommandHandler implements CommandHandler { } } + + @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + if (args.length == 3) { + return TabHelper.matchTabComplete(args[2], Collections.singletonList("import")); + } + return Collections.emptyList(); + } + @Override public @Nullable String getPermission() { return "quests.admin"; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataCompleteCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataCompleteCommandHandler.java index 41636b56..001e4305 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataCompleteCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataCompleteCommandHandler.java @@ -11,6 +11,9 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + public class AdminModdataCompleteCommandHandler implements CommandHandler { private final BukkitQuestsPlugin plugin; @@ -43,6 +46,17 @@ public class AdminModdataCompleteCommandHandler implements CommandHandler { sender.sendMessage(ChatColor.RED + "/quests a/admin moddata complete <player> <quest>"); } + + @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + if (args.length == 4) { + return null; + } else if (args.length == 5) { + return TabHelper.tabCompleteQuests(args[4]); + } + return Collections.emptyList(); + } + @Override public @Nullable String getPermission() { return "quests.admin"; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataFullresetCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataFullresetCommandHandler.java index c3dc91f9..457f32e7 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataFullresetCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataFullresetCommandHandler.java @@ -10,6 +10,9 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + public class AdminModdataFullresetCommandHandler implements CommandHandler { private final BukkitQuestsPlugin plugin; @@ -41,6 +44,14 @@ public class AdminModdataFullresetCommandHandler implements CommandHandler { } @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + if (args.length == 4) { + return null; + } + return Collections.emptyList(); + } + + @Override public @Nullable String getPermission() { return "quests.admin"; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataRandomCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataRandomCommandHandler.java index a5bc1aa4..50040d00 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataRandomCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataRandomCommandHandler.java @@ -14,6 +14,7 @@ import org.bukkit.command.CommandSender; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.concurrent.ThreadLocalRandom; @@ -88,7 +89,17 @@ public class AdminModdataRandomCommandHandler implements CommandHandler { return; } - sender.sendMessage(ChatColor.RED + "/quests a/admin random <player> [category]"); + sender.sendMessage(ChatColor.RED + "/quests a/admin moddata random <player> [category]"); + } + + @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + if (args.length == 4) { + return null; + } else if (args.length == 5) { + return TabHelper.tabCompleteCategory(args[4]); + } + return Collections.emptyList(); } @Override diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataResetCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataResetCommandHandler.java index 534d950f..b0037918 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataResetCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataResetCommandHandler.java @@ -11,6 +11,9 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + public class AdminModdataResetCommandHandler implements CommandHandler { private final BukkitQuestsPlugin plugin; @@ -40,7 +43,17 @@ public class AdminModdataResetCommandHandler implements CommandHandler { return; } - sender.sendMessage(ChatColor.RED + "/quests a/admin moddata start <player> <quest>"); + sender.sendMessage(ChatColor.RED + "/quests a/admin moddata reset <player> <quest>"); + } + + @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + if (args.length == 4) { + return null; + } else if (args.length == 5) { + return TabHelper.tabCompleteQuests(args[4]); + } + return Collections.emptyList(); } @Override diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataStartCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataStartCommandHandler.java index 54a98e5d..a0a7da0b 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataStartCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataStartCommandHandler.java @@ -12,6 +12,9 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + public class AdminModdataStartCommandHandler implements CommandHandler { private final BukkitQuestsPlugin plugin; @@ -65,7 +68,17 @@ public class AdminModdataStartCommandHandler implements CommandHandler { return; } - sender.sendMessage(ChatColor.RED + "/quests a/admin moddata reset <player> <quest>"); + sender.sendMessage(ChatColor.RED + "/quests a/admin moddata start <player> <quest>"); + } + + @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + if (args.length == 4) { + return null; + } else if (args.length == 5) { + return TabHelper.tabCompleteQuests(args[4]); + } + return Collections.emptyList(); } @Override diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminOpenguiCategoryCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminOpenguiCategoryCommandHandler.java index 885f235a..8e4a3069 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminOpenguiCategoryCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminOpenguiCategoryCommandHandler.java @@ -10,6 +10,9 @@ 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 AdminOpenguiCategoryCommandHandler implements CommandHandler { private final BukkitQuestsPlugin plugin; @@ -52,6 +55,16 @@ public class AdminOpenguiCategoryCommandHandler implements CommandHandler { } @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + if (args.length == 4) { + return null; + } else if (args.length == 5) { + return TabHelper.tabCompleteCategory(args[4]); + } + return Collections.emptyList(); + } + + @Override public @Nullable String getPermission() { return "quests.admin"; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminOpenguiQuestCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminOpenguiQuestCommandHandler.java index 83327e80..b1f44799 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminOpenguiQuestCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminOpenguiQuestCommandHandler.java @@ -9,6 +9,9 @@ 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 AdminOpenguiQuestCommandHandler implements CommandHandler { private final BukkitQuestsPlugin plugin; @@ -36,6 +39,14 @@ public class AdminOpenguiQuestCommandHandler implements CommandHandler { } @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + if (args.length == 4) { + return null; + } + return Collections.emptyList(); + } + + @Override public @Nullable String getPermission() { return "quests.admin"; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminReloadCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminReloadCommandHandler.java index 0394aeaf..82b6d83f 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminReloadCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminReloadCommandHandler.java @@ -6,6 +6,9 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + public class AdminReloadCommandHandler implements CommandHandler { private final BukkitQuestsPlugin plugin; @@ -24,6 +27,11 @@ public class AdminReloadCommandHandler implements CommandHandler { } @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + return Collections.emptyList(); + } + + @Override public @Nullable String getPermission() { return "quests.admin"; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminTypesCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminTypesCommandHandler.java index a62d6248..840395a4 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminTypesCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminTypesCommandHandler.java @@ -7,6 +7,10 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + public class AdminTypesCommandHandler implements CommandHandler { private final BukkitQuestsPlugin plugin; @@ -42,6 +46,18 @@ public class AdminTypesCommandHandler implements CommandHandler { } @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + if (args.length == 3) { + List<String> options = new ArrayList<>(); + for (TaskType taskType : plugin.getTaskTypeManager().getTaskTypes()) { + options.add(taskType.getType()); + } + return TabHelper.matchTabComplete(args[2], options); + } + return Collections.emptyList(); + } + + @Override public @Nullable String getPermission() { return "quests.admin"; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminUpdateCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminUpdateCommandHandler.java index 54d585c4..a64929a6 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminUpdateCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminUpdateCommandHandler.java @@ -7,6 +7,9 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + public class AdminUpdateCommandHandler implements CommandHandler { private final BukkitQuestsPlugin plugin; @@ -33,6 +36,11 @@ public class AdminUpdateCommandHandler implements CommandHandler { } @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + return Collections.emptyList(); + } + + @Override public @Nullable String getPermission() { return "quests.admin"; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminWikiCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminWikiCommandHandler.java index c76ab5de..b7c6ddf4 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminWikiCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminWikiCommandHandler.java @@ -5,6 +5,9 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + public class AdminWikiCommandHandler implements CommandHandler { private final BukkitQuestsPlugin plugin; @@ -19,6 +22,11 @@ public class AdminWikiCommandHandler implements CommandHandler { } @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + return Collections.emptyList(); + } + + @Override public @Nullable String getPermission() { return "quests.admin"; } 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 88e5e690..f0e03e40 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 @@ -9,6 +9,9 @@ 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 CategoryCommandHandler implements CommandHandler { private final BukkitQuestsPlugin plugin; @@ -42,6 +45,14 @@ public class CategoryCommandHandler implements CommandHandler { } @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + if (args.length == 2) { + return TabHelper.tabCompleteCategory(args[1]); + } + return Collections.emptyList(); + } + + @Override public @Nullable String getPermission() { return null; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CommandHandler.java index 72f0f6ac..bd427a53 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CommandHandler.java @@ -3,10 +3,14 @@ package com.leonardobishop.quests.bukkit.command; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.Nullable; +import java.util.List; + public interface CommandHandler { void handle(CommandSender sender, String[] args); + List<String> tabComplete(CommandSender sender, String[] args); + @Nullable String getPermission(); } 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 f243a6af..1280ee5a 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 @@ -2,8 +2,7 @@ package com.leonardobishop.quests.bukkit.command; import org.bukkit.command.CommandSender; -import java.util.HashMap; -import java.util.Map; +import java.util.*; public abstract class CommandSwitcher implements CommandHandler { @@ -28,6 +27,25 @@ public abstract class CommandSwitcher implements CommandHandler { showHelp(sender); } + @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + if (args.length > switchingIndex + 1) { + 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()))) { + return handler.tabComplete(sender, args); + } + } else if (args.length == switchingIndex + 1) { + List<String> availableCommands = new ArrayList<>(); + for (Map.Entry<String, CommandHandler> command : subcommands.entrySet()) { + String permission = command.getValue().getPermission(); + if (permission == null || sender.hasPermission(permission)) availableCommands.add(command.getKey()); + } + return TabHelper.matchTabComplete(args[switchingIndex], availableCommands); + } + return Collections.emptyList(); + } + abstract public void showHelp(CommandSender sender); } 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 08c7e83a..bab1d62a 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 @@ -9,6 +9,10 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.Nullable; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + public class QuestCommandHandler implements CommandHandler { private final BukkitQuestsPlugin plugin; @@ -45,6 +49,16 @@ public class QuestCommandHandler implements CommandHandler { } @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + if (args.length == 2) { + return TabHelper.tabCompleteCategory(args[1]); + } else if (args.length == 3) { + return TabHelper.matchTabComplete(args[2], Arrays.asList("start", "cancel", "track")); + } + 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 f30bfb54..993b686b 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 @@ -8,11 +8,14 @@ import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; +import org.bukkit.command.TabExecutor; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class QuestsCommandSwitcher extends CommandSwitcher implements CommandExecutor { +import java.util.List; + +public class QuestsCommandSwitcher extends CommandSwitcher implements TabExecutor { private final BukkitQuestsPlugin plugin; @@ -65,6 +68,12 @@ public class QuestsCommandSwitcher extends CommandSwitcher implements CommandExe } + @Nullable + @Override + public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { + return super.tabComplete(sender, args); + } + @Override public void showHelp(CommandSender sender) { sender.sendMessage(ChatColor.GRAY.toString() + ChatColor.STRIKETHROUGH + "------------=[" + ChatColor.RED + " Quests v" + plugin diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommandTabCompleter.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommandTabCompleter.java deleted file mode 100644 index dbf2fecd..00000000 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommandTabCompleter.java +++ /dev/null @@ -1,125 +0,0 @@ -package com.leonardobishop.quests.bukkit.command; - -import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; -import com.leonardobishop.quests.common.quest.Category; -import com.leonardobishop.quests.common.quest.Quest; -import com.leonardobishop.quests.common.tasktype.TaskType; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.command.TabCompleter; -import org.bukkit.entity.Player; -import org.bukkit.util.StringUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -//TODO unfuck this: move responsibility of tab completion to individual command -public class QuestsCommandTabCompleter implements TabCompleter { - - private BukkitQuestsPlugin plugin; - - public QuestsCommandTabCompleter(BukkitQuestsPlugin plugin) { - this.plugin = plugin; - } - - private List<String> matchTabComplete(String arg, List<String> options) { - List<String> completions = new ArrayList<>(); - StringUtil.copyPartialMatches(arg, options, completions); - Collections.sort(completions); - return completions; - } - - private List<String> tabCompleteCategory(String arg) { - List<String> options = new ArrayList<>(); - for (Category c : plugin.getQuestManager().getCategories()) { - options.add(c.getId()); - } - return matchTabComplete(arg, options); - } - - private List<String> tabCompleteQuests(String arg) { - List<String> options = new ArrayList<>(plugin.getQuestManager().getQuests().keySet()); - return matchTabComplete(arg, options); - } - - @Nullable - @Override - public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { - if (!plugin.getQuestsConfig().getBoolean("options.tab-completion.enabled")) { - return null; - } - if (sender instanceof Player) { - if (args.length == 1) { - List<String> options = new ArrayList<>(Arrays.asList("quest", "category", "started")); - if (sender.hasPermission("quests.admin")) { - options.add("admin"); - } - if (sender.hasPermission("quests.command.random")) { - options.add("random"); - } - return matchTabComplete(args[0], options); - } else if (args.length == 2) { - if (args[0].equalsIgnoreCase("c") || args[0].equalsIgnoreCase("category") || (args[0].equalsIgnoreCase("random") && sender.hasPermission("quests.command.random"))) { - return tabCompleteCategory(args[1]); - } else if (args[0].equalsIgnoreCase("q") || args[0].equalsIgnoreCase("quest")) { - return tabCompleteQuests(args[1]); - } else if (args[0].equalsIgnoreCase("a") || args[0].equalsIgnoreCase("admin") - && sender.hasPermission("quests.admin")) { - List<String> options = Arrays.asList("opengui", "moddata", "types", "reload", "update", "config", "info", "wiki", "about", "items"); - return matchTabComplete(args[1], options); - } - } else if (args.length == 3) { - if (args[0].equalsIgnoreCase("q") || args[0].equalsIgnoreCase("quest") - && sender.hasPermission("quests.admin")) { - Quest q = plugin.getQuestManager().getQuestById(args[1]); - if (q != null) { - List<String> options = Arrays.asList("start", "cancel", "track"); - return matchTabComplete(args[2], options); - } - } else if (args[0].equalsIgnoreCase("a") || args[0].equalsIgnoreCase("admin") - && sender.hasPermission("quests.admin")) { - if (args[1].equalsIgnoreCase("types")) { - List<String> options = new ArrayList<>(); - for (TaskType taskType : plugin.getTaskTypeManager().getTaskTypes()) { - options.add(taskType.getType()); - } - return matchTabComplete(args[2], options); - } else if (args[1].equalsIgnoreCase("opengui")) { - List<String> options = Arrays.asList("quests", "category"); - return matchTabComplete(args[2], options); - } else if (args[1].equalsIgnoreCase("moddata")) { - List<String> options = Arrays.asList("fullreset", "reset", "start", "complete", "random"); - return matchTabComplete(args[2], options); - } else if (args[1].equalsIgnoreCase("info")) { - return tabCompleteQuests(args[2]); - } else if (args[1].equalsIgnoreCase("items")) { - return matchTabComplete(args[2], Collections.singletonList("import")); - } - } - } else if (args.length == 4) { - if (sender.hasPermission("quests.admin")) return null; - } else if (args.length == 5) { - if (args[0].equalsIgnoreCase("a") || args[0].equalsIgnoreCase("admin") - && sender.hasPermission("quests.admin")) { - if (args[1].equalsIgnoreCase("opengui")) { - if (args[2].equalsIgnoreCase("c") || args[2].equalsIgnoreCase("category") || args[2].equalsIgnoreCase("random")) { - return tabCompleteCategory(args[4]); - } - } else if (args[1].equalsIgnoreCase("moddata")) { - if (args[2].equalsIgnoreCase("start") - || args[2].equalsIgnoreCase("complete") - || args[2].equalsIgnoreCase("reset")) { - return tabCompleteQuests(args[4]); - } - } - } - } - } - return Collections.emptyList(); - } - -} diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/RandomCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/RandomCommandHandler.java index abe48060..de1a480f 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/RandomCommandHandler.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/RandomCommandHandler.java @@ -11,6 +11,7 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.concurrent.ThreadLocalRandom; @@ -61,6 +62,11 @@ public class RandomCommandHandler implements CommandHandler { } @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + return Collections.emptyList(); + } + + @Override public @Nullable String getPermission() { return "quests.command.random"; } 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 19897238..76b06120 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 @@ -7,6 +7,9 @@ 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 StartedCommandHandler implements CommandHandler { private final BukkitQuestsPlugin plugin; @@ -24,7 +27,11 @@ public class StartedCommandHandler implements CommandHandler { return; } plugin.getMenuController().openStartedQuests(qPlayer); - return; + } + + @Override + public List<String> tabComplete(CommandSender sender, String[] args) { + return Collections.emptyList(); } @Override diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/TabHelper.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/TabHelper.java new file mode 100644 index 00000000..fe212e60 --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/TabHelper.java @@ -0,0 +1,39 @@ +package com.leonardobishop.quests.bukkit.command; + +import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; +import com.leonardobishop.quests.common.quest.Category; +import org.bukkit.util.StringUtil; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class TabHelper { + + static BukkitQuestsPlugin plugin; + + static { + plugin = BukkitQuestsPlugin.getPlugin(BukkitQuestsPlugin.class); + } + + public static List<String> matchTabComplete(String arg, List<String> options) { + List<String> completions = new ArrayList<>(); + StringUtil.copyPartialMatches(arg, options, completions); + Collections.sort(completions); + return completions; + } + + public static List<String> tabCompleteCategory(String arg) { + List<String> options = new ArrayList<>(); + for (Category c : plugin.getQuestManager().getCategories()) { + options.add(c.getId()); + } + return matchTabComplete(arg, options); + } + + public static List<String> tabCompleteQuests(String arg) { + List<String> options = new ArrayList<>(plugin.getQuestManager().getQuests().keySet()); + return matchTabComplete(arg, options); + } + +} |
