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 }