package be.isach.ultracosmetics.command; import be.isach.ultracosmetics.UltraCosmetics; import be.isach.ultracosmetics.command.subcommands.*; import be.isach.ultracosmetics.config.MessageManager; import be.isach.ultracosmetics.util.MathUtils; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Command manager. * * @author iSach * @since 12-20-2015 */ public class CommandManager implements CommandExecutor { /** * List of the registered commands. */ private List<SubCommand> commands = new ArrayList<>(); private UltraCosmetics ultraCosmetics; public CommandManager(UltraCosmetics ultraCosmetics) { this.ultraCosmetics = ultraCosmetics; this.ultraCosmetics.getServer().getPluginCommand("ultracosmetics").setExecutor(this); String[] aliases = {"uc", "cosmetics"}; this.ultraCosmetics.getServer().getPluginCommand("ultracosmetics").setAliases(Arrays.asList(aliases)); } /** * Registers a command. * * @param meCommand The command to register. */ public void registerCommand(SubCommand meCommand) { commands.add(meCommand); } public void showHelp(CommandSender commandSender, int page) { commandSender.sendMessage(""); commandSender.sendMessage(ChatColor.WHITE + "" + ChatColor.BOLD + "UltraCosmetics Help (/uc <page>) " + ChatColor.DARK_GRAY + "" + ChatColor.BOLD + "(" + page + "/" + getMaxPages() + ")"); int from = 1; if (page > 1) from = 8 * (page - 1) + 1; int to = 8 * page; for (int h = from; h <= to; h++) { if (h > commands.size()) break; SubCommand sub = commands.get(h - 1); commandSender.sendMessage(ChatColor.DARK_GRAY + "| " + ChatColor.GRAY + sub.getUsage() + ChatColor.WHITE + " " + ChatColor.ITALIC + sub.getDescription()); } } /** * Gets the max amount of pages. * * @return the maximum amount of pages. */ private int getMaxPages() { int max = 8; int i = commands.size(); if (i % max == 0) return i / max; double j = i / 8; int h = (int) Math.floor(j * 100) / 100; return h + 1; } @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] arguments) { if (!(sender instanceof Player) && !(sender instanceof ConsoleCommandSender)) { return false; } if (arguments == null || arguments.length == 0) { showHelp(sender, 1); return true; } if (arguments.length == 1 && MathUtils.isInteger(arguments[0])) { showHelp(sender, Math.max(1, Math.min(Integer.parseInt(arguments[0]), getMaxPages()))); return true; } for (SubCommand meCommand : commands) { if (meCommand.is(arguments[0])) { if (!sender.hasPermission(meCommand.getPermission())) { sender.sendMessage(MessageManager.getMessage("No-Permission")); return true; } if (sender instanceof Player) { meCommand.onExePlayer((Player) sender, arguments); } else { meCommand.onExeConsole((ConsoleCommandSender) sender, arguments); } return true; } } showHelp(sender, 1); return true; } public List<SubCommand> getCommands() { return commands; } public void registerCommands(UltraCosmetics ultraCosmetics) { registerCommand(new SubCommandGadgets(ultraCosmetics)); registerCommand(new SubCommandSelfView(ultraCosmetics)); registerCommand(new SubCommandMenu(ultraCosmetics)); registerCommand(new SubCommandGive(ultraCosmetics)); registerCommand(new SubCommandToggle(ultraCosmetics)); registerCommand(new SubCommandClear(ultraCosmetics)); registerCommand(new SubCommandTreasure(ultraCosmetics)); } }