50 lines
1.9 KiB
Java
50 lines
1.9 KiB
Java
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<T extends CommandSender> {
|
|
|
|
private final CommandHandler<T> commandHandler;
|
|
private final List<RootLiteral<T>> registeredNodes = new ArrayList<>();
|
|
private final SimpleCommandMap commandMap;
|
|
private final Class<T> senderType;
|
|
|
|
public CommandAPI(Plugin plugin, Class<T> senderType) {
|
|
this.senderType = senderType;
|
|
this.commandHandler = new CommandHandler<>(CommandSender::sendMessage, Permissible::hasPermission);
|
|
Bukkit.getPluginManager().registerEvents(new TabCompleteListener<>(this, commandHandler, senderType), 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<T> getRegistered(String name) {
|
|
for (var node : registeredNodes) {
|
|
for (String nodeName : node.names()) {
|
|
if (nodeName.equals(name)) return node;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public void register(RootLiteral<T> rootNode) {
|
|
registeredNodes.add(rootNode);
|
|
commandMap.register(rootNode.names()[0], new BukkitKenCommand<>(commandHandler, rootNode, senderType));
|
|
}
|
|
}
|