diff --git a/src/main/java/com/gmail/nossr50/commands/CommandRegistrationHelper.java b/src/main/java/com/gmail/nossr50/commands/CommandRegistrationHelper.java index 9e911ac3f..778452c34 100644 --- a/src/main/java/com/gmail/nossr50/commands/CommandRegistrationHelper.java +++ b/src/main/java/com/gmail/nossr50/commands/CommandRegistrationHelper.java @@ -11,6 +11,7 @@ import com.gmail.nossr50.commands.admin.AddxpCommand; import com.gmail.nossr50.commands.admin.McgodCommand; import com.gmail.nossr50.commands.admin.McrefreshCommand; import com.gmail.nossr50.commands.admin.MmoeditCommand; +import com.gmail.nossr50.commands.admin.SkillresetCommand; import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.skills.acrobatics.AcrobaticsCommand; import com.gmail.nossr50.skills.archery.ArcheryCommand; @@ -160,4 +161,13 @@ public final class CommandRegistrationHelper { command.setUsage(LocaleLoader.getString("Commands.Usage.3", "mmoedit", "[" + LocaleLoader.getString("Commands.Usage.Player") + "]", "<" + LocaleLoader.getString("Commands.Usage.Skill") + ">", "<" + LocaleLoader.getString("Commands.Usage.Level") + ">")); command.setExecutor(new MmoeditCommand()); } + + public static void registerSkillresetCommand() { + PluginCommand command = mcMMO.p.getCommand("skillreset"); + command.setDescription(LocaleLoader.getString("Commands.Description.skillreset")); + command.setPermission("mcmmo.commands.skillreset"); + command.setPermissionMessage(permissionsMessage); + command.setUsage(LocaleLoader.getString("Commands.Usage.2", "skillreset", "[" + LocaleLoader.getString("Commands.Usage.Player") + "]", "<" + LocaleLoader.getString("Commands.Usage.Skill") + ">")); + command.setExecutor(new SkillresetCommand()); + } } diff --git a/src/main/java/com/gmail/nossr50/commands/admin/SkillResetCommand.java b/src/main/java/com/gmail/nossr50/commands/admin/SkillResetCommand.java deleted file mode 100644 index c18fcf59c..000000000 --- a/src/main/java/com/gmail/nossr50/commands/admin/SkillResetCommand.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.gmail.nossr50.commands.admin; - -import org.bukkit.OfflinePlayer; -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.util.Misc; -import com.gmail.nossr50.util.Users; - -public class SkillResetCommand implements CommandExecutor { - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - OfflinePlayer modifiedPlayer; - PlayerProfile profile; - SkillType skill; - String usage = LocaleLoader.getString("Commands.Usage.2", "skillreset", "[" + LocaleLoader.getString("Commands.Usage.Player") + "]", "<" + LocaleLoader.getString("Commands.Usage.Skill") + ">"); - - switch (args.length) { - case 1: - if (sender instanceof Player) { - if (!SkillTools.isSkill(args[0])) { - sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid")); - return true; - } - - skill = SkillTools.getSkillType(args[0]); - - if (CommandHelper.noCommandPermissions((Player) sender, "mcmmo.commands.skillreset." + skill.toString().toLowerCase())) { - return true; - } - - modifiedPlayer = (Player) sender; - profile = Users.getPlayer((Player) sender).getProfile(); - profile.modifySkill(skill, 0); - - if (skill == SkillType.ALL) { - sender.sendMessage(LocaleLoader.getString("Commands.Reset.All")); - } - else { - sender.sendMessage(LocaleLoader.getString("Commands.Reset.Single", Misc.getCapitalized(skill.toString()))); - } - } - else { - sender.sendMessage(usage); - } - - return true; - - case 2: - modifiedPlayer = mcMMO.p.getServer().getOfflinePlayer(args[0]); - profile = Users.getPlayer(args[0]).getProfile(); - - // TODO:Not sure if we actually need a null check here - if (profile == null || !profile.isLoaded()) { - sender.sendMessage(LocaleLoader.getString("Commands.DoesNotExist")); - return true; - } - - if (!SkillTools.isSkill(args[1])) { - sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid")); - return true; - } - - skill = SkillTools.getSkillType(args[1]); - - if (CommandHelper.noCommandPermissions(sender, "mcmmo.commands.skillreset.others." + skill.toString().toLowerCase())) { - return true; - } - - profile.modifySkill(skill, 0); - - if (modifiedPlayer.isOnline()) { - if (skill == SkillType.ALL) { - ((Player)modifiedPlayer).sendMessage(LocaleLoader.getString("Commands.Reset.All")); - } - else { - ((Player)modifiedPlayer).sendMessage(LocaleLoader.getString("Commands.Reset.Single", Misc.getCapitalized(skill.toString()))); - } - } - - sender.sendMessage(LocaleLoader.getString("Commands.mmoedit.Modified.2", Misc.getCapitalized(skill.toString()), args[0])); - return true; - - default: - sender.sendMessage(usage); - return true; - } - } -} diff --git a/src/main/java/com/gmail/nossr50/commands/admin/SkillresetCommand.java b/src/main/java/com/gmail/nossr50/commands/admin/SkillresetCommand.java new file mode 100644 index 000000000..d0d1bbb74 --- /dev/null +++ b/src/main/java/com/gmail/nossr50/commands/admin/SkillresetCommand.java @@ -0,0 +1,129 @@ +package com.gmail.nossr50.commands.admin; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.gmail.nossr50.datatypes.McMMOPlayer; +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.util.Misc; +import com.gmail.nossr50.util.Permissions; +import com.gmail.nossr50.util.Users; + +public class SkillresetCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + PlayerProfile profile; + SkillType skill; + + switch (args.length) { + case 1: + if (!(sender instanceof Player)) { + return false; + } + + if (!SkillTools.isSkill(args[0])) { + sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid")); + return true; + } + + skill = SkillTools.getSkillType(args[0]); + + if (skill != SkillType.ALL && !Permissions.hasPermission(sender, "mcmmo.commands.skillreset." + skill.toString().toLowerCase())) { + sender.sendMessage(command.getPermissionMessage()); + return true; + } + + profile = Users.getPlayer((Player) sender).getProfile(); + + if (skill == SkillType.ALL) { + for (SkillType type : SkillType.values()) { + if (type != SkillType.ALL) { + if (Permissions.hasPermission(sender, "mcmmo.commands.skillreset." + type.toString().toLowerCase())) { + profile.modifySkill(type, 0); + sender.sendMessage(LocaleLoader.getString("Commands.Reset.Single", Misc.getCapitalized(type.toString()))); + } + } + } + } + else { + profile.modifySkill(skill, 0); + sender.sendMessage(LocaleLoader.getString("Commands.Reset.Single", Misc.getCapitalized(skill.toString()))); + } + + return true; + + case 2: + if (!SkillTools.isSkill(args[1])) { + sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid")); + return true; + } + + skill = SkillTools.getSkillType(args[1]); + + if (skill != SkillType.ALL && !Permissions.hasPermission(sender, "mcmmo.commands.skillreset.others." + skill.toString().toLowerCase())) { + sender.sendMessage(command.getPermissionMessage()); + return true; + } + + McMMOPlayer mcMMOPlayer = Users.getPlayer(args[0]); + + // If the mcMMOPlayer doesn't exist, create a temporary profile and check if it's present in the database. If it's not, abort the process. + if (mcMMOPlayer == null) { + profile = new PlayerProfile(args[0], false); + + if (!profile.isLoaded()) { + sender.sendMessage(LocaleLoader.getString("Commands.DoesNotExist")); + return true; + } + + if (skill == SkillType.ALL) { + for (SkillType type : SkillType.values()) { + if (type != SkillType.ALL) { + if (Permissions.hasPermission(sender, "mcmmo.commands.skillreset.others" + type.toString().toLowerCase())) { + profile.modifySkill(type, 0); + sender.sendMessage(LocaleLoader.getString("Commands.mmoedit.Modified.2", Misc.getCapitalized(type.toString()), args[0])); + } + } + } + } + else { + profile.modifySkill(skill, 0); + sender.sendMessage(LocaleLoader.getString("Commands.mmoedit.Modified.2", Misc.getCapitalized(skill.toString()), args[0])); + } + + profile.save(); // Since this is a temporary profile, we save it here. + } + else { + profile = mcMMOPlayer.getProfile(); + Player player = mcMMOPlayer.getPlayer(); + + if (skill == SkillType.ALL) { + for (SkillType type : SkillType.values()) { + if (type != SkillType.ALL) { + if (Permissions.hasPermission(sender, "mcmmo.commands.skillreset.others" + type.toString().toLowerCase())) { + profile.modifySkill(type, 0); + sender.sendMessage(LocaleLoader.getString("Commands.mmoedit.Modified.2", Misc.getCapitalized(type.toString()), args[0])); + player.sendMessage(LocaleLoader.getString("Commands.Reset.Single", Misc.getCapitalized(type.toString()))); + } + } + } + } + else { + profile.modifySkill(skill, 0); + sender.sendMessage(LocaleLoader.getString("Commands.mmoedit.Modified.2", Misc.getCapitalized(skill.toString()), args[0])); + player.sendMessage(LocaleLoader.getString("Commands.Reset.Single", Misc.getCapitalized(skill.toString()))); + } + } + + return true; + + default: + return false; + } + } +} diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java index 175620207..b1d8c5e5d 100644 --- a/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/src/main/java/com/gmail/nossr50/mcMMO.java @@ -25,7 +25,6 @@ import com.gmail.nossr50.util.blockmeta.chunkmeta.ChunkManagerFactory; import com.gmail.nossr50.chat.commands.ACommand; import com.gmail.nossr50.chat.commands.PCommand; import com.gmail.nossr50.commands.CommandRegistrationHelper; -import com.gmail.nossr50.commands.admin.SkillResetCommand; import com.gmail.nossr50.commands.admin.XprateCommand; import com.gmail.nossr50.commands.player.InspectCommand; import com.gmail.nossr50.commands.player.McabilityCommand; @@ -456,7 +455,7 @@ public class mcMMO extends JavaPlugin { getCommand("inspect").setExecutor(new InspectCommand()); getCommand("xprate").setExecutor(new XprateCommand()); getCommand("mmoupdate").setExecutor(new MmoupdateCommand()); - getCommand("skillreset").setExecutor(new SkillResetCommand()); + CommandRegistrationHelper.registerSkillresetCommand(); // Spout commands getCommand("xplock").setExecutor(new XplockCommand());