From 05a9c8b7e598c404aa091686630f27190fe6b635 Mon Sep 17 00:00:00 2001 From: GJ Date: Mon, 18 Feb 2013 08:35:52 -0500 Subject: [PATCH] Make McMMOPlayerLevelUpEvent fully cancellable. --- .../experience/McMMOPlayerLevelUpEvent.java | 7 ------- .../nossr50/skills/utilities/SkillTools.java | 19 +++++++++++++++---- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/events/experience/McMMOPlayerLevelUpEvent.java b/src/main/java/com/gmail/nossr50/events/experience/McMMOPlayerLevelUpEvent.java index 2be27bb87..b46307bac 100644 --- a/src/main/java/com/gmail/nossr50/events/experience/McMMOPlayerLevelUpEvent.java +++ b/src/main/java/com/gmail/nossr50/events/experience/McMMOPlayerLevelUpEvent.java @@ -26,11 +26,4 @@ public class McMMOPlayerLevelUpEvent extends McMMOPlayerExperienceEvent { public int getLevelsGained() { return levelsGained; } - - /** - * @param levelsGained int number of levels gained in this event - */ - public void setLevelsGained(int levelsGained) { - this.levelsGained = levelsGained; - } } diff --git a/src/main/java/com/gmail/nossr50/skills/utilities/SkillTools.java b/src/main/java/com/gmail/nossr50/skills/utilities/SkillTools.java index c21ebfa09..15ae645b2 100644 --- a/src/main/java/com/gmail/nossr50/skills/utilities/SkillTools.java +++ b/src/main/java/com/gmail/nossr50/skills/utilities/SkillTools.java @@ -20,6 +20,7 @@ import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.config.AdvancedConfig; import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.HiddenConfig; +import com.gmail.nossr50.datatypes.McMMOPlayer; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent; import com.gmail.nossr50.locale.LocaleLoader; @@ -234,23 +235,33 @@ public class SkillTools { */ public static void xpCheckSkill(SkillType skillType, Player player, PlayerProfile profile) { int skillups = 0; + int xpRemoved = 0; if (profile.getSkillXpLevel(skillType) >= profile.getXpToLevel(skillType)) { while (profile.getSkillXpLevel(skillType) >= profile.getXpToLevel(skillType)) { if ((skillType.getMaxLevel() >= profile.getSkillLevel(skillType) + 1) && (Misc.getPowerLevelCap() >= Users.getPlayer(player).getPowerLevel() + 1)) { - profile.removeXp(skillType, profile.getXpToLevel(skillType)); + int xp = profile.getXpToLevel(skillType); + xpRemoved += xp; + + profile.removeXp(skillType, xp); skillups++; profile.skillUp(skillType, 1); - - McMMOPlayerLevelUpEvent eventToFire = new McMMOPlayerLevelUpEvent(player, skillType); - mcMMO.p.getServer().getPluginManager().callEvent(eventToFire); } else { profile.addLevels(skillType, 0); } } + McMMOPlayerLevelUpEvent eventToFire = new McMMOPlayerLevelUpEvent(player, skillType, skillups); + mcMMO.p.getServer().getPluginManager().callEvent(eventToFire); + + if (eventToFire.isCancelled()) { + profile.modifySkill(skillType, profile.getSkillLevel(skillType) - skillups); + profile.setSkillXpLevel(skillType, profile.getSkillXpLevel(skillType) + xpRemoved); + return; + } + String capitalized = StringUtils.getCapitalized(skillType.toString()); /* Spout Stuff */