optimizations

This commit is contained in:
batchprogrammer314
2021-07-01 01:12:18 -05:00
parent 302b0f5483
commit e9aa334aee
9 changed files with 88 additions and 61 deletions

View 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());
}
}

View 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;
}
}

View File

@@ -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") + ".");
}
}