2
0
Эх сурвалжийг харах

Make McMMOPlayerXPGainEvent cancellable.

GJ 12 жил өмнө
parent
commit
0701169a7e

+ 8 - 2
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();
 

+ 14 - 1
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;
+    }
 }

+ 7 - 0
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;
+    }
 }

+ 2 - 1
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();