blob: 60b8718a0849e5502db70f6251d8ef82d0e40077 [file] [log] [blame] [raw]
package protocolsupport.commands;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;
public class CommandHandler implements CommandExecutor, TabCompleter {
private final Map<String, SubCommand> subcommands = new LinkedHashMap<>();
{
subcommands.put("buildinfo", new BuildInfoSubCommand());
subcommands.put("debug", new DebugSubCommand());
subcommands.put("leakdetector", new LeakDetectorSubCommand());
subcommands.put("list", new PlayerListSubCommand());
subcommands.put("connections", new ConnectionsListSubCommand());
subcommands.put("help", new SubCommand() {
@Override
public int getMinArgs() {
return 0;
}
@Override
public boolean handle(CommandSender sender, String[] args) {
String prepend = sender instanceof Player ? "/" : "";
for (Entry<String, SubCommand> entry : subcommands.entrySet()) {
sender.sendMessage(ChatColor.YELLOW + prepend + "ps " + entry.getKey() + " - " + entry.getValue().getHelp());
}
return true;
}
@Override
public String getHelp() {
return "prints help";
}
});
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (!sender.hasPermission("protocolsupport.admin")) {
sender.sendMessage(ChatColor.DARK_RED + "You have no power here!");
return true;
}
if (args.length == 0) {
return false;
}
SubCommand subcommand = subcommands.get(args[0]);
if (subcommand == null) {
return false;
}
String[] subcommandargs = Arrays.copyOfRange(args, 1, args.length);
if (subcommandargs.length < subcommand.getMinArgs()) {
sender.sendMessage(ChatColor.DARK_RED + "Not enough args");
return true;
}
return subcommand.handle(sender, subcommandargs);
}
@Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] args) {
return subcommands.keySet().stream()
.filter(subcommand -> subcommand.startsWith(args[0]))
.collect(Collectors.toList());
}
}