From 12ed2ac07b1215f379985f84aa02f2d6025a6e65 Mon Sep 17 00:00:00 2001 From: riking Date: Tue, 19 Nov 2013 18:56:47 -0800 Subject: [PATCH] Have ExperienceCommand and SkillresetCommand explicitly handle 'all' --- .../experience/ExperienceCommand.java | 9 +- .../experience/SkillresetCommand.java | 106 ++++++++++++------ 2 files changed, 79 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/commands/experience/ExperienceCommand.java b/src/main/java/com/gmail/nossr50/commands/experience/ExperienceCommand.java index 2f1ea6f9b..16cb054ab 100644 --- a/src/main/java/com/gmail/nossr50/commands/experience/ExperienceCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/experience/ExperienceCommand.java @@ -52,7 +52,12 @@ public abstract class ExperienceCommand implements TabExecutor { return true; } - SkillType skill = SkillType.getSkill(args[1]); + SkillType skill; + if (args[1].equalsIgnoreCase("all")) { + skill = null; + } else { + skill = SkillType.getSkill(args[1]); + } int value = Integer.parseInt(args[2]); String playerName = Misc.getMatchedPlayerName(args[0]); @@ -100,7 +105,7 @@ public abstract class ExperienceCommand implements TabExecutor { protected abstract void handlePlayerMessageSkill(Player player, int value, SkillType skill); private boolean validateArguments(CommandSender sender, String skillName, String value) { - if (CommandUtils.isInvalidInteger(sender, value) || CommandUtils.isInvalidSkill(sender, skillName)) { + if (CommandUtils.isInvalidInteger(sender, value) || (!skillName.equalsIgnoreCase("all") && CommandUtils.isInvalidSkill(sender, skillName))) { return false; } diff --git a/src/main/java/com/gmail/nossr50/commands/experience/SkillresetCommand.java b/src/main/java/com/gmail/nossr50/commands/experience/SkillresetCommand.java index 7fd61d77d..31fa499df 100644 --- a/src/main/java/com/gmail/nossr50/commands/experience/SkillresetCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/experience/SkillresetCommand.java @@ -22,6 +22,10 @@ import com.gmail.nossr50.util.commands.CommandUtils; import com.gmail.nossr50.util.player.UserManager; import com.google.common.collect.ImmutableList; +/** + * This class mirrors the structure of ExperienceCommand, except the + * value/quantity argument is removed. + */ public class SkillresetCommand implements TabExecutor { @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { @@ -31,29 +35,35 @@ public class SkillresetCommand implements TabExecutor { return true; } - if (!Permissions.skillreset(sender)) { + if (!permissionsCheckSelf(sender)) { sender.sendMessage(command.getPermissionMessage()); return true; } - if (CommandUtils.isInvalidSkill(sender, args[0])) { + if (!validateArguments(sender, args[0])) { return true; } - editValues((Player) sender, UserManager.getPlayer(sender.getName()).getProfile(), SkillType.getSkill(args[0]), args.length, sender, command); + editValues((Player) sender, UserManager.getPlayer(sender.getName()).getProfile(), SkillType.getSkill(args[0])); return true; case 2: - if (!Permissions.skillresetOthers(sender)) { + if (!permissionsCheckOthers(sender)) { sender.sendMessage(command.getPermissionMessage()); return true; } - if (CommandUtils.isInvalidSkill(sender, args[1])) { + if (!validateArguments(sender, args[1])) { return true; } - SkillType skill = SkillType.getSkill(args[1]); + SkillType skill; + if (args[1].equalsIgnoreCase("all")) { + skill = null; + } + else { + skill = SkillType.getSkill(args[1]); + } String playerName = Misc.getMatchedPlayerName(args[0]); McMMOPlayer mcMMOPlayer = UserManager.getPlayer(playerName, true); @@ -66,13 +76,13 @@ public class SkillresetCommand implements TabExecutor { return true; } - editValues(null, profile, skill, args.length, sender, command); + editValues(null, profile, skill); } else { - editValues(mcMMOPlayer.getPlayer(), mcMMOPlayer.getProfile(), skill, args.length, sender, command); + editValues(mcMMOPlayer.getPlayer(), mcMMOPlayer.getProfile(), skill); } - ExperienceCommand.handleSenderMessage(sender, playerName, skill); + handleSenderMessage(sender, playerName, skill); return true; default: @@ -93,31 +103,7 @@ public class SkillresetCommand implements TabExecutor { } } - private void editValues(Player player, PlayerProfile profile, SkillType skill, int argsLength, CommandSender sender, Command command) { - if (skill == null) { - for (SkillType skillType : SkillType.values()) { - handleCommand(player, profile, skillType, argsLength, sender, command); - } - - if (player != null) { - player.sendMessage(LocaleLoader.getString("Commands.Reset.All")); - } - } - else { - handleCommand(player, profile, skill, argsLength, sender, command); - - if (player != null) { - player.sendMessage(LocaleLoader.getString("Commands.Reset.Single", skill.getName())); - } - } - } - - private void handleCommand(Player player, PlayerProfile profile, SkillType skill, int argsLength, CommandSender sender, Command command) { - if (argsLength == 1 && !Permissions.skillreset(sender, skill) || (argsLength == 2 && !Permissions.skillresetOthers(sender, skill))) { - sender.sendMessage(command.getPermissionMessage()); - return; - } - + protected void handleCommand(Player player, PlayerProfile profile, SkillType skill) { int levelsRemoved = profile.getSkillLevel(skill); float xpRemoved = profile.getSkillXpLevelRaw(skill); @@ -130,4 +116,56 @@ public class SkillresetCommand implements TabExecutor { EventUtils.handleLevelChangeEvent(player, skill, levelsRemoved, xpRemoved, false); } + + protected boolean permissionsCheckSelf(CommandSender sender) { + return Permissions.skillreset(sender); + } + + protected boolean permissionsCheckOthers(CommandSender sender) { + return Permissions.skillresetOthers(sender); + } + + protected void handlePlayerMessageAll(Player player) { + player.sendMessage(LocaleLoader.getString("Commands.Reset.All")); + } + + protected void handlePlayerMessageSkill(Player player, SkillType skill) { + player.sendMessage(LocaleLoader.getString("Commands.Reset.Single", skill.getName())); + } + + private boolean validateArguments(CommandSender sender, String skillName) { + if (CommandUtils.isInvalidSkill(sender, skillName) && !skillName.equalsIgnoreCase("all")) { + return false; + } + + return true; + } + + protected static void handleSenderMessage(CommandSender sender, String playerName, SkillType skill) { + if (skill == null) { + sender.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardAll.2", playerName)); + } + else { + sender.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardSkill.2", skill.getName(), playerName)); + } + } + + protected void editValues(Player player, PlayerProfile profile, SkillType skill) { + if (skill == null) { + for (SkillType skillType : SkillType.values()) { + handleCommand(player, profile, skillType); + } + + if (player != null) { + handlePlayerMessageAll(player); + } + } + else { + handleCommand(player, profile, skill); + + if (player != null) { + handlePlayerMessageSkill(player, skill); + } + } + } }