001 package net.minecraft.command;
002
003 import java.util.List;
004 import net.minecraft.entity.player.EntityPlayerMP;
005 import net.minecraft.server.MinecraftServer;
006 import net.minecraft.util.StatCollector;
007 import net.minecraft.world.EnumGameType;
008 import net.minecraft.world.WorldSettings;
009
010 public class CommandGameMode extends CommandBase
011 {
012 public String getCommandName()
013 {
014 return "gamemode";
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.gamemode.usage", new Object[0]);
028 }
029
030 public void processCommand(ICommandSender par1ICommandSender, String[] par2ArrayOfStr)
031 {
032 if (par2ArrayOfStr.length > 0)
033 {
034 EnumGameType var3 = this.getGameModeFromCommand(par1ICommandSender, par2ArrayOfStr[0]);
035 EntityPlayerMP var4 = par2ArrayOfStr.length >= 2 ? func_82359_c(par1ICommandSender, par2ArrayOfStr[1]) : getCommandSenderAsPlayer(par1ICommandSender);
036 var4.setGameType(var3);
037 var4.fallDistance = 0.0F;
038 String var5 = StatCollector.translateToLocal("gameMode." + var3.getName());
039
040 if (var4 != par1ICommandSender)
041 {
042 notifyAdmins(par1ICommandSender, 1, "commands.gamemode.success.other", new Object[] {var4.getEntityName(), var5});
043 }
044 else
045 {
046 notifyAdmins(par1ICommandSender, 1, "commands.gamemode.success.self", new Object[] {var5});
047 }
048 }
049 else
050 {
051 throw new WrongUsageException("commands.gamemode.usage", new Object[0]);
052 }
053 }
054
055 /**
056 * Gets the Game Mode specified in the command.
057 */
058 protected EnumGameType getGameModeFromCommand(ICommandSender par1ICommandSender, String par2Str)
059 {
060 return !par2Str.equalsIgnoreCase(EnumGameType.SURVIVAL.getName()) && !par2Str.equalsIgnoreCase("s") ? (!par2Str.equalsIgnoreCase(EnumGameType.CREATIVE.getName()) && !par2Str.equalsIgnoreCase("c") ? (!par2Str.equalsIgnoreCase(EnumGameType.ADVENTURE.getName()) && !par2Str.equalsIgnoreCase("a") ? WorldSettings.getGameTypeById(parseIntBounded(par1ICommandSender, par2Str, 0, EnumGameType.values().length - 2)) : EnumGameType.ADVENTURE) : EnumGameType.CREATIVE) : EnumGameType.SURVIVAL;
061 }
062
063 /**
064 * Adds the strings available in this command to the given list of tab completion options.
065 */
066 public List addTabCompletionOptions(ICommandSender par1ICommandSender, String[] par2ArrayOfStr)
067 {
068 return par2ArrayOfStr.length == 1 ? getListOfStringsMatchingLastWord(par2ArrayOfStr, new String[] {"survival", "creative", "adventure"}): (par2ArrayOfStr.length == 2 ? getListOfStringsMatchingLastWord(par2ArrayOfStr, this.getListOfPlayerUsernames()) : null);
069 }
070
071 /**
072 * Returns String array containing all player usernames in the server.
073 */
074 protected String[] getListOfPlayerUsernames()
075 {
076 return MinecraftServer.getServer().getAllUsernames();
077 }
078
079 /**
080 * Return whether the specified command parameter index is a username parameter.
081 */
082 public boolean isUsernameIndex(int par1)
083 {
084 return par1 == 1;
085 }
086 }