001    package net.minecraft.command;
002    
003    import java.util.List;
004    import net.minecraft.enchantment.Enchantment;
005    import net.minecraft.entity.player.EntityPlayerMP;
006    import net.minecraft.item.ItemStack;
007    import net.minecraft.nbt.NBTTagCompound;
008    import net.minecraft.nbt.NBTTagList;
009    import net.minecraft.server.MinecraftServer;
010    
011    public 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_92037_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    }