001package net.minecraft.command;
002
003import java.util.List;
004import net.minecraft.entity.player.EntityPlayerMP;
005import net.minecraft.potion.Potion;
006import net.minecraft.potion.PotionEffect;
007import net.minecraft.server.MinecraftServer;
008import net.minecraft.util.StatCollector;
009
010public class CommandEffect extends CommandBase
011{
012    public String getCommandName()
013    {
014        return "effect";
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.effect.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 = 600;
037            int k = 30;
038            int l = 0;
039
040            if (i >= 0 && i < Potion.potionTypes.length && Potion.potionTypes[i] != null)
041            {
042                if (par2ArrayOfStr.length >= 3)
043                {
044                    k = parseIntBounded(par1ICommandSender, par2ArrayOfStr[2], 0, 1000000);
045
046                    if (Potion.potionTypes[i].isInstant())
047                    {
048                        j = k;
049                    }
050                    else
051                    {
052                        j = k * 20;
053                    }
054                }
055                else if (Potion.potionTypes[i].isInstant())
056                {
057                    j = 1;
058                }
059
060                if (par2ArrayOfStr.length >= 4)
061                {
062                    l = parseIntBounded(par1ICommandSender, par2ArrayOfStr[3], 0, 255);
063                }
064
065                if (k == 0)
066                {
067                    if (!entityplayermp.isPotionActive(i))
068                    {
069                        throw new CommandException("commands.effect.failure.notActive", new Object[] {StatCollector.translateToLocal(Potion.potionTypes[i].getName()), entityplayermp.getEntityName()});
070                    }
071
072                    entityplayermp.removePotionEffect(i);
073                    notifyAdmins(par1ICommandSender, "commands.effect.success.removed", new Object[] {StatCollector.translateToLocal(Potion.potionTypes[i].getName()), entityplayermp.getEntityName()});
074                }
075                else
076                {
077                    PotionEffect potioneffect = new PotionEffect(i, j, l);
078                    entityplayermp.addPotionEffect(potioneffect);
079                    notifyAdmins(par1ICommandSender, "commands.effect.success", new Object[] {StatCollector.translateToLocal(potioneffect.getEffectName()), Integer.valueOf(i), Integer.valueOf(l), entityplayermp.getEntityName(), Integer.valueOf(k)});
080                }
081            }
082            else
083            {
084                throw new NumberInvalidException("commands.effect.notFound", new Object[] {Integer.valueOf(i)});
085            }
086        }
087        else
088        {
089            throw new WrongUsageException("commands.effect.usage", new Object[0]);
090        }
091    }
092
093    /**
094     * Adds the strings available in this command to the given list of tab completion options.
095     */
096    public List addTabCompletionOptions(ICommandSender par1ICommandSender, String[] par2ArrayOfStr)
097    {
098        return par2ArrayOfStr.length == 1 ? getListOfStringsMatchingLastWord(par2ArrayOfStr, this.func_98152_d()) : null;
099    }
100
101    protected String[] func_98152_d()
102    {
103        return MinecraftServer.getServer().getAllUsernames();
104    }
105
106    /**
107     * Return whether the specified command parameter index is a username parameter.
108     */
109    public boolean isUsernameIndex(String[] par1ArrayOfStr, int par2)
110    {
111        return par2 == 0;
112    }
113}