package org.buckit.commands; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.buckit.Config; import org.bukkit.ChatColor; import org.bukkit.Server; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; public class HelpCommand extends Command { private final Server server; public HelpCommand(String name, Server server) { super(name); this.description = "Gives information about the available commands."; this.usageMessage = "Usage: /help <page> or /help <command>"; this.accessname = "buckit.help"; this.setAliases(Arrays.asList("h")); this.server = server; } @Override public boolean execute(CommandSender sender, String currentAlias, String[] args) { int page = 0; String commandIn = ""; Map<String, Command> commandMapTemp = server.getCommands(); Map<String, Command> commandMap = new HashMap<String, Command>(); String name; for (Entry<String, Command> e : commandMapTemp.entrySet()) { name = e.getValue().getAccessName(); if (name!=null && (sender instanceof Player ? ((Player) sender).canUseCommand(name) : true) && e.getKey().equals(e.getValue().getName())) { commandMap.put(e.getValue().getName(), e.getValue()); } } if (args.length == 0) page = 1; else { try { page = Integer.parseInt(args[0]); } catch (NumberFormatException e) { commandIn = (args[0].startsWith("/")) ? args[0].substring(1) : args[0]; } } if (page == 0) { Command commandOut = null; if (commandMap.containsKey(commandIn)) { commandOut = commandMap.get(commandIn); } else { Collection<Command> commandColl = commandMap.values(); for (Command c : commandColl) { List<String> aliases = c.getAliases(); if (aliases.contains(commandIn)) { commandOut = c; break; } } } if (commandOut == null) { sender.sendMessage(Config.DEFAULT_ERROR_COLOR + "Unknown command: " + ChatColor.WHITE + "'" + commandIn + "'"); return true; } String aliasesString = ""; List<String> aliases = new ArrayList<String>(); aliases.addAll(commandOut.getAliases()); if (aliases.size() != 0) { for (String a : aliases) { aliasesString += ", " + a; } aliasesString = aliasesString.substring(2); } else { aliasesString = "none"; } sender.sendMessage(Config.DEFAULT_INFO_COLOR + "Info about command /" + commandOut.getName()); sender.sendMessage(Config.DEFAULT_INFO_COLOR + "- Aliases: " + aliasesString); sender.sendMessage(Config.DEFAULT_INFO_COLOR + "- Description: " + commandOut.getDescription()); sender.sendMessage(Config.DEFAULT_INFO_COLOR + "- Usage: " + commandOut.getUsage()); return true; } else { int commandTotal = commandMap.size(); int pages = ((int)Math.ceil(commandTotal/7)); if (page > pages) { sender.sendMessage(Config.DEFAULT_ERROR_COLOR + "Page does not exists. Last page is page "+pages); return true; } ArrayList<Command> cmds = new ArrayList<Command>(); cmds.addAll(commandMap.values()); sender.sendMessage(Config.DEFAULT_INFO_COLOR + "Page " + page + " of " + pages + ":"); int begin = 7*(page-1); int end = (commandTotal < 7*page) ? commandTotal : 7*page; for (int i=begin; i<end; i++) { Command commandOutTemp = cmds.get(i); sender.sendMessage(Config.DEFAULT_INFO_COLOR + "- /" + commandOutTemp.getName() + ": " + commandOutTemp.getDescription()); } sender.sendMessage(Config.DEFAULT_INFO_COLOR + "For more info about commands, type /help <command>"); return true; } } }