optimizations
This commit is contained in:
56
src/main/java/net/nuggetmc/ai/command/CommandHandler.java
Normal file
56
src/main/java/net/nuggetmc/ai/command/CommandHandler.java
Normal file
@@ -0,0 +1,56 @@
|
||||
package net.nuggetmc.ai.command;
|
||||
|
||||
import com.jonahseguin.drink.Drink;
|
||||
import com.jonahseguin.drink.annotation.Command;
|
||||
import com.jonahseguin.drink.command.DrinkCommandService;
|
||||
import com.jonahseguin.drink.utils.ChatUtils;
|
||||
import net.nuggetmc.ai.PlayerAI;
|
||||
import net.nuggetmc.ai.command.commands.PlayerAICommand;
|
||||
import org.bukkit.ChatColor;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class CommandHandler {
|
||||
|
||||
private final DrinkCommandService drink;
|
||||
private final Map<Class<? extends CommandInstance>, List<String>> help;
|
||||
|
||||
public CommandHandler(PlayerAI plugin) {
|
||||
drink = (DrinkCommandService) Drink.get(plugin);
|
||||
drink.register(new PlayerAICommand(this), "bot", "playerai", "pai", "ai", "npc");
|
||||
drink.registerCommands();
|
||||
|
||||
help = new HashMap<>();
|
||||
setHelps(PlayerAICommand.class);
|
||||
}
|
||||
|
||||
@SafeVarargs
|
||||
private final void setHelps(Class<? extends CommandInstance>... cls) {
|
||||
Arrays.stream(cls).forEach(c -> help.put(c, getUsage(c)));
|
||||
}
|
||||
|
||||
public List<String> getHelp(Class<? extends CommandInstance> cls) {
|
||||
return help.get(cls);
|
||||
}
|
||||
|
||||
private List<String> getUsage(Class<? extends CommandInstance> cls) {
|
||||
String rootName = getRootName(cls);
|
||||
|
||||
return getSubCommands(cls).stream().map(c -> {
|
||||
Command command = c.getAnnotation(Command.class);
|
||||
return ChatUtils.BULLET_FORMATTED + ChatColor.YELLOW + "/" + rootName + " " + command.name() + ChatUtils.BULLET_FORMATTED
|
||||
+ ChatColor.RESET + command.desc();
|
||||
}).sorted().collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private String getRootName(Class<? extends CommandInstance> cls) {
|
||||
return drink.getCommands().entrySet().stream()
|
||||
.filter(c -> c.getValue().getObject().getClass().isAssignableFrom(cls)).map(Map.Entry::getKey).findFirst().orElse(null);
|
||||
}
|
||||
|
||||
private List<Method> getSubCommands(Class<? extends CommandInstance> cls) {
|
||||
return Arrays.stream(cls.getDeclaredMethods()).filter(m -> m.isAnnotationPresent(Command.class) && !m.getAnnotation(Command.class).name().isEmpty()).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
14
src/main/java/net/nuggetmc/ai/command/CommandInstance.java
Normal file
14
src/main/java/net/nuggetmc/ai/command/CommandInstance.java
Normal file
@@ -0,0 +1,14 @@
|
||||
package net.nuggetmc.ai.command;
|
||||
|
||||
public abstract class CommandInstance {
|
||||
|
||||
protected final CommandHandler commandHandler;
|
||||
|
||||
public CommandInstance(CommandHandler commandHandler) {
|
||||
this.commandHandler = commandHandler;
|
||||
}
|
||||
|
||||
public CommandHandler getCommandHandler() {
|
||||
return commandHandler;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
package net.nuggetmc.ai.command.commands;
|
||||
|
||||
import com.jonahseguin.drink.annotation.*;
|
||||
import com.jonahseguin.drink.utils.ChatUtils;
|
||||
import net.nuggetmc.ai.PlayerAI;
|
||||
import net.nuggetmc.ai.bot.BotManager;
|
||||
import net.nuggetmc.ai.command.CommandHandler;
|
||||
import net.nuggetmc.ai.command.CommandInstance;
|
||||
import net.nuggetmc.ai.utils.Debugger;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.text.NumberFormat;
|
||||
import java.util.Locale;
|
||||
|
||||
public class PlayerAICommand extends CommandInstance {
|
||||
|
||||
private PlayerAI plugin;
|
||||
private BotManager manager;
|
||||
|
||||
public PlayerAICommand(CommandHandler commandHandler) {
|
||||
super(commandHandler);
|
||||
|
||||
this.plugin = PlayerAI.getInstance();
|
||||
this.manager = plugin.getManager();
|
||||
}
|
||||
|
||||
@Command(name = "", desc = "The PlayerAI main command.")
|
||||
@Require("playerai.manage")
|
||||
public void rootCommand(@Sender Player sender) {
|
||||
sender.sendMessage(ChatUtils.LINE);
|
||||
sender.sendMessage(ChatColor.GOLD + "PlayerAI" + ChatColor.GRAY + " [" + ChatColor.RED + "v" + PlayerAI.VERSION + ChatColor.GRAY + "]");
|
||||
commandHandler.getHelp(getClass()).forEach(sender::sendMessage);
|
||||
sender.sendMessage(ChatUtils.LINE);
|
||||
}
|
||||
|
||||
@Command(name = "create", desc = "Create bots.", usage = "<name> [skin]")
|
||||
@Require("playerai.manage")
|
||||
public void createBotCommand(@Sender Player sender, String name, @OptArg String skin) {
|
||||
manager.createBots(sender, name, skin, 1);
|
||||
}
|
||||
|
||||
@Command(name = "multi", desc = "Create multiple bots at once.", usage = "<amount> <name> [skin]")
|
||||
@Require("playerai.manage")
|
||||
public void multiBotCommand(@Sender Player sender, int n, String name, @OptArg String skin) {
|
||||
manager.createBots(sender, name, skin, n);
|
||||
}
|
||||
|
||||
@Command(name = "debug", desc = "Debug plugin code.", usage = "<expression>")
|
||||
@Require("playerai.manage")
|
||||
public void debugCommand(@Sender CommandSender sender, @Text String cmd) {
|
||||
new Debugger(sender).execute(cmd);
|
||||
}
|
||||
|
||||
@Command(name = "info", desc = "Information about loaded bots.")
|
||||
@Require("playerai.manage")
|
||||
public void infoCommand(@Sender Player sender) {
|
||||
sender.sendMessage("Bot GUI coming soon!");
|
||||
}
|
||||
|
||||
@Command(name = "reset", desc = "Remove all loaded bots.")
|
||||
@Require("playerai.manage")
|
||||
public void resetCommand(@Sender CommandSender sender) {
|
||||
sender.sendMessage("Removing every bot...");
|
||||
|
||||
BotManager manager = PlayerAI.getInstance().getManager();
|
||||
int size = manager.fetch().size();
|
||||
manager.reset();
|
||||
|
||||
String formatted = NumberFormat.getNumberInstance(Locale.US).format(size);
|
||||
sender.sendMessage("Removed " + ChatColor.RED + formatted + ChatColor.RESET + " entit" + (size == 1 ? "y" : "ies") + ".");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user