Command system rewrite using Drink and Maven support.

This commit is contained in:
BattleDash
2021-06-26 19:08:15 -07:00
parent 08118bff57
commit 6243636243
20 changed files with 299 additions and 445 deletions

View File

@@ -0,0 +1,45 @@
package net.nuggetmc.ai.commands;
import com.jonahseguin.drink.CommandService;
import com.jonahseguin.drink.Drink;
import com.jonahseguin.drink.annotation.Command;
import com.jonahseguin.drink.command.DrinkCommandContainer;
import com.jonahseguin.drink.command.DrinkCommandService;
import net.nuggetmc.ai.PlayerAI;
import net.nuggetmc.ai.commands.commands.PlayerAICommand;
import org.bukkit.ChatColor;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class CommandHandler {
private final DrinkCommandService drink;
public CommandHandler() {
drink = (DrinkCommandService) Drink.get(PlayerAI.getInstance());
drink.register(new PlayerAICommand(this), "playerai", "pai");
drink.registerCommands();
}
public List<String> getUsage(Class<? extends CommandInstance> clazz) {
return getSubCommands(clazz).stream().map(c -> {
Command command = c.getAnnotation(Command.class);
return ChatColor.GRAY + "" + ChatColor.YELLOW + "/" + getRootName(clazz) + (command.name().isEmpty() ? "" : " " + command.name()) + ChatColor.GRAY + ""
+ ChatColor.RESET + command.desc();
}).collect(Collectors.toList());
}
private String getRootName(Class<? extends CommandInstance> clazz) {
return drink.getCommands().entrySet().stream()
.filter(c -> c.getValue().getObject().getClass().isAssignableFrom(clazz)).map(Map.Entry::getKey).findFirst().orElse(null);
}
private List<Method> getSubCommands(Class<? extends CommandInstance> clazz) {
return Arrays.stream(clazz.getDeclaredMethods()).filter(m -> m.isAnnotationPresent(Command.class)).collect(Collectors.toList());
}
}

View File

@@ -0,0 +1,14 @@
package net.nuggetmc.ai.commands;
public abstract class CommandInstance {
private final CommandHandler commandHandler;
public CommandInstance(CommandHandler commandHandler) {
this.commandHandler = commandHandler;
}
public CommandHandler getCommandHandler() {
return commandHandler;
}
}

View File

@@ -0,0 +1,62 @@
package net.nuggetmc.ai.commands.commands;
import com.jonahseguin.drink.annotation.Command;
import com.jonahseguin.drink.annotation.OptArg;
import com.jonahseguin.drink.annotation.Sender;
import com.jonahseguin.drink.annotation.Text;
import net.nuggetmc.ai.PlayerAI;
import net.nuggetmc.ai.commands.CommandHandler;
import net.nuggetmc.ai.commands.CommandInstance;
import net.nuggetmc.ai.npc.NPC;
import net.nuggetmc.ai.npc.NPCManager;
import net.nuggetmc.ai.utils.ChatUtils;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.NumberFormat;
import java.util.Locale;
public class PlayerAICommand extends CommandInstance {
public PlayerAICommand(CommandHandler commandHandler) {
super(commandHandler);
}
@Command(name = "", desc = "Test Description")
public void rootCommand(@Sender Player sender) {
sender.sendMessage(ChatUtils.LINE);
sender.sendMessage(ChatColor.GOLD + "PlayerAI" + ChatColor.GRAY + " [" + ChatColor.RED + "v" + PlayerAI.VERSION + ChatColor.GRAY + "]");
for (String s : this.getCommandHandler().getUsage(PlayerAICommand.class)) {
sender.sendMessage(s);
}
sender.sendMessage(ChatUtils.LINE);
}
@Command(name = "create", desc = "Create bots.", usage = "<name> [skin]")
public void createBotCommand(@Sender Player sender, String name, @OptArg() String skin) {
NPC.createNPC(name, sender.getLocation(), skin.isEmpty() ? name : skin);
}
@Command(name = "debug", desc = "Debug bot stats.")
public void debugCommand(@Sender Player sender) {
}
@Command(name = "info", desc = "Information about loaded bots.")
public void infoCommand(@Sender Player sender) {
}
@Command(name = "reset", desc = "Remove all loaded bots.")
public void resetCommand(@Sender Player sender) {
sender.sendMessage("Removing every bot...");
NPCManager 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") + ".");
}
}