    001package net.minecraft.command;
    002
    003import java.util.List;
    004import net.minecraft.enchantment.Enchantment;
    005import net.minecraft.entity.player.EntityPlayerMP;
    006import net.minecraft.item.ItemStack;
    007import net.minecraft.nbt.NBTTagCompound;
    008import net.minecraft.nbt.NBTTagList;
    009import net.minecraft.server.MinecraftServer;
    010
    011public class CommandEnchant extends CommandBase
    012{
    013    public String getCommandName()
    014    {
    015        return "enchant";
    016    }
    017
    018    /**
    019     * Return the required permission level for this command.
    020     */
    021    public int getRequiredPermissionLevel()
    022    {
    023        return 2;
    024    }
    025
    026    public String getCommandUsage(ICommandSender par1ICommandSender)
    027    {
    028        return par1ICommandSender.translateString("commands.enchant.usage", new Object[0]);
    029    }
    030
    031    public void processCommand(ICommandSender par1ICommandSender, String[] par2ArrayOfStr)
    032    {
    033        if (par2ArrayOfStr.length < 2)
    034        {
    035            throw new WrongUsageException("commands.enchant.usage", new Object[0]);
    036        }
    037        else
    038        {
    039            EntityPlayerMP var3 = func_82359_c(par1ICommandSender, par2ArrayOfStr[0]);
    040            int var4 = parseIntBounded(par1ICommandSender, par2ArrayOfStr[1], 0, Enchantment.enchantmentsList.length - 1);
    041            int var5 = 1;
    042            ItemStack var6 = var3.getCurrentEquippedItem();
    043
    044            if (var6 == null)
    045            {
    046                notifyAdmins(par1ICommandSender, "commands.enchant.noItem", new Object[0]);
    047            }
    048            else
    049            {
    050                Enchantment var7 = Enchantment.enchantmentsList[var4];
    051
    052                if (var7 == null)
    053                {
    054                    throw new NumberInvalidException("commands.enchant.notFound", new Object[] {Integer.valueOf(var4)});
    055                }
    056                else if (!var7.func_92089_a(var6))
    057                {
    058                    notifyAdmins(par1ICommandSender, "commands.enchant.cantEnchant", new Object[0]);
    059                }
    060                else
    061                {
    062                    if (par2ArrayOfStr.length >= 3)
    063                    {
    064                        var5 = parseIntBounded(par1ICommandSender, par2ArrayOfStr[2], var7.getMinLevel(), var7.getMaxLevel());
    065                    }
    066
    067                    if (var6.hasTagCompound())
    068                    {
    069                        NBTTagList var8 = var6.getEnchantmentTagList();
    070
    071                        if (var8 != null)
    072                        {
    073                            for (int var9 = 0; var9 < var8.tagCount(); ++var9)
    074                            {
    075                                short var10 = ((NBTTagCompound)var8.tagAt(var9)).getShort("id");
    076
    077                                if (Enchantment.enchantmentsList[var10] != null)
    078                                {
    079                                    Enchantment var11 = Enchantment.enchantmentsList[var10];
    080
    081                                    if (!var11.canApplyTogether(var7))
    082                                    {
    083                                        notifyAdmins(par1ICommandSender, "commands.enchant.cantCombine", new Object[] {var7.getTranslatedName(var5), var11.getTranslatedName(((NBTTagCompound)var8.tagAt(var9)).getShort("lvl"))});
    084                                        return;
    085                                    }
    086                                }
    087                            }
    088                        }
    089                    }
    090
    091                    var6.addEnchantment(var7, var5);
    092                    notifyAdmins(par1ICommandSender, "commands.enchant.success", new Object[0]);
    093                }
    094            }
    095        }
    096    }
    097
    098    /**
    099     * Adds the strings available in this command to the given list of tab completion options.
    100     */
    101    public List addTabCompletionOptions(ICommandSender par1ICommandSender, String[] par2ArrayOfStr)
    102    {
    103        return par2ArrayOfStr.length == 1 ? getListOfStringsMatchingLastWord(par2ArrayOfStr, this.getListOfPlayers()) : null;
    104    }
    105
    106    protected String[] getListOfPlayers()
    107    {
    108        return MinecraftServer.getServer().getAllUsernames();
    109    }
    110
    111    /**
    112     * Return whether the specified command parameter index is a username parameter.
    113     */
    114    public boolean isUsernameIndex(int par1)
    115    {
    116        return par1 == 0;
    117    }
    118}