diff --git a/Changelog.txt b/Changelog.txt index 837e193ba..a57a11b77 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -10,6 +10,8 @@ Key: Version 2.1.31 Fixed a bug where certain SubSkills did not properly send unlock or rank up notifications Fixed a bug where unlock notifications would send simultaneously for a specific skill (still happens if mmoedit changes all skill levels on a player at once) + Fixed NPE with grabbing offline player skill ranks through certain API methods (thanks Ineusia) + Updated German language locale (thanks OverCrave) Version 2.1.30 Fixed double drops behaving oddly diff --git a/src/main/java/com/gmail/nossr50/commands/experience/MmoeditCommand.java b/src/main/java/com/gmail/nossr50/commands/experience/MmoeditCommand.java index d5d6de39a..ded4aaa18 100644 --- a/src/main/java/com/gmail/nossr50/commands/experience/MmoeditCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/experience/MmoeditCommand.java @@ -36,7 +36,7 @@ public class MmoeditCommand extends ExperienceCommand { return; } - EventUtils.handleLevelChangeEvent(player, skill, value, xpRemoved, value > skillLevel, XPGainReason.COMMAND); + EventUtils.handleLevelChangeEventEdit(player, skill, value, xpRemoved, value > skillLevel, XPGainReason.COMMAND, skillLevel); } @Override diff --git a/src/main/java/com/gmail/nossr50/util/EventUtils.java b/src/main/java/com/gmail/nossr50/util/EventUtils.java index e807e01c2..a96474f35 100644 --- a/src/main/java/com/gmail/nossr50/util/EventUtils.java +++ b/src/main/java/com/gmail/nossr50/util/EventUtils.java @@ -198,6 +198,22 @@ public class EventUtils { return !isCancelled; } + public static boolean handleLevelChangeEventEdit(Player player, PrimarySkillType skill, int levelsChanged, float xpRemoved, boolean isLevelUp, XPGainReason xpGainReason, int oldLevel) { + McMMOPlayerLevelChangeEvent event = isLevelUp ? new McMMOPlayerLevelUpEvent(player, skill, levelsChanged - oldLevel, xpGainReason) : new McMMOPlayerLevelDownEvent(player, skill, levelsChanged, xpGainReason); + mcMMO.p.getServer().getPluginManager().callEvent(event); + + boolean isCancelled = event.isCancelled(); + + if (isCancelled) { + PlayerProfile profile = UserManager.getPlayer(player).getProfile(); + + profile.modifySkill(skill, profile.getSkillLevel(skill) - (isLevelUp ? levelsChanged : -levelsChanged)); + profile.addXp(skill, xpRemoved); + } + + return !isCancelled; + } + /** * Simulate a block break event. *