From 517fafab4e2c5eb83e5d374f175140d5029a7af3 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Sun, 2 Dec 2012 02:20:05 +0000 Subject: Support new game modes Add gamemode to settings abstract --- .../src/net/ess3/commands/Commandgamemode.java | 125 +++++++++++++++------ .../ess3/commands/EssentialsSettingsCommand.java | 8 +- .../net/ess3/commands/EssentialsToggleCommand.java | 6 +- 3 files changed, 93 insertions(+), 46 deletions(-) diff --git a/Essentials/src/net/ess3/commands/Commandgamemode.java b/Essentials/src/net/ess3/commands/Commandgamemode.java index c38d0f3a3..f70d4c71d 100644 --- a/Essentials/src/net/ess3/commands/Commandgamemode.java +++ b/Essentials/src/net/ess3/commands/Commandgamemode.java @@ -8,57 +8,108 @@ import org.bukkit.GameMode; import org.bukkit.command.CommandSender; -public class Commandgamemode extends EssentialsCommand +public class Commandgamemode extends EssentialsSettingsCommand { - @Override - protected void run(final CommandSender sender, final String commandLabel, final String[] args) throws Exception + + protected void setValue(final IUser player, GameMode value) { - if (args.length < 1) - { - throw new NotEnoughArgumentsException(); + if (value == null) { + value = rotateGameMode(player); + } + player.getPlayer().setGameMode(value); + } + + protected GameMode getValue(final IUser player) + { + return player.getPlayer().getGameMode(); + } + + protected void informSender(final CommandSender sender, final boolean value, final IUser player) + { + if (value) { + sender.sendMessage( _("gameMode", getValue(player).toString().toLowerCase(Locale.ENGLISH), player.getPlayer().getDisplayName())); } + else { + //TODO: TL this + sender.sendMessage("Can't change game mode for player " + player.getName()); + } + } + + protected void informPlayer(final IUser player) + { + final String message = _("flyMode", getValue(player).toString().toLowerCase(Locale.ENGLISH), player.getPlayer().getDisplayName()); + player.sendMessage(message); + } - gamemodeOtherPlayers(sender, args); + protected boolean canToggleOthers(final IUser user) + { + return Permissions.GAMEMODE_OTHERS.isAuthorized(user); } - @Override - protected void run(final IUser user, final String commandLabel, final String[] args) throws Exception + protected boolean isExempt(final CommandSender sender, final IUser player) { - if (args.length > 0 && !args[0].trim().isEmpty() && Permissions.GAMEMODE_OTHERS.isAuthorized(user)) + return Permissions.GAMEMODE_EXEMPT.isAuthorized(player); + } + + protected boolean toggleOfflinePlayers() + { + return false; + } + + protected boolean canMatch(final String arg) + { + try { + matchGameMode(arg); + return true; + } + catch (NotEnoughArgumentsException ex) { + return false; + } + } + + protected void playerMatch(final IUser player, final String arg) throws NotEnoughArgumentsException + { + if (arg == null) { - gamemodeOtherPlayers(user, args); - return; + setValue(player, null); + } + else { + setValue(player, matchGameMode(arg)); } + } - user.getPlayer().setGameMode(user.getPlayer().getGameMode() == GameMode.SURVIVAL ? GameMode.CREATIVE : GameMode.SURVIVAL); - user.sendMessage(_("gameMode", _(user.getPlayer().getGameMode().toString().toLowerCase(Locale.ENGLISH)), user.getPlayer().getDisplayName())); + private GameMode rotateGameMode(final IUser player) { + return getValue(player) == GameMode.SURVIVAL ? GameMode.CREATIVE : getValue(player) == GameMode.CREATIVE ? GameMode.ADVENTURE : GameMode.SURVIVAL; } - private void gamemodeOtherPlayers(final CommandSender sender, final String args[]) + private GameMode matchGameMode(String modeString) throws NotEnoughArgumentsException { - for (IUser player : ess.getUserMap().matchUsersExcludingHidden(args[0], getPlayerOrNull(sender))) + GameMode mode = null; + if (modeString.equalsIgnoreCase("gmc") || modeString.equalsIgnoreCase("egmc") + || modeString.contains("creat") || modeString.equalsIgnoreCase("1") || modeString.equalsIgnoreCase("c")) { - if (Permissions.GAMEMODE_EXEMPT.isAuthorized(player)) - { - sender.sendMessage("Can't change gamemode for player " + player.getPlayer().getDisplayName()); //TODO: I18n - continue; - } - if (args.length > 1) - { - if (args[1].contains("creat") || args[1].equalsIgnoreCase("1")) - { - player.getPlayer().setGameMode(GameMode.CREATIVE); - } - else - { - player.getPlayer().setGameMode(GameMode.SURVIVAL); - } - } - else - { - player.getPlayer().setGameMode(player.getPlayer().getGameMode() == GameMode.SURVIVAL ? GameMode.CREATIVE : GameMode.SURVIVAL); - } - sender.sendMessage(_("gameMode", _(player.getPlayer().getGameMode().toString().toLowerCase(Locale.ENGLISH)), player.getPlayer().getDisplayName())); + 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; } + } diff --git a/Essentials/src/net/ess3/commands/EssentialsSettingsCommand.java b/Essentials/src/net/ess3/commands/EssentialsSettingsCommand.java index c239ebdd3..8439cea8d 100644 --- a/Essentials/src/net/ess3/commands/EssentialsSettingsCommand.java +++ b/Essentials/src/net/ess3/commands/EssentialsSettingsCommand.java @@ -34,12 +34,11 @@ public abstract class EssentialsSettingsCommand extends EssentialsCommand throw new UnsupportedOperationException("Not supported yet."); } - protected void playerMatch(final IUser player, final String arg) + protected void playerMatch(final IUser player, final String arg) throws NotEnoughArgumentsException { throw new UnsupportedOperationException("Not supported yet."); } - protected boolean toggleOfflinePlayers() { return true; @@ -83,11 +82,10 @@ public abstract class EssentialsSettingsCommand extends EssentialsCommand informPlayer(user); } - private void toggleOtherPlayers(final Server server, final CommandSender sender, final String[] args) + private void toggleOtherPlayers(final Server server, final CommandSender sender, final String[] args) throws NotEnoughArgumentsException { Set matches = toggleOfflinePlayers() ? ess.getUserMap().matchUsers(args[0], true) : ess.getUserMap().matchUsersExcludingHidden( - args[0], getPlayerOrNull( - sender)); + args[0], getPlayerOrNull(sender)); for (IUser matchPlayer : matches) { diff --git a/Essentials/src/net/ess3/commands/EssentialsToggleCommand.java b/Essentials/src/net/ess3/commands/EssentialsToggleCommand.java index 89f84d000..eeac61103 100644 --- a/Essentials/src/net/ess3/commands/EssentialsToggleCommand.java +++ b/Essentials/src/net/ess3/commands/EssentialsToggleCommand.java @@ -1,8 +1,5 @@ package net.ess3.commands; -import java.util.Set; -import org.bukkit.Server; -import org.bukkit.command.CommandSender; import net.ess3.api.IUser; @@ -38,7 +35,8 @@ public abstract class EssentialsToggleCommand extends EssentialsSettingsCommand { setValue(player, !getValue(player)); } - else { + else + { if (arg.contains("on") || arg.contains("ena") || arg.equalsIgnoreCase("1")) { setValue(player, true); -- cgit v1.2.3