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