001package net.minecraft.command; 002 003import java.util.Arrays; 004import java.util.Collections; 005import java.util.List; 006import java.util.Map; 007import net.minecraft.entity.player.EntityPlayer; 008import net.minecraft.server.MinecraftServer; 009import net.minecraft.util.EnumChatFormatting; 010 011public class CommandHelp extends CommandBase 012{ 013 public String getCommandName() 014 { 015 return "help"; 016 } 017 018 /** 019 * Return the required permission level for this command. 020 */ 021 public int getRequiredPermissionLevel() 022 { 023 return 0; 024 } 025 026 public String getCommandUsage(ICommandSender par1ICommandSender) 027 { 028 return par1ICommandSender.translateString("commands.help.usage", new Object[0]); 029 } 030 031 public List getCommandAliases() 032 { 033 return Arrays.asList(new String[] {"?"}); 034 } 035 036 public void processCommand(ICommandSender par1ICommandSender, String[] par2ArrayOfStr) 037 { 038 List list = this.getSortedPossibleCommands(par1ICommandSender); 039 byte b0 = 7; 040 int i = (list.size() - 1) / b0; 041 boolean flag = false; 042 ICommand icommand; 043 int j; 044 045 try 046 { 047 j = par2ArrayOfStr.length == 0 ? 0 : parseIntBounded(par1ICommandSender, par2ArrayOfStr[0], 1, i + 1) - 1; 048 } 049 catch (NumberInvalidException numberinvalidexception) 050 { 051 Map map = this.getCommands(); 052 icommand = (ICommand)map.get(par2ArrayOfStr[0]); 053 054 if (icommand != null) 055 { 056 throw new WrongUsageException(icommand.getCommandUsage(par1ICommandSender), new Object[0]); 057 } 058 059 throw new CommandNotFoundException(); 060 } 061 062 int k = Math.min((j + 1) * b0, list.size()); 063 par1ICommandSender.sendChatToPlayer(EnumChatFormatting.DARK_GREEN + par1ICommandSender.translateString("commands.help.header", new Object[] {Integer.valueOf(j + 1), Integer.valueOf(i + 1)})); 064 065 for (int l = j * b0; l < k; ++l) 066 { 067 icommand = (ICommand)list.get(l); 068 par1ICommandSender.sendChatToPlayer(icommand.getCommandUsage(par1ICommandSender)); 069 } 070 071 if (j == 0 && par1ICommandSender instanceof EntityPlayer) 072 { 073 par1ICommandSender.sendChatToPlayer(EnumChatFormatting.GREEN + par1ICommandSender.translateString("commands.help.footer", new Object[0])); 074 } 075 } 076 077 /** 078 * Returns a sorted list of all possible commands for the given ICommandSender. 079 */ 080 protected List getSortedPossibleCommands(ICommandSender par1ICommandSender) 081 { 082 List list = MinecraftServer.getServer().getCommandManager().getPossibleCommands(par1ICommandSender); 083 Collections.sort(list); 084 return list; 085 } 086 087 protected Map getCommands() 088 { 089 return MinecraftServer.getServer().getCommandManager().getCommands(); 090 } 091}