001    package net.minecraft.command;
002    
003    import java.util.List;
004    import net.minecraft.entity.item.EntityItem;
005    import net.minecraft.entity.player.EntityPlayerMP;
006    import net.minecraft.item.Item;
007    import net.minecraft.item.ItemStack;
008    import net.minecraft.server.MinecraftServer;
009    
010    public 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 var3 = func_82359_c(par1ICommandSender, par2ArrayOfStr[0]);
035                int var4 = parseIntWithMin(par1ICommandSender, par2ArrayOfStr[1], 1);
036                int var5 = 1;
037                int var6 = 0;
038    
039                if (Item.itemsList[var4] == null)
040                {
041                    throw new NumberInvalidException("commands.give.notFound", new Object[] {Integer.valueOf(var4)});
042                }
043                else
044                {
045                    if (par2ArrayOfStr.length >= 3)
046                    {
047                        var5 = parseIntBounded(par1ICommandSender, par2ArrayOfStr[2], 1, 64);
048                    }
049    
050                    if (par2ArrayOfStr.length >= 4)
051                    {
052                        var6 = parseInt(par1ICommandSender, par2ArrayOfStr[3]);
053                    }
054    
055                    ItemStack var7 = new ItemStack(var4, var5, var6);
056                    EntityItem var8 = var3.dropPlayerItem(var7);
057                    var8.delayBeforeCanPickup = 0;
058                    notifyAdmins(par1ICommandSender, "commands.give.success", new Object[] {Item.itemsList[var4].func_77653_i(var7), Integer.valueOf(var4), Integer.valueOf(var5), var3.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(int par1)
084        {
085            return par1 == 0;
086        }
087    }