aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java7
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminAboutCommandHandler.java8
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminConfigCommandHandler.java8
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminInfoCommandHandler.java10
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminItemsCommandHandler.java12
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataCompleteCommandHandler.java14
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataFullresetCommandHandler.java11
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataRandomCommandHandler.java13
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataResetCommandHandler.java15
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataStartCommandHandler.java15
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminOpenguiCategoryCommandHandler.java13
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminOpenguiQuestCommandHandler.java11
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminReloadCommandHandler.java8
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminTypesCommandHandler.java16
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminUpdateCommandHandler.java8
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminWikiCommandHandler.java8
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CategoryCommandHandler.java11
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CommandHandler.java4
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/CommandSwitcher.java22
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestCommandHandler.java14
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommandSwitcher.java11
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommandTabCompleter.java125
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/RandomCommandHandler.java6
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/StartedCommandHandler.java9
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/TabHelper.java39
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);
+ }
+
+}