package com.earth2me.essentials.commands; import static com.earth2me.essentials.I18n._; import com.earth2me.essentials.User; import java.util.Locale; import org.bukkit.GameMode; import org.bukkit.Server; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; public class Commandgamemode extends EssentialsCommand { public Commandgamemode() { super("gamemode"); } @Override protected void run(final Server server, final CommandSender sender, final String commandLabel, final String[] args) throws Exception { GameMode gameMode; if (args.length == 0) { throw new NotEnoughArgumentsException(); } else if (args.length == 1) { gameMode = matchGameMode(commandLabel); gamemodeOtherPlayers(server, sender, gameMode, args[0]); } else if (args.length == 2) { gameMode = matchGameMode(args[0].toLowerCase(Locale.ENGLISH)); gamemodeOtherPlayers(server, sender, gameMode, args[1]); } } @Override protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { GameMode gameMode; if (args.length == 0) { gameMode = matchGameMode(commandLabel); } else if (args.length > 1 && args[1].trim().length() > 2 && user.isAuthorized("essentials.gamemode.others")) { gameMode = matchGameMode(args[0].toLowerCase(Locale.ENGLISH)); gamemodeOtherPlayers(server, user, gameMode, args[1]); return; } else { try { gameMode = matchGameMode(args[0].toLowerCase(Locale.ENGLISH)); } catch (NotEnoughArgumentsException e) { if (user.isAuthorized("essentials.gamemode.others")) { gameMode = matchGameMode(commandLabel); gamemodeOtherPlayers(server, user, gameMode, args[0]); return; } throw new NotEnoughArgumentsException(); } } if (gameMode == null) { gameMode = user.getGameMode() == GameMode.SURVIVAL ? GameMode.CREATIVE : user.getGameMode() == GameMode.CREATIVE ? GameMode.ADVENTURE : GameMode.SURVIVAL; } user.setGameMode(gameMode); user.sendMessage(_("gameMode", _(user.getGameMode().toString().toLowerCase(Locale.ENGLISH)), user.getDisplayName())); } private void gamemodeOtherPlayers(final Server server, final CommandSender sender, final GameMode gameMode, final String player) throws NotEnoughArgumentsException { //TODO: TL this if (player.trim().length() < 2 || gameMode == null) { throw new NotEnoughArgumentsException("You need to specify a valid player/mode."); } boolean foundUser = false; for (Player matchPlayer : server.matchPlayer(player)) { final User user = ess.getUser(matchPlayer); if (user.isHidden()) { continue; } user.setGameMode(gameMode); sender.sendMessage(_("gameMode", _(user.getGameMode().toString().toLowerCase(Locale.ENGLISH)), user.getDisplayName())); foundUser = true; } if (!foundUser) { throw new NotEnoughArgumentsException(_("playerNotFound")); } } private GameMode matchGameMode(String modeString) throws NotEnoughArgumentsException { GameMode mode = null; if (modeString.equalsIgnoreCase("gmc") || modeString.equalsIgnoreCase("egmc") || modeString.contains("creat") || modeString.equalsIgnoreCase("1") || modeString.equalsIgnoreCase("c")) { mode = GameMode.CREATIVE; } else if (modeString.equalsIgnoreCase("gms") || modeString.equalsIgnoreCase("egms") || modeString.contains("survi") || modeString.equalsIgnoreCase("0") || modeString.equalsIgnoreCase("s")) { mode = GameMode.SURVIVAL; } else if (modeString.equalsIgnoreCase("gma") || modeString.equalsIgnoreCase("egma") || modeString.contains("advent") || modeString.equalsIgnoreCase("2") || modeString.equalsIgnoreCase("a")) { mode = GameMode.ADVENTURE; } else if (modeString.equalsIgnoreCase("gmt") || modeString.equalsIgnoreCase("egmt") || modeString.contains("toggle") || modeString.contains("cycle") || modeString.equalsIgnoreCase("t")) { mode = null; } else { throw new NotEnoughArgumentsException(); } return mode; } }