001    package net.minecraft.command;
002    
003    import java.util.List;
004    import net.minecraft.entity.player.EntityPlayerMP;
005    import net.minecraft.server.MinecraftServer;
006    
007    public class CommandXP extends CommandBase
008    {
009        public String getCommandName()
010        {
011            return "xp";
012        }
013    
014        /**
015         * Return the required permission level for this command.
016         */
017        public int getRequiredPermissionLevel()
018        {
019            return 2;
020        }
021    
022        public String getCommandUsage(ICommandSender par1ICommandSender)
023        {
024            return par1ICommandSender.translateString("commands.xp.usage", new Object[0]);
025        }
026    
027        public void processCommand(ICommandSender par1ICommandSender, String[] par2ArrayOfStr)
028        {
029            if (par2ArrayOfStr.length <= 0)
030            {
031                throw new WrongUsageException("commands.xp.usage", new Object[0]);
032            }
033            else
034            {
035                String var4 = par2ArrayOfStr[0];
036                boolean var5 = var4.endsWith("l") || var4.endsWith("L");
037    
038                if (var5 && var4.length() > 1)
039                {
040                    var4 = var4.substring(0, var4.length() - 1);
041                }
042    
043                int var6 = parseInt(par1ICommandSender, var4);
044                boolean var7 = var6 < 0;
045    
046                if (var7)
047                {
048                    var6 *= -1;
049                }
050    
051                EntityPlayerMP var3;
052    
053                if (par2ArrayOfStr.length > 1)
054                {
055                    var3 = func_82359_c(par1ICommandSender, par2ArrayOfStr[1]);
056                }
057                else
058                {
059                    var3 = getCommandSenderAsPlayer(par1ICommandSender);
060                }
061    
062                if (var5)
063                {
064                    if (var7)
065                    {
066                        var3.addExperienceLevel(-var6);
067                        notifyAdmins(par1ICommandSender, "commands.xp.success.negative.levels", new Object[] {Integer.valueOf(var6), var3.getEntityName()});
068                    }
069                    else
070                    {
071                        var3.addExperienceLevel(var6);
072                        notifyAdmins(par1ICommandSender, "commands.xp.success.levels", new Object[] {Integer.valueOf(var6), var3.getEntityName()});
073                    }
074                }
075                else
076                {
077                    if (var7)
078                    {
079                        throw new WrongUsageException("commands.xp.failure.widthdrawXp", new Object[0]);
080                    }
081    
082                    var3.addExperience(var6);
083                    notifyAdmins(par1ICommandSender, "commands.xp.success", new Object[] {Integer.valueOf(var6), var3.getEntityName()});
084                }
085            }
086        }
087    
088        /**
089         * Adds the strings available in this command to the given list of tab completion options.
090         */
091        public List addTabCompletionOptions(ICommandSender par1ICommandSender, String[] par2ArrayOfStr)
092        {
093            return par2ArrayOfStr.length == 2 ? getListOfStringsMatchingLastWord(par2ArrayOfStr, this.getAllUsernames()) : null;
094        }
095    
096        protected String[] getAllUsernames()
097        {
098            return MinecraftServer.getServer().getAllUsernames();
099        }
100    
101        /**
102         * Return whether the specified command parameter index is a username parameter.
103         */
104        public boolean isUsernameIndex(int par1)
105        {
106            return par1 == 1;
107        }
108    }