package net.minecraft.command;

import java.util.List;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.server.MinecraftServer;

public class CommandEnchant extends CommandBase
{
	private static final String __OBFID = "CL_00000377";

	public String getCommandName()
	{
		return "enchant";
	}

	public int getRequiredPermissionLevel()
	{
		return 2;
	}

	public String getCommandUsage(ICommandSender par1ICommandSender)
	{
		return "commands.enchant.usage";
	}

	public void processCommand(ICommandSender par1ICommandSender, String[] par2ArrayOfStr)
	{
		if (par2ArrayOfStr.length < 2)
		{
			throw new WrongUsageException("commands.enchant.usage", new Object[0]);
		}
		else
		{
			EntityPlayerMP entityplayermp = getPlayer(par1ICommandSender, par2ArrayOfStr[0]);
			int i = parseIntBounded(par1ICommandSender, par2ArrayOfStr[1], 0, Enchantment.enchantmentsList.length - 1);
			int j = 1;
			ItemStack itemstack = entityplayermp.getCurrentEquippedItem();

			if (itemstack == null)
			{
				throw new CommandException("commands.enchant.noItem", new Object[0]);
			}
			else
			{
				Enchantment enchantment = Enchantment.enchantmentsList[i];

				if (enchantment == null)
				{
					throw new NumberInvalidException("commands.enchant.notFound", new Object[] {Integer.valueOf(i)});
				}
				else if (!enchantment.canApply(itemstack))
				{
					throw new CommandException("commands.enchant.cantEnchant", new Object[0]);
				}
				else
				{
					if (par2ArrayOfStr.length >= 3)
					{
						j = parseIntBounded(par1ICommandSender, par2ArrayOfStr[2], enchantment.getMinLevel(), enchantment.getMaxLevel());
					}

					if (itemstack.hasTagCompound())
					{
						NBTTagList nbttaglist = itemstack.getEnchantmentTagList();

						if (nbttaglist != null)
						{
							for (int k = 0; k < nbttaglist.tagCount(); ++k)
							{
								short short1 = nbttaglist.getCompoundTagAt(k).getShort("id");

								if (Enchantment.enchantmentsList[short1] != null)
								{
									Enchantment enchantment1 = Enchantment.enchantmentsList[short1];

									if (!enchantment1.canApplyTogether(enchantment))
									{
										throw new CommandException("commands.enchant.cantCombine", new Object[] {enchantment.getTranslatedName(j), enchantment1.getTranslatedName(nbttaglist.getCompoundTagAt(k).getShort("lvl"))});
									}
								}
							}
						}
					}

					itemstack.addEnchantment(enchantment, j);
					notifyAdmins(par1ICommandSender, "commands.enchant.success", new Object[0]);
				}
			}
		}
	}

	public List addTabCompletionOptions(ICommandSender par1ICommandSender, String[] par2ArrayOfStr)
	{
		return par2ArrayOfStr.length == 1 ? getListOfStringsMatchingLastWord(par2ArrayOfStr, this.getListOfPlayers()) : null;
	}

	protected String[] getListOfPlayers()
	{
		return MinecraftServer.getServer().getAllUsernames();
	}

	public boolean isUsernameIndex(String[] par1ArrayOfStr, int par2)
	{
		return par2 == 0;
	}
}