浏览代码

Abstract our Spout commands.

GJ 12 年之前
父节点
当前提交
c3f83302c5

+ 15 - 42
src/main/java/com/gmail/nossr50/spout/commands/MchudCommand.java

@@ -1,56 +1,29 @@
 package com.gmail.nossr50.spout.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.mcMMO;
-import com.gmail.nossr50.commands.CommandHelper;
-import com.gmail.nossr50.datatypes.PlayerProfile;
 import com.gmail.nossr50.locale.LocaleLoader;
-import com.gmail.nossr50.spout.SpoutConfig;
 import com.gmail.nossr50.spout.huds.HudType;
-import com.gmail.nossr50.spout.huds.SpoutHud;
-import com.gmail.nossr50.util.Users;
 
-public class MchudCommand implements CommandExecutor {
+public class MchudCommand extends SpoutCommand {
     @Override
-    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-        if (CommandHelper.noConsoleUsage(sender)) {
-            return true;
-        }
-
-        if (!mcMMO.spoutEnabled || !SpoutConfig.getInstance().getXPBarEnabled()) {
-            sender.sendMessage(LocaleLoader.getString("Commands.Disabled"));
-            return true;
-        }
-
-        PlayerProfile playerProfile = Users.getPlayer((Player) sender).getProfile();
-        SpoutHud spoutHud = playerProfile.getSpoutHud();
-
-        if (spoutHud == null) {
-            sender.sendMessage(LocaleLoader.getString("Commands.Disabled"));
-            return true;
-        }
-
-        switch (args.length) {
-        case 1:
-            for (HudType hudType : HudType.values()) {
-                if (hudType.toString().equalsIgnoreCase(args[0])) {
-                    playerProfile.setHudType(hudType);
-                    spoutHud.initializeXpBar();
-                    spoutHud.updateXpBar();
+    protected boolean noArguments(Command command, CommandSender sender, String[] args) {
+        return false;
+    }
 
-                    return true;
-                }
+    @Override
+    protected boolean oneArgument(Command command, CommandSender sender, String[] args) {
+        for (HudType hudType : HudType.values()) {
+            if (hudType.toString().equalsIgnoreCase(args[0])) {
+                playerProfile.setHudType(hudType);
+                spoutHud.initializeXpBar();
+                spoutHud.updateXpBar();
+                return true;
             }
-
-            sender.sendMessage(LocaleLoader.getString("Commands.mchud.Invalid"));
-            return true;
-
-        default:
-            return false;
         }
+
+        sender.sendMessage(LocaleLoader.getString("Commands.mchud.Invalid"));
+        return true;
     }
 }

+ 53 - 0
src/main/java/com/gmail/nossr50/spout/commands/SpoutCommand.java

@@ -0,0 +1,53 @@
+package com.gmail.nossr50.spout.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.mcMMO;
+import com.gmail.nossr50.commands.CommandHelper;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.locale.LocaleLoader;
+import com.gmail.nossr50.spout.SpoutConfig;
+import com.gmail.nossr50.spout.huds.SpoutHud;
+import com.gmail.nossr50.util.Users;
+
+public abstract class SpoutCommand implements CommandExecutor {
+    protected PlayerProfile playerProfile;
+    protected SpoutHud spoutHud;
+
+    @Override
+    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+        if (CommandHelper.noConsoleUsage(sender)) {
+            return true;
+        }
+
+        if (!mcMMO.spoutEnabled || !SpoutConfig.getInstance().getXPBarEnabled()) {
+            sender.sendMessage(LocaleLoader.getString("Commands.Disabled"));
+            return true;
+        }
+
+        playerProfile = Users.getPlayer((Player) sender).getProfile();
+        spoutHud = playerProfile.getSpoutHud();
+
+        if (spoutHud == null) {
+            sender.sendMessage(LocaleLoader.getString("Commands.Disabled"));
+            return true;
+        }
+
+        switch (args.length) {
+        case 0:
+            return noArguments(command, sender, args);
+
+        case 1:
+            return oneArgument(command, sender, args);
+
+        default:
+            return false;
+        }
+    }
+
+    protected abstract boolean noArguments(Command command, CommandSender sender, String[] args);
+    protected abstract boolean oneArgument(Command command, CommandSender sender, String[] args);
+}

+ 33 - 70
src/main/java/com/gmail/nossr50/spout/commands/XplockCommand.java

@@ -1,100 +1,63 @@
 package com.gmail.nossr50.spout.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.mcMMO;
-import com.gmail.nossr50.commands.CommandHelper;
-import com.gmail.nossr50.datatypes.PlayerProfile;
 import com.gmail.nossr50.locale.LocaleLoader;
 import com.gmail.nossr50.skills.utilities.SkillTools;
 import com.gmail.nossr50.skills.utilities.SkillType;
-import com.gmail.nossr50.spout.SpoutConfig;
-import com.gmail.nossr50.spout.huds.SpoutHud;
 import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.Permissions;
-import com.gmail.nossr50.util.Users;
 
-public class XplockCommand implements CommandExecutor {
+public class XplockCommand extends SpoutCommand {
     @Override
-    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
-        if (CommandHelper.noConsoleUsage(sender)) {
+    protected boolean noArguments(Command command, CommandSender sender, String[] args) {
+        if (spoutHud.getXpBarLocked()) {
+            unlockXpBar(sender);
             return true;
         }
 
-        if (!mcMMO.spoutEnabled || !SpoutConfig.getInstance().getXPBarEnabled()) {
-            sender.sendMessage(LocaleLoader.getString("Commands.Disabled"));
+        lockXpBar(sender, spoutHud.getLastGained());
+        return true;
+    }
+
+    @Override
+    protected boolean oneArgument(Command command, CommandSender sender, String[] args) {
+        if (args[0].equalsIgnoreCase("on")) {
+            lockXpBar(sender, spoutHud.getLastGained());
             return true;
         }
 
-        PlayerProfile playerProfile = Users.getPlayer((Player) sender).getProfile();
-        SpoutHud spoutHud = playerProfile.getSpoutHud();
-        SkillType lastGained;
-
-        if (spoutHud == null) {
-            sender.sendMessage(LocaleLoader.getString("Commands.Disabled"));
+        if (args[0].equalsIgnoreCase("off")) {
+            unlockXpBar(sender);
             return true;
         }
 
-        switch (args.length) {
-        case 0:
-            if (spoutHud.getXpBarLocked()) {
-                spoutHud.toggleXpBarLocked();
-                sender.sendMessage(LocaleLoader.getString("Commands.xplock.unlocked"));
-                return true;
-            }
-
-            lastGained = spoutHud.getLastGained();
-
-            if (lastGained == null) {
-                return false;
-            }
-
-            spoutHud.toggleXpBarLocked();
-            spoutHud.setSkillLock(lastGained);
-            spoutHud.updateXpBar();
-
-            sender.sendMessage(LocaleLoader.getString("Commands.xplock.locked", Misc.getCapitalized(lastGained.toString())));
+        if (!SkillTools.isSkill(args[0])) {
+            sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
             return true;
+        }
 
-        case 1:
-            if (args[0].equalsIgnoreCase("on")) {
-                lastGained = spoutHud.getLastGained();
-
-                spoutHud.setXpBarLocked(true);
-                spoutHud.setSkillLock(lastGained);
-                spoutHud.updateXpBar();
-
-                sender.sendMessage(LocaleLoader.getString("Commands.xplock.locked", Misc.getCapitalized(lastGained.toString())));
-                return true;
-            }
-
-            if (args[0].equalsIgnoreCase("off")) {
-                spoutHud.setXpBarLocked(false);
-                sender.sendMessage(LocaleLoader.getString("Commands.xplock.unlocked"));
-                return true;
-            }
-
-            if (!SkillTools.isSkill(args[0])) {
-                sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
-                return true;
-            }
+        if (!Permissions.hasPermission(sender, "mcmmo.commands.xplock." + args[0].toLowerCase())) {
+            sender.sendMessage(command.getPermissionMessage());
+            return true;
+        }
 
-            if (!Permissions.hasPermission(sender, "mcmmo.commands.xplock." + args[0].toLowerCase())) {
-                sender.sendMessage(command.getPermissionMessage());
-            }
+        lockXpBar(sender, SkillTools.getSkillType(args[0]));
+        return true;
+    }
 
+    private void lockXpBar(CommandSender sender, SkillType skill) {
+        if (skill != null) {
             spoutHud.setXpBarLocked(true);
-            spoutHud.setSkillLock(SkillTools.getSkillType(args[0]));
+            spoutHud.setSkillLock(skill);
             spoutHud.updateXpBar();
-
-            sender.sendMessage(LocaleLoader.getString("Commands.xplock.locked", Misc.getCapitalized(args[0])));
-            return true;
-
-        default:
-            return false;
+            sender.sendMessage(LocaleLoader.getString("Commands.xplock.locked", Misc.getCapitalized(skill.toString())));
         }
     }
+
+    private void unlockXpBar(CommandSender sender) {
+        spoutHud.setXpBarLocked(false);
+        sender.sendMessage(LocaleLoader.getString("Commands.xplock.unlocked"));
+    }
 }