package de.kentoj.kencommandapi; import de.kentoj.kencommandapi.api.CommandHandler; import de.kentoj.kencommandapi.api.literal.RootLiteral; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.command.SimpleCommandMap; import org.bukkit.permissions.Permissible; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.Nullable; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; public class CommandAPI { private final CommandHandler commandHandler; private final List> registeredNodes = new ArrayList<>(); private final SimpleCommandMap commandMap; public CommandAPI(Plugin plugin) { this.commandHandler = new CommandHandler<>(CommandSender::sendMessage, Permissible::hasPermission); Bukkit.getPluginManager().registerEvents(new TabCompleteListener(this, commandHandler), plugin); try { Field field = Bukkit.getPluginManager().getClass().getDeclaredField("commandMap"); field.setAccessible(true); commandMap = (SimpleCommandMap) field.get(Bukkit.getPluginManager()); } catch (NoSuchFieldException | IllegalAccessException e) { throw new IllegalStateException("failed getting command map", e); } } @Nullable RootLiteral getRegistered(String name) { for (var node : registeredNodes) { for (String nodeName : node.getNames()) { if (nodeName.equals(name)) return node; } } return null; } public void register(RootLiteral rootNode) { registeredNodes.add(rootNode); commandMap.register(rootNode.getNames()[0], new BukkitKenCommand(commandHandler, rootNode)); } }