001package net.minecraft.command;
002
003import java.util.List;
004import net.minecraft.entity.item.EntityItem;
005import net.minecraft.entity.player.EntityPlayerMP;
006import net.minecraft.item.Item;
007import net.minecraft.item.ItemStack;
008import net.minecraft.server.MinecraftServer;
009
010public class CommandGive extends CommandBase
011{
012    public String getCommandName()
013    {
014        return "give";
015    }
016
017    /**
018     * Return the required permission level for this command.
019     */
020    public int getRequiredPermissionLevel()
021    {
022        return 2;
023    }
024
025    public String getCommandUsage(ICommandSender par1ICommandSender)
026    {
027        return par1ICommandSender.translateString("commands.give.usage", new Object[0]);
028    }
029
030    public void processCommand(ICommandSender par1ICommandSender, String[] par2ArrayOfStr)
031    {
032        if (par2ArrayOfStr.length >= 2)
033        {
034            EntityPlayerMP entityplayermp = func_82359_c(par1ICommandSender, par2ArrayOfStr[0]);
035            int i = parseIntWithMin(par1ICommandSender, par2ArrayOfStr[1], 1);
036            int j = 1;
037            int k = 0;
038
039            if (Item.itemsList[i] == null)
040            {
041                throw new NumberInvalidException("commands.give.notFound", new Object[] {Integer.valueOf(i)});
042            }
043            else
044            {
045                if (par2ArrayOfStr.length >= 3)
046                {
047                    j = parseIntBounded(par1ICommandSender, par2ArrayOfStr[2], 1, 64);
048                }
049
050                if (par2ArrayOfStr.length >= 4)
051                {
052                    k = parseInt(par1ICommandSender, par2ArrayOfStr[3]);
053                }
054
055                ItemStack itemstack = new ItemStack(i, j, k);
056                EntityItem entityitem = entityplayermp.dropPlayerItem(itemstack);
057                entityitem.delayBeforeCanPickup = 0;
058                notifyAdmins(par1ICommandSender, "commands.give.success", new Object[] {Item.itemsList[i].func_77653_i(itemstack), Integer.valueOf(i), Integer.valueOf(j), entityplayermp.getEntityName()});
059            }
060        }
061        else
062        {
063            throw new WrongUsageException("commands.give.usage", new Object[0]);
064        }
065    }
066
067    /**
068     * Adds the strings available in this command to the given list of tab completion options.
069     */
070    public List addTabCompletionOptions(ICommandSender par1ICommandSender, String[] par2ArrayOfStr)
071    {
072        return par2ArrayOfStr.length == 1 ? getListOfStringsMatchingLastWord(par2ArrayOfStr, this.getPlayers()) : null;
073    }
074
075    protected String[] getPlayers()
076    {
077        return MinecraftServer.getServer().getAllUsernames();
078    }
079
080    /**
081     * Return whether the specified command parameter index is a username parameter.
082     */
083    public boolean isUsernameIndex(String[] par1ArrayOfStr, int par2)
084    {
085        return par2 == 0;
086    }
087}