diff --git a/src/main/java/com/gmail/nossr50/datatypes/McMMOPlayer.java b/src/main/java/com/gmail/nossr50/datatypes/McMMOPlayer.java index 4b6bcdc52..a31b940cb 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/McMMOPlayer.java +++ b/src/main/java/com/gmail/nossr50/datatypes/McMMOPlayer.java @@ -96,8 +96,14 @@ public class McMMOPlayer { * @param xp Experience amount to add */ public void applyXpGain(SkillType skillType, int xp) { - mcMMO.p.getServer().getPluginManager().callEvent(new McMMOPlayerXpGainEvent(player, skillType, xp)); - profile.setSkillXpLevel(skillType, profile.getSkillXpLevel(skillType) + xp); + McMMOPlayerXpGainEvent event = new McMMOPlayerXpGainEvent(player, skillType, xp); + mcMMO.p.getServer().getPluginManager().callEvent(event); + + if (event.isCancelled()) { + return; + } + + profile.setSkillXpLevel(skillType, profile.getSkillXpLevel(skillType) + event.getXpGained()); SpoutHud spoutHud = profile.getSpoutHud(); diff --git a/src/main/java/com/gmail/nossr50/events/experience/McMMOPlayerExperienceEvent.java b/src/main/java/com/gmail/nossr50/events/experience/McMMOPlayerExperienceEvent.java index a0ffe2bae..28ecb575d 100644 --- a/src/main/java/com/gmail/nossr50/events/experience/McMMOPlayerExperienceEvent.java +++ b/src/main/java/com/gmail/nossr50/events/experience/McMMOPlayerExperienceEvent.java @@ -1,6 +1,7 @@ package com.gmail.nossr50.events.experience; import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; import org.bukkit.event.HandlerList; import org.bukkit.event.player.PlayerEvent; @@ -10,7 +11,8 @@ import com.gmail.nossr50.util.Users; /** * Generic event for mcMMO experience events. */ -public abstract class McMMOPlayerExperienceEvent extends PlayerEvent { +public abstract class McMMOPlayerExperienceEvent extends PlayerEvent implements Cancellable { + private boolean cancelled; protected SkillType skill; protected int skillLevel; @@ -45,4 +47,15 @@ public abstract class McMMOPlayerExperienceEvent extends PlayerEvent { public static HandlerList getHandlerList() { return handlers; } + + /** Following are required for Cancellable **/ + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } } diff --git a/src/main/java/com/gmail/nossr50/events/experience/McMMOPlayerXpGainEvent.java b/src/main/java/com/gmail/nossr50/events/experience/McMMOPlayerXpGainEvent.java index 82fc3d4ec..3278d3772 100644 --- a/src/main/java/com/gmail/nossr50/events/experience/McMMOPlayerXpGainEvent.java +++ b/src/main/java/com/gmail/nossr50/events/experience/McMMOPlayerXpGainEvent.java @@ -21,4 +21,11 @@ public class McMMOPlayerXpGainEvent extends McMMOPlayerExperienceEvent { public int getXpGained() { return xpGained; } + + /** + * @param xpGained int amount of experience gained in this event + */ + public void setXpGained(int xpGained) { + this.xpGained = xpGained; + } } diff --git a/src/main/java/com/gmail/nossr50/listeners/SelfListener.java b/src/main/java/com/gmail/nossr50/listeners/SelfListener.java index 8a4c60f12..98db0a589 100644 --- a/src/main/java/com/gmail/nossr50/listeners/SelfListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/SelfListener.java @@ -1,6 +1,7 @@ package com.gmail.nossr50.listeners; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import com.gmail.nossr50.mcMMO; @@ -15,7 +16,7 @@ public class SelfListener implements Listener { * * @param event The event to watch */ - @EventHandler + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerXpGain(McMMOPlayerXpGainEvent event) { int xp = event.getXpGained();