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 rootNode; private final CommandParser commandParser; protected BukkitKenCommand( CommandParser commandParser, CommandNode 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) { var ctx = new CommandContext<>(sender, ((ParseResult.Success) 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; } }