package net.minecraft.command;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.server.MinecraftServer;
public abstract class CommandBase implements ICommand
{
private static IAdminCommand theAdmin = null;
/**
* Return the required permission level for this command.
*/
public int getRequiredPermissionLevel()
{
return 4;
}
public String getCommandUsage(ICommandSender par1ICommandSender)
{
return "/" + this.getCommandName();
}
public List getCommandAliases()
{
return null;
}
/**
* Returns true if the given command sender is allowed to use this command.
*/
public boolean canCommandSenderUseCommand(ICommandSender par1ICommandSender)
{
return par1ICommandSender.canCommandSenderUseCommand(this.getRequiredPermissionLevel(), this.getCommandName());
}
/**
* Adds the strings available in this command to the given list of tab completion options.
*/
public List addTabCompletionOptions(ICommandSender par1ICommandSender, String[] par2ArrayOfStr)
{
return null;
}
/**
* Parses an int from the given string.
*/
public static int parseInt(ICommandSender par0ICommandSender, String par1Str)
{
try
{
return Integer.parseInt(par1Str);
}
catch (NumberFormatException numberformatexception)
{
throw new NumberInvalidException("commands.generic.num.invalid", new Object[] {par1Str});
}
}
/**
* Parses an int from the given sring with a specified minimum.
*/
public static int parseIntWithMin(ICommandSender par0ICommandSender, String par1Str, int par2)
{
return parseIntBounded(par0ICommandSender, par1Str, par2, Integer.MAX_VALUE);
}
/**
* Parses an int from the given string within a specified bound.
*/
public static int parseIntBounded(ICommandSender par0ICommandSender, String par1Str, int par2, int par3)
{
int k = parseInt(par0ICommandSender, par1Str);
if (k < par2)
{
throw new NumberInvalidException("commands.generic.num.tooSmall", new Object[] {Integer.valueOf(k), Integer.valueOf(par2)});
}
else if (k > par3)
{
throw new NumberInvalidException("commands.generic.num.tooBig", new Object[] {Integer.valueOf(k), Integer.valueOf(par3)});
}
else
{
return k;
}
}
/**
* Parses a double from the given string or throws an exception if it's not a double.
*/
public static double parseDouble(ICommandSender par0ICommandSender, String par1Str)
{
try
{
return Double.parseDouble(par1Str);
}
catch (NumberFormatException numberformatexception)
{
throw new NumberInvalidException("commands.generic.double.invalid", new Object[] {par1Str});
}
}
/**
* Returns the given ICommandSender as a EntityPlayer or throw an exception.
*/
public static EntityPlayerMP getCommandSenderAsPlayer(ICommandSender par0ICommandSender)
{
if (par0ICommandSender instanceof EntityPlayerMP)
{
return (EntityPlayerMP)par0ICommandSender;
}
else
{
throw new PlayerNotFoundException("You must specify which player you wish to perform this action on.", new Object[0]);
}
}
public static EntityPlayerMP func_82359_c(ICommandSender par0ICommandSender, String par1Str)
{
EntityPlayerMP entityplayermp = PlayerSelector.matchOnePlayer(par0ICommandSender, par1Str);
if (entityplayermp != null)
{
return entityplayermp;
}
else
{
entityplayermp = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(par1Str);
if (entityplayermp == null)
{
throw new PlayerNotFoundException();
}
else
{
return entityplayermp;
}
}
}
public static String func_96332_d(ICommandSender par0ICommandSender, String par1Str)
{
EntityPlayerMP entityplayermp = PlayerSelector.matchOnePlayer(par0ICommandSender, par1Str);
if (entityplayermp != null)
{
return entityplayermp.getEntityName();
}
else if (PlayerSelector.hasArguments(par1Str))
{
throw new PlayerNotFoundException();
}
else
{
return par1Str;
}
}
public static String func_82360_a(ICommandSender par0ICommandSender, String[] par1ArrayOfStr, int par2)
{
return func_82361_a(par0ICommandSender, par1ArrayOfStr, par2, false);
}
public static String func_82361_a(ICommandSender par0ICommandSender, String[] par1ArrayOfStr, int par2, boolean par3)
{
StringBuilder stringbuilder = new StringBuilder();
for (int j = par2; j < par1ArrayOfStr.length; ++j)
{
if (j > par2)
{
stringbuilder.append(" ");
}
String s = par1ArrayOfStr[j];
if (par3)
{
String s1 = PlayerSelector.matchPlayersAsString(par0ICommandSender, s);
if (s1 != null)
{
s = s1;
}
else if (PlayerSelector.hasArguments(s))
{
throw new PlayerNotFoundException();
}
}
stringbuilder.append(s);
}
return stringbuilder.toString();
}
/**
* Joins the given string array into a "x, y, and z" seperated string.
*/
public static String joinNiceString(Object[] par0ArrayOfObj)
{
StringBuilder stringbuilder = new StringBuilder();
for (int i = 0; i < par0ArrayOfObj.length; ++i)
{
String s = par0ArrayOfObj[i].toString();
if (i > 0)
{
if (i == par0ArrayOfObj.length - 1)
{
stringbuilder.append(" and ");
}
else
{
stringbuilder.append(", ");
}
}
stringbuilder.append(s);
}
return stringbuilder.toString();
}
public static String func_96333_a(Collection par0Collection)
{
return joinNiceString(par0Collection.toArray(new String[0]));
}
/**
* Returns true if the given substring is exactly equal to the start of the given string (case insensitive).
*/
public static boolean doesStringStartWith(String par0Str, String par1Str)
{
return par1Str.regionMatches(true, 0, par0Str, 0, par0Str.length());
}
/**
* Returns a List of strings (chosen from the given strings) which the last word in the given string array is a
* beginning-match for. (Tab completion).
*/
public static List getListOfStringsMatchingLastWord(String[] par0ArrayOfStr, String ... par1ArrayOfStr)
{
String s1 = par0ArrayOfStr[par0ArrayOfStr.length - 1];
ArrayList arraylist = new ArrayList();
String[] astring1 = par1ArrayOfStr;
int i = par1ArrayOfStr.length;
for (int j = 0; j < i; ++j)
{
String s2 = astring1[j];
if (doesStringStartWith(s1, s2))
{
arraylist.add(s2);
}
}
return arraylist;
}
/**
* Returns a List of strings (chosen from the given string iterable) which the last word in the given string array
* is a beginning-match for. (Tab completion).
*/
public static List getListOfStringsFromIterableMatchingLastWord(String[] par0ArrayOfStr, Iterable par1Iterable)
{
String s = par0ArrayOfStr[par0ArrayOfStr.length - 1];
ArrayList arraylist = new ArrayList();
Iterator iterator = par1Iterable.iterator();
while (iterator.hasNext())
{
String s1 = (String)iterator.next();
if (doesStringStartWith(s, s1))
{
arraylist.add(s1);
}
}
return arraylist;
}
/**
* Return whether the specified command parameter index is a username parameter.
*/
public boolean isUsernameIndex(String[] par1ArrayOfStr, int par2)
{
return false;
}
public static void notifyAdmins(ICommandSender par0ICommandSender, String par1Str, Object ... par2ArrayOfObj)
{
notifyAdmins(par0ICommandSender, 0, par1Str, par2ArrayOfObj);
}
public static void notifyAdmins(ICommandSender par0ICommandSender, int par1, String par2Str, Object ... par3ArrayOfObj)
{
if (theAdmin != null)
{
theAdmin.notifyAdmins(par0ICommandSender, par1, par2Str, par3ArrayOfObj);
}
}
/**
* Sets the static IAdminCommander.
*/
public static void setAdminCommander(IAdminCommand par0IAdminCommand)
{
theAdmin = par0IAdminCommand;
}
/**
* Compares the name of this command to the name of the given command.
*/
public int compareTo(ICommand par1ICommand)
{
return this.getCommandName().compareTo(par1ICommand.getCommandName());
}
public int compareTo(Object par1Obj)
{
return this.compareTo((ICommand)par1Obj);
}
}