Browse Source

Abstract the Chat commands.

GJ 12 years ago
parent
commit
4f45431dd3

+ 8 - 0
src/main/java/com/gmail/nossr50/chat/ChatManager.java

@@ -40,6 +40,10 @@ public final class ChatManager {
         mcMMO.p.getLogger().info("[A]<" + displayName + "> " + adminMessage);
         mcMMO.p.getLogger().info("[A]<" + displayName + "> " + adminMessage);
     }
     }
 
 
+    public static void handleAdminChat(Plugin plugin, String senderName, String message) {
+        handleAdminChat(plugin, senderName, senderName, message);
+    }
+
     public static void handlePartyChat(Plugin plugin, Party party, String playerName, String displayName, String message) {
     public static void handlePartyChat(Plugin plugin, Party party, String playerName, String displayName, String message) {
         String partyName = party.getName();
         String partyName = party.getName();
 
 
@@ -64,4 +68,8 @@ public final class ChatManager {
         displayName = ChatColor.stripColor(displayName);
         displayName = ChatColor.stripColor(displayName);
         mcMMO.p.getLogger().info("[P](" + partyName + ")" + "<" + displayName + "> " + partyMessage);
         mcMMO.p.getLogger().info("[P](" + partyName + ")" + "<" + displayName + "> " + partyMessage);
     }
     }
+
+    public static void handlePartyChat(Plugin plugin, Party party, String senderName, String message) {
+        handlePartyChat(plugin, party, senderName, senderName, message);
+    }
 }
 }

+ 70 - 0
src/main/java/com/gmail/nossr50/chat/ChatMode.java

@@ -0,0 +1,70 @@
+package com.gmail.nossr50.chat;
+
+import com.gmail.nossr50.datatypes.McMMOPlayer;
+import com.gmail.nossr50.locale.LocaleLoader;
+
+public enum ChatMode {
+    ADMIN(LocaleLoader.getString("Commands.AdminChat.On"), LocaleLoader.getString("Commands.AdminChat.Off")),
+    PARTY(LocaleLoader.getString("Commands.Party.Chat.On"), LocaleLoader.getString("Commands.Party.Chat.Off"));
+
+    private String enabledMessage;
+    private String disabledMessage;
+
+    private ChatMode (String enabledMessage, String disabledMessage) {
+        this.enabledMessage = enabledMessage;
+        this.disabledMessage = disabledMessage;
+    }
+
+    public boolean isEnabled(McMMOPlayer mcMMOPlayer) {
+        switch (this) {
+        case ADMIN:
+            return mcMMOPlayer.getAdminChatMode();
+
+        case PARTY:
+            return mcMMOPlayer.getPartyChatMode();
+
+        default:
+            return false;
+        }
+    }
+
+    public void disable(McMMOPlayer mcMMOPlayer) {
+        switch (this) {
+        case ADMIN:
+            mcMMOPlayer.setAdminChat(false);
+            return;
+
+        case PARTY:
+            mcMMOPlayer.setPartyChat(false);
+            return;
+
+        default:
+            return;
+        }
+    }
+
+    public void enable(McMMOPlayer mcMMOPlayer) {
+        switch (this) {
+        case ADMIN:
+            mcMMOPlayer.setAdminChat(true);
+            mcMMOPlayer.setPartyChat(false);
+            return;
+
+        case PARTY:
+            mcMMOPlayer.setPartyChat(true);
+            mcMMOPlayer.setAdminChat(false);
+            return;
+
+        default:
+            return;
+        }
+    }
+
+    public String getEnabledMessage() {
+        return enabledMessage;
+    }
+
+    public String getDisabledMessage() {
+        return disabledMessage;
+    }
+}

+ 14 - 73
src/main/java/com/gmail/nossr50/chat/commands/AdminChatCommand.java

@@ -1,87 +1,28 @@
 package com.gmail.nossr50.chat.commands;
 package com.gmail.nossr50.chat.commands;
 
 
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
 import org.bukkit.command.CommandSender;
 import org.bukkit.command.CommandSender;
 import org.bukkit.entity.Player;
 import org.bukkit.entity.Player;
 
 
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.chat.ChatManager;
 import com.gmail.nossr50.chat.ChatManager;
-import com.gmail.nossr50.datatypes.McMMOPlayer;
+import com.gmail.nossr50.chat.ChatMode;
 import com.gmail.nossr50.locale.LocaleLoader;
 import com.gmail.nossr50.locale.LocaleLoader;
