diff --git a/src/main/java/com/gmail/nossr50/commands/general/McstatsCommand.java b/src/main/java/com/gmail/nossr50/commands/general/McstatsCommand.java index a7f3ecdf7..2d614ea50 100644 --- a/src/main/java/com/gmail/nossr50/commands/general/McstatsCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/general/McstatsCommand.java @@ -6,6 +6,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.gmail.nossr50.commands.CommandHelper; +import com.gmail.nossr50.config.Config; import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.util.Users; @@ -25,8 +26,13 @@ public class McstatsCommand implements CommandExecutor { CommandHelper.printGatheringSkills(player); CommandHelper.printCombatSkills(player); CommandHelper.printMiscSkills(player); - - player.sendMessage(LocaleLoader.getString("Commands.PowerLevel", new Object[] { String.valueOf(Users.getPlayer(player).getPowerLevel()) })); + + int powerLevelCap = Config.getInstance().getPowerLevelCap(); + + if (powerLevelCap > 0) + player.sendMessage(LocaleLoader.getString("Commands.PowerLevel.Capped", new Object[] { String.valueOf(Users.getPlayer(player).getPowerLevel()), String.valueOf(powerLevelCap) })); + else + player.sendMessage(LocaleLoader.getString("Commands.PowerLevel", new Object[] { String.valueOf(Users.getPlayer(player).getPowerLevel()) })); return true; } 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/general/XprateCommand.java b/src/main/java/com/gmail/nossr50/commands/general/XprateCommand.java index d77106a22..ff0f4ff3a 100644 --- a/src/main/java/com/gmail/nossr50/commands/general/XprateCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/general/XprateCommand.java @@ -13,7 +13,7 @@ import com.gmail.nossr50.util.Misc; public class XprateCommand implements CommandExecutor { private final mcMMO plugin; - private static int oldRate = Config.getInstance().xpGainMultiplier; + private static double oldRate = Config.getInstance().xpGainMultiplier; private static boolean xpEvent = false; public XprateCommand (mcMMO plugin) { 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..29cea1f9c 100644 --- a/src/main/java/com/gmail/nossr50/commands/mc/MccCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/mc/MccCommand.java @@ -7,6 +7,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.gmail.nossr50.commands.CommandHelper; +import com.gmail.nossr50.config.Config; import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.util.Permissions; @@ -44,6 +45,10 @@ public class MccCommand implements CommandExecutor { player.sendMessage("/mcstats " + LocaleLoader.getString("Commands.Stats")); player.sendMessage("/mctop " + LocaleLoader.getString("Commands.Leaderboards")); + if (Config.getInstance().getCommandSkillResetEnabled() && Permissions.getInstance().skillReset(player)) { + player.sendMessage("/skillreset " + LocaleLoader.getString("Commands.Reset")); + } + 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..fbd540c80 100644 --- a/src/main/java/com/gmail/nossr50/config/Config.java +++ b/src/main/java/com/gmail/nossr50/config/Config.java @@ -7,7 +7,7 @@ import org.bukkit.configuration.ConfigurationSection; public class Config extends ConfigLoader { private static Config instance; - public int xpGainMultiplier = 1; + public double xpGainMultiplier = 1; private Config() { super("config.yml"); @@ -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); } @@ -342,7 +343,7 @@ public class Config extends ConfigLoader { /* General Settings */ public boolean getExperienceGainsMobspawnersEnabled() { return config.getBoolean("Experience.Gains.Mobspawners.Enabled", false); } public boolean getExperienceGainsPlayerVersusPlayerEnabled() { return config.getBoolean("Experience.PVP.Rewards", true); } - public int getExperienceGainsGlobalMultiplier() { return config.getInt("Experience.Gains.Multiplier.Global", 1); } + public double getExperienceGainsGlobalMultiplier() { return config.getDouble("Experience.Gains.Multiplier.Global", 1.0); } /* Combat XP Multipliers */ public double getPlayerVersusPlayerXP() { return config.getDouble("Experience.Gains.Multiplier.PVP", 1.0); } diff --git a/src/main/java/com/gmail/nossr50/datatypes/McMMOPlayer.java b/src/main/java/com/gmail/nossr50/datatypes/McMMOPlayer.java index 7cf3d5051..9fa35c3c6 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/McMMOPlayer.java +++ b/src/main/java/com/gmail/nossr50/datatypes/McMMOPlayer.java @@ -108,7 +108,7 @@ public class McMMOPlayer { * @param newValue The amount of XP to add */ public void addXPOverrideBonus(SkillType skillType, int xp) { - int modifiedXp = xp * Config.getInstance().xpGainMultiplier; + int modifiedXp = (int)Math.floor(xp * Config.getInstance().xpGainMultiplier); addXPOverride(skillType, modifiedXp); } @@ -129,7 +129,7 @@ public class McMMOPlayer { bonusModifier = calculatePartyXPModifier(skillType); } - int xp = (int) (newValue / skillType.getXpModifier()) * Config.getInstance().xpGainMultiplier; + int xp = (int)Math.floor((newValue / skillType.getXpModifier()) * Config.getInstance().xpGainMultiplier); if (bonusModifier > 0) { if (bonusModifier >= 2) { diff --git a/src/main/java/com/gmail/nossr50/datatypes/PlayerProfile.java b/src/main/java/com/gmail/nossr50/datatypes/PlayerProfile.java index bdc61ef52..794638369 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..3e8ead029 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.getCommandSkillResetEnabled()) { + 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 dfd3226ef..d80948351 100644 --- a/src/main/resources/locale/locale_en_US.properties +++ b/src/main/resources/locale/locale_en_US.properties @@ -408,7 +408,11 @@ Commands.Party.Teleport= [[RED]]- Teleport to party member Commands.Party.Toggle=[[RED]]- Toggle Party Chat 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