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