-import com.gmail.nossr50.util.Users;
 
 
-public class AdminChatCommand implements CommandExecutor {
-    @Override
-    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-        McMMOPlayer mcMMOPlayer;
-
-        switch (args.length) {
-        case 0:
-            if (!(sender instanceof Player)) {
-                return false;
-            }
-
-            mcMMOPlayer = Users.getPlayer((Player) sender);
-
-            // Can't have both party & admin chat at the same time.
-            if (mcMMOPlayer.getPartyChatMode()) {
-                mcMMOPlayer.togglePartyChat();
-            }
-
-            mcMMOPlayer.toggleAdminChat();
-
-            if (mcMMOPlayer.getAdminChatMode()) {
-                sender.sendMessage(LocaleLoader.getString("Commands.AdminChat.On"));
-            }
-            else {
-                sender.sendMessage(LocaleLoader.getString("Commands.AdminChat.Off"));
-            }
-
-            return true;
-
-        default:
-            if (args.length == 1) {
-                if (!(sender instanceof Player)) {
-                    return false;
-                }
-
-                mcMMOPlayer = Users.getPlayer((Player) sender);
-
-                if (args[0].equalsIgnoreCase("on")) {
-                    mcMMOPlayer.setPartyChat(false);
-                    mcMMOPlayer.setAdminChat(true);
-                    sender.sendMessage(LocaleLoader.getString("Commands.AdminChat.On"));
-                    return true;
-                }
-
-                if (args[0].equalsIgnoreCase("off")) {
-                    mcMMOPlayer.setAdminChat(false);
-                    sender.sendMessage(LocaleLoader.getString("Commands.AdminChat.Off"));
-                    return true;
-                }
-            }
-
-            StringBuilder builder = new StringBuilder();
-            builder.append(args[0]);
-
-            for (int i = 1; i < args.length; i++) {
-                builder.append(" ");
-                builder.append(args[i]);
-            }
-
-            String message = builder.toString();
+public class AdminChatCommand extends ChatCommand {
+    public AdminChatCommand() {
+        super(ChatMode.ADMIN);
+    }
 
 
-            if (sender instanceof Player) {
-                Player player = (Player) sender;
-                ChatManager.handleAdminChat(mcMMO.p, player.getName(), player.getDisplayName(), message);
-            }
-            else {
-                String ssender = LocaleLoader.getString("Commands.Chat.Console");
-                ChatManager.handleAdminChat(mcMMO.p, ssender, ssender, message);
-            }
+    @Override
+    protected void handleChatSending(CommandSender sender, String[] args) {
+        String message = buildChatMessage(args, 0);
 
 
-            return true;
+        if (sender instanceof Player) {
+            Player player = (Player) sender;
+            ChatManager.handleAdminChat(mcMMO.p, player.getName(), player.getDisplayName(), message);
+        }
+        else {
+            ChatManager.handleAdminChat(mcMMO.p, LocaleLoader.getString("Commands.Chat.Console"), message);
         }
         }
     }
     }
 }
 }

+ 85 - 0
src/main/java/com/gmail/nossr50/chat/commands/ChatCommand.java

@@ -0,0 +1,85 @@
+package com.gmail.nossr50.chat.commands;
+
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.chat.ChatMode;
+import com.gmail.nossr50.datatypes.McMMOPlayer;
+import com.gmail.nossr50.util.Users;
+
+public abstract class ChatCommand implements CommandExecutor {
+    protected McMMOPlayer mcMMOPlayer;
+    protected ChatMode chatMode;
+
+    public ChatCommand (ChatMode chatMode) {
+        this.chatMode = chatMode;
+    }
+
+    @Override
+    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+        switch (args.length) {
+        case 0:
+            if (!(sender instanceof Player)) {
+                return false;
+            }
+
+            mcMMOPlayer = Users.getPlayer((Player) sender);
+
+            if (chatMode.isEnabled(mcMMOPlayer)) {
+                disableChatMode(sender);
+                return true;
+            }
+
+            enableChatMode(sender);
+            return true;
+
+        default:
+            if (args.length == 1) {
+                if (!(sender instanceof Player)) {
+                    return false;
+                }
+
+                mcMMOPlayer = Users.getPlayer((Player) sender);
+
+                if (args[0].equalsIgnoreCase("on")) {
+                    enableChatMode(sender);
+                    return true;
+                }
+
+                if (args[0].equalsIgnoreCase("off")) {
+                    disableChatMode(sender);
+                    return true;
+                }
+            }
+
+            handleChatSending(sender, args);
+            return true;
+        }
+    }
+
+    private void enableChatMode(CommandSender sender) {
+        chatMode.enable(mcMMOPlayer);
+        sender.sendMessage(chatMode.getEnabledMessage());
+    }
+
+    private void disableChatMode(CommandSender sender) {
+        chatMode.disable(mcMMOPlayer);
+        sender.sendMessage(chatMode.getDisabledMessage());
+    }
+
+    protected String buildChatMessage(String[] args, int index) {
+        StringBuilder builder = new StringBuilder();
+        builder.append(args[index]);
+
+        for (int i = index + 1; i < args.length; i++) {
+            builder.append(" ");
+            builder.append(args[i]);
+        }
+
+        return builder.toString();
+    }
+
+    protected abstract void handleChatSending(CommandSender sender, String[] args);
+}

+ 25 - 94
src/main/java/com/gmail/nossr50/chat/commands/PartyChatCommand.java

@@ -1,117 +1,48 @@
 package com.gmail.nossr50.chat.commands;
 package com.gmail.nossr50.chat.commands;
 
 
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
 import org.bukkit.command.CommandSender;
 import org.bukkit.command.CommandSender;
 import org.bukkit.entity.Player;
 import org.bukkit.entity.Player;
 
 
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.chat.ChatManager;
 import com.gmail.nossr50.chat.ChatManager;
-import com.gmail.nossr50.datatypes.McMMOPlayer;
+import com.gmail.nossr50.chat.ChatMode;
 import com.gmail.nossr50.locale.LocaleLoader;
 import com.gmail.nossr50.locale.LocaleLoader;
 import com.gmail.nossr50.party.Party;
 import com.gmail.nossr50.party.Party;
 import com.gmail.nossr50.party.PartyManager;
 import com.gmail.nossr50.party.PartyManager;
 import com.gmail.nossr50.util.Users;
 import com.gmail.nossr50.util.Users;
 
 
-public class PartyChatCommand implements CommandExecutor {
-    @Override
-    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-        McMMOPlayer mcMMOPlayer;
-
-        switch (args.length) {
-        case 0:
-            if (!(sender instanceof Player)) {
-                return false;
-            }
-
-            mcMMOPlayer = Users.getPlayer((Player) sender);
-
-            // Can't have both party & admin chat at the same time.
-            if (mcMMOPlayer.getAdminChatMode()) {
-                mcMMOPlayer.toggleAdminChat();
-            }
-
-            mcMMOPlayer.togglePartyChat();
-
-            if (mcMMOPlayer.getPartyChatMode()) {
-                sender.sendMessage(LocaleLoader.getString("Commands.Party.Chat.On"));
-            }
-            else {
-                sender.sendMessage(LocaleLoader.getString("Commands.Party.Chat.Off"));
-            }
-
-            return true;
-
-        default:
-            if (args.length == 1) {
-                if (!(sender instanceof Player)) {
-                    return false;
-                }
-
-                mcMMOPlayer = Users.getPlayer((Player) sender);
-
-                if (args[0].equalsIgnoreCase("on")) {
-                    mcMMOPlayer.setAdminChat(false);
-                    mcMMOPlayer.setPartyChat(true);
-                    sender.sendMessage(LocaleLoader.getString("Commands.Party.Chat.On"));
-                    return true;
-                }
+public class PartyChatCommand extends ChatCommand {
+    public PartyChatCommand() {
+        super(ChatMode.PARTY);
+    }
 
 
-                if (args[0].equalsIgnoreCase("off")) {
-                    mcMMOPlayer.setPartyChat(false);
-                    sender.sendMessage(LocaleLoader.getString("Commands.Party.Chat.Off"));
-                    return true;
-                }
+    @Override
+    protected void handleChatSending(CommandSender sender, String[] args) {
+        if (sender instanceof Player) {
+            Player player = (Player) sender;
+            Party party = Users.getPlayer(player).getParty();
+
+            if (party == null) {
+                sender.sendMessage(LocaleLoader.getString("Commands.Party.None"));
+                return;
             }
             }
 
 
-            if (sender instanceof Player) {
-                Player player = (Player) sender;
-                Party party = Users.getPlayer(player).getParty();
-
-                if (party == null) {
-                    sender.sendMessage(LocaleLoader.getString("Commands.Party.None"));
-                    return true;
-                }
-
-                StringBuilder builder = new StringBuilder();
-                builder.append(args[0]);
-
-                for (int i = 1; i < args.length; i++) {
-                    builder.append(" ");
-                    builder.append(args[i]);
-                }
-
-                String message = builder.toString();
-                ChatManager.handlePartyChat(mcMMO.p, party, player.getName(), player.getDisplayName(), message);
+            ChatManager.handlePartyChat(mcMMO.p, party, player.getName(), player.getDisplayName(), buildChatMessage(args, 0));
+        }
+        else {
+            if (args.length < 2) {
+                sender.sendMessage(LocaleLoader.getString("Party.Specify"));
+                return;
             }
             }
-            else {
-                if (args.length < 2) {
-                    sender.sendMessage(LocaleLoader.getString("Party.Specify"));
-                    return true;
-                }
-
-                Party party = PartyManager.getParty(args[0]);
-
-                if (party == null) {
-                    sender.sendMessage(LocaleLoader.getString("Party.InvalidName"));
-                    return true;
-                }
-
-                StringBuilder builder = new StringBuilder();
-                builder.append(args[1]);
-
-                for (int i = 2; i < args.length; i++) {
-                    builder.append(" ");
-                    builder.append(args[i]);
-                }
 
 
-                String consoleSender = LocaleLoader.getString("Commands.Chat.Console");
-                String message = builder.toString();
+            Party party = PartyManager.getParty(args[0]);
 
 
-                ChatManager.handlePartyChat(mcMMO.p, party, consoleSender, consoleSender, message);
+            if (party == null) {
+                sender.sendMessage(LocaleLoader.getString("Party.InvalidName"));
+                return;
             }
             }
 
 
-            return true;
+            ChatManager.handlePartyChat(mcMMO.p, party, LocaleLoader.getString("Commands.Chat.Console"), buildChatMessage(args, 1));
         }
         }
     }
     }
 }
 }