diff --git a/src/main/java/com/gmail/nossr50/commands/general/SkillResetCommand.java b/src/main/java/com/gmail/nossr50/commands/general/SkillResetCommand.java new file mode 100644 index 000000000..63de48751 --- /dev/null +++ b/src/main/java/com/gmail/nossr50/commands/general/SkillResetCommand.java @@ -0,0 +1,59 @@ +package com.gmail.nossr50.commands.general; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.gmail.nossr50.commands.CommandHelper; +import com.gmail.nossr50.datatypes.PlayerProfile; +import com.gmail.nossr50.datatypes.SkillType; +import com.gmail.nossr50.locale.LocaleLoader; +import com.gmail.nossr50.util.Users; + +public class SkillResetCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (CommandHelper.noConsoleUsage(sender)) { + return true; + } + + //ensure they have the skillreset perm + if (CommandHelper.noCommandPermissions(sender, "mcmmo.skillreset")) { + return true; + } + + SkillType skillType = null; //simple initialization + + //make sure there's only one argument. output at least some kind of error if not + if (args.length != 1 && args[0] != null) { + sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid")); + return true; + } + + + //parse the skilltype that they sent + try + { + skillType = SkillType.valueOf(args[0].toUpperCase().trim()); //ucase needed to match enum since it's case sensitive. trim to be nice + }catch(IllegalArgumentException ex) + { + sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid")); + return true; + } + + //reset the values in the hash table and persist them + PlayerProfile profile = Users.getProfile((Player)sender); + profile.resetSkill(skillType); + profile.save(); + + //display a success message to the user + if (skillType == SkillType.ALL) + sender.sendMessage(LocaleLoader.getString("Commands.Reset.All")); + else + sender.sendMessage(LocaleLoader.getString("Commands.Reset.Single", new Object[] { args[0] })); + + return true; + } +} diff --git a/src/main/java/com/gmail/nossr50/commands/mc/MccCommand.java b/src/main/java/com/gmail/nossr50/commands/mc/MccCommand.java index ba7b9b163..1d12d9389 100644 --- a/src/main/java/com/gmail/nossr50/commands/mc/MccCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/mc/MccCommand.java @@ -44,6 +44,10 @@ public class MccCommand implements CommandExecutor { player.sendMessage("/mcstats " + LocaleLoader.getString("Commands.Stats")); player.sendMessage("/mctop " + LocaleLoader.getString("Commands.Leaderboards")); + if (Permissions.getInstance().skillReset(player)) { + player.sendMessage("/skillreset " + LocaleLoader.getString("Commands.ToggleAbility")); + } + if (Permissions.getInstance().mcAbility(player)) { player.sendMessage("/mcability " + LocaleLoader.getString("Commands.ToggleAbility")); } diff --git a/src/main/java/com/gmail/nossr50/config/Config.java b/src/main/java/com/gmail/nossr50/config/Config.java index 9a31d39cb..dd26c1b66 100644 --- a/src/main/java/com/gmail/nossr50/config/Config.java +++ b/src/main/java/com/gmail/nossr50/config/Config.java @@ -77,6 +77,7 @@ public class Config extends ConfigLoader { public boolean getCommandMCCEnabled() { return config.getBoolean("Commands.mcc.Enabled", true); } public boolean getCommandMCGodEnabled() { return config.getBoolean("Commands.mcgod.Enabled", true); } public boolean getCommandMCStatsEnabled() { return config.getBoolean("Commands.mcstats.Enabled", true); } + public boolean getCommandSkillResetEnabled() { return config.getBoolean("Commands.skillreset.Enabled", true); } public boolean getCommandMmoeditEnabled() { return config.getBoolean("Commands.mmoedit.Enabled", true); } public boolean getCommandMCRemoveEnabled() { return config.getBoolean("Commands.mcremove.Enable", true); } public boolean getCommandPTPEnabled() { return config.getBoolean("Commands.ptp.Enabled", true); } diff --git a/src/main/java/com/gmail/nossr50/datatypes/PlayerProfile.java b/src/main/java/com/gmail/nossr50/datatypes/PlayerProfile.java index 295baf06c..f7090502c 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/PlayerProfile.java +++ b/src/main/java/com/gmail/nossr50/datatypes/PlayerProfile.java @@ -903,6 +903,21 @@ public class PlayerProfile { public void skillUp(SkillType skillType, int newValue) { skills.put(skillType, skills.get(skillType) + newValue); } + + public void resetSkill(SkillType skillType) + { + //do a single skilltype + if (skillType != SkillType.ALL) + skills.put(skillType, 0); + else //do them all + { + for(SkillType skill : SkillType.values()) //iterate over all items in the enumeration + { + if (skill != SkillType.ALL) // skip the "all" value + skills.put(skill, 0); + } + } + } // /** // * Adds XP to the player, doesn't calculate for XP Rate diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java index 91aba1f62..cc5aeda43 100644 --- a/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/src/main/java/com/gmail/nossr50/mcMMO.java @@ -21,6 +21,7 @@ import com.gmail.nossr50.commands.general.InspectCommand; import com.gmail.nossr50.commands.general.McstatsCommand; import com.gmail.nossr50.commands.general.MmoeditCommand; import com.gmail.nossr50.commands.general.MmoupdateCommand; +import com.gmail.nossr50.commands.general.SkillResetCommand; import com.gmail.nossr50.commands.general.XprateCommand; import com.gmail.nossr50.commands.mc.McabilityCommand; import com.gmail.nossr50.commands.mc.MccCommand; @@ -365,6 +366,10 @@ public class mcMMO extends JavaPlugin { getCommand("mcstats").setExecutor(new McstatsCommand()); } + if (configInstance.getCommandMCStatsEnabled()) { + getCommand("skillreset").setExecutor(new SkillResetCommand()); + } + //Party commands if (configInstance.getCommandAcceptEnabled()) { getCommand("accept").setExecutor(new AcceptCommand(this)); diff --git a/src/main/java/com/gmail/nossr50/util/Permissions.java b/src/main/java/com/gmail/nossr50/util/Permissions.java index 528d0d51a..2d5f079bb 100644 --- a/src/main/java/com/gmail/nossr50/util/Permissions.java +++ b/src/main/java/com/gmail/nossr50/util/Permissions.java @@ -383,6 +383,11 @@ public class Permissions { public boolean party(Player player) { return player.hasPermission("mcmmo.commands.party"); } + + public boolean skillReset(Player player) { + return player.hasPermission("mcmmo.skillreset"); + } + /* * MCMMO.CHAT.* diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index c6c2cd16d..742abd883 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -321,6 +321,8 @@ Commands: Enabled: true mcstats: Enabled: true + skillreset: + Enabled: true mcability: Enabled: true party: diff --git a/src/main/resources/locale/locale_en_US.properties b/src/main/resources/locale/locale_en_US.properties index aa1d70568..d80948351 100644 --- a/src/main/resources/locale/locale_en_US.properties +++ b/src/main/resources/locale/locale_en_US.properties @@ -410,6 +410,9 @@ Commands.Party= [[RED]]- Create/Join designated party Commands.PowerLevel.Leaderboard=[[YELLOW]]--mcMMO[[BLUE]] Power Level [[YELLOW]]Leaderboard-- Commands.PowerLevel.Capped=[[DARK_RED]]POWER LEVEL: [[GREEN]]{0} [[DARK_RED]]MAX LEVEL: [[YELLOW]]{1} Commands.PowerLevel=[[DARK_RED]]POWER LEVEL: [[GREEN]]{0} +Commands.Reset.All=[[GREEN]]All of your skill levels have been reset successfully. +Commands.Reset.Single=[[GREEN]]Your {0} skill level has been reset successfully. +Commands.Reset=[[RED]]Reset a skill's level to 0 Commands.Skill.Invalid=[[RED]]That is not a valid skillname! Commands.Skill.Leaderboard=[[YELLOW]]--mcMMO [[BLUE]]{0}[[YELLOW]] Leaderboard-- Commands.SkillInfo=/ [[RED]]- View detailed information about a skill diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 1949944e2..e231df3e4 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -73,6 +73,9 @@ commands: p: aliases: [pc] description: Toggle Party chat or send party chat messages + skillreset: + aliases: [] + description: Reset the level of one or all of your skills excavation: aliases: [] description: Detailed skill info @@ -583,4 +586,6 @@ permissions: mcmmo.skills.axes: description: Allows access to the Axes skill mcmmo.skills.acrobatics: - description: Allows access to the Acrobatics skill \ No newline at end of file + description: Allows access to the Acrobatics skill + mcmmo.skillreset: + description: Allow reset of skill levels \ No newline at end of file