diff --git a/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java b/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java index 53b9bb66c..c280d160b 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java +++ b/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java @@ -777,7 +777,7 @@ public class McMMOPlayer { return; } - if (EventUtils.callPlayerAbilityActivateEvent(player, ability).isCancelled()) { + if (!EventUtils.handlePlayerAbilityActivateEvent(player, ability)) { return; } diff --git a/src/main/java/com/gmail/nossr50/events/abilities/McMMOPlayerAbilityEvent.java b/src/main/java/com/gmail/nossr50/events/abilities/McMMOPlayerAbilityEvent.java index b27f4c8cc..377158c5d 100644 --- a/src/main/java/com/gmail/nossr50/events/abilities/McMMOPlayerAbilityEvent.java +++ b/src/main/java/com/gmail/nossr50/events/abilities/McMMOPlayerAbilityEvent.java @@ -9,22 +9,39 @@ import com.gmail.nossr50.datatypes.skills.SkillType; public abstract class McMMOPlayerAbilityEvent extends PlayerEvent { private AbilityType ability; + private boolean useParticleEffects; @Deprecated protected McMMOPlayerAbilityEvent(Player player, SkillType skill) { super(player); ability = skill.getAbility(); + useParticleEffects = true; } protected McMMOPlayerAbilityEvent(Player player, AbilityType ability) { super(player); this.ability = ability; + this.useParticleEffects = true; + } + + protected McMMOPlayerAbilityEvent(Player player, AbilityType ability, boolean useParticleEffects) { + super(player); + this.ability = ability; + this.useParticleEffects = useParticleEffects; } public AbilityType getAbility() { return ability; } + public boolean useParticleEffects() { + return useParticleEffects; + } + + public void shouldUseParticleEffects(boolean useParticleEffects) { + this.useParticleEffects = useParticleEffects; + } + /** Rest of file is required boilerplate for custom events **/ private static final HandlerList handlers = new HandlerList(); diff --git a/src/main/java/com/gmail/nossr50/runnables/skills/AbilityDisableTask.java b/src/main/java/com/gmail/nossr50/runnables/skills/AbilityDisableTask.java index 5049d69d8..21fe8f62f 100644 --- a/src/main/java/com/gmail/nossr50/runnables/skills/AbilityDisableTask.java +++ b/src/main/java/com/gmail/nossr50/runnables/skills/AbilityDisableTask.java @@ -9,7 +9,6 @@ import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.datatypes.skills.AbilityType; import com.gmail.nossr50.util.EventUtils; import com.gmail.nossr50.util.Misc; -import com.gmail.nossr50.util.skills.ParticleEffectUtils; import com.gmail.nossr50.util.skills.PerksUtils; import com.gmail.nossr50.util.skills.SkillUtils; @@ -46,18 +45,11 @@ public class AbilityDisableTask extends BukkitRunnable { break; } - EventUtils.callAbilityDeactivateEvent(player, ability); + EventUtils.handleAbilityDeactivateEvent(player, ability); mcMMOPlayer.setAbilityMode(ability, false); mcMMOPlayer.setAbilityInformed(ability, false); - ParticleEffectUtils.playAbilityDisabledEffect(player); - - if (mcMMOPlayer.useChatNotifications()) { - player.sendMessage(ability.getAbilityOff()); - } - - SkillUtils.sendSkillMessage(player, ability.getAbilityPlayerOff(player)); new AbilityCooldownTask(mcMMOPlayer, ability).runTaskLaterAsynchronously(mcMMO.p, PerksUtils.handleCooldownPerks(player, ability.getCooldown()) * Misc.TICK_CONVERSION_FACTOR); } } diff --git a/src/main/java/com/gmail/nossr50/util/EventUtils.java b/src/main/java/com/gmail/nossr50/util/EventUtils.java index 2c44dbb56..67e12ccd9 100644 --- a/src/main/java/com/gmail/nossr50/util/EventUtils.java +++ b/src/main/java/com/gmail/nossr50/util/EventUtils.java @@ -35,13 +35,29 @@ import com.gmail.nossr50.events.skills.repair.McMMOPlayerRepairCheckEvent; import com.gmail.nossr50.events.skills.unarmed.McMMOPlayerDisarmEvent; import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.util.player.UserManager; +import com.gmail.nossr50.util.skills.ParticleEffectUtils; +import com.gmail.nossr50.util.skills.SkillUtils; public class EventUtils { - public static McMMOPlayerAbilityActivateEvent callPlayerAbilityActivateEvent(Player player, AbilityType ability) { + public static boolean handlePlayerAbilityActivateEvent(Player player, AbilityType ability) { McMMOPlayerAbilityActivateEvent event = new McMMOPlayerAbilityActivateEvent(player, ability); mcMMO.p.getServer().getPluginManager().callEvent(event); - return event; + boolean isCancelled = event.isCancelled(); + + if (!isCancelled) { + if (event.useParticleEffects()) { + ParticleEffectUtils.playAbilityEnabledEffect(player); + } + + if (UserManager.getPlayer(player).useChatNotifications()) { + player.sendMessage(ability.getAbilityOn()); + } + + SkillUtils.sendSkillMessage(player, ability.getAbilityPlayer(player)); + } + + return !isCancelled; } public static FakePlayerAnimationEvent callFakeArmSwingEvent(Player player) { @@ -124,11 +140,19 @@ public class EventUtils { return !isCancelled; } - public static McMMOPlayerAbilityDeactivateEvent callAbilityDeactivateEvent(Player player, AbilityType ability) { + public static void handleAbilityDeactivateEvent(Player player, AbilityType ability) { McMMOPlayerAbilityDeactivateEvent event = new McMMOPlayerAbilityDeactivateEvent(player, ability); mcMMO.p.getServer().getPluginManager().callEvent(event); - return event; + if (event.useParticleEffects()) { + ParticleEffectUtils.playAbilityDisabledEffect(player); + } + + if (UserManager.getPlayer(player).useChatNotifications()) { + player.sendMessage(ability.getAbilityOff()); + } + + SkillUtils.sendSkillMessage(player, ability.getAbilityPlayerOff(player)); } public static McMMOPlayerFishingTreasureEvent callFishingTreasureEvent(Player player, ItemStack treasureDrop, int treasureXp, Map enchants) {