48 lines
1.9 KiB
Java
48 lines
1.9 KiB
Java
package de.kentoj.kencommandapi;
|
|
|
|
import de.kentoj.kencommandapi.api.CommandNode;
|
|
import de.kentoj.kencommandapi.api.invocation.CommandContext;
|
|
import de.kentoj.kencommandapi.internal.parser.CommandParser;
|
|
import de.kentoj.kencommandapi.internal.parser.ParseResult;
|
|
import org.bukkit.command.Command;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
import java.util.Arrays;
|
|
|
|
public class BukkitKenCommand extends Command {
|
|
|
|
private final CommandNode<CommandSender> rootNode;
|
|
private final CommandParser<CommandSender> commandParser;
|
|
|
|
protected BukkitKenCommand(
|
|
CommandParser<CommandSender> commandParser,
|
|
CommandNode<CommandSender> rootNode
|
|
) {
|
|
super(rootNode.getNames()[0]);
|
|
this.commandParser = commandParser;
|
|
this.rootNode = rootNode;
|
|
this.setAliases(Arrays.asList(rootNode.getNames()));
|
|
this.setPermission(rootNode.getPermission());
|
|
}
|
|
|
|
@Override
|
|
public boolean execute(@NotNull CommandSender sender, @NotNull String commandLabel, @NotNull String[] args) {
|
|
var parseResult = commandParser.parseLiteral(rootNode, sender, args);
|
|
if (parseResult instanceof ParseResult.Success<CommandSender>) {
|
|
var ctx = new CommandContext<>(sender, ((ParseResult.Success<CommandSender>) parseResult).getParsedArguments());
|
|
assert parseResult.getLiteral().getExecutor() != null;
|
|
try {
|
|
var result = parseResult.getLiteral().getExecutor().execute(ctx);
|
|
if (result.isError()) {
|
|
sender.sendMessage("§c" + result.getError());
|
|
}
|
|
} catch (Exception e) {
|
|
sender.sendMessage("§4§lERROR " + e.getMessage());
|
|
}
|
|
} else {
|
|
sender.sendMessage("§c" + parseResult.getMessage());
|
|
}
|
|
return true;
|
|
}
|
|
}
|