diff --git a/Changelog.txt b/Changelog.txt index 0c35d8bfb..ef92067b1 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,7 +1,11 @@ Version 2.1.228 - Fixed stack trace due to Spigot API break on EntityDamageEvent and EntityDamageByEntity event - (API) - Removed FakeEntityDamageEvent and FakeEntityDamageByEntityEvent, you can use our metadata constant to check if damage is from mcMMO instead - (API) - Temporarily removed McMMOEntityDamageByRuptureEvent, this needs to be reworked for the new spigot API changes + Fixed a stack trace due to Spigot API break on EntityDamageEvent and EntityDamageByEntity event + (API) - Removed FakeEntityDamageEvent and FakeEntityDamageByEntityEvent + (API) - Reworked McMMOEntityDamageByRuptureEvent, this no longer extends EntityDamageByEntityEvent, instead it extends EntityEvent + + Notes: + Some care went into keeping mcMMO compatible with older versions despite a big API break from Spigot, this may introduce some new bugs, so please report them if you run into any. + Version 2.1.227 Fixed bug where some text would not be displayed to players (Adventure dependency update) Repair sound effect from mcMMO can now be adjusted in Minecraft sound options (Thanks MithicSpirit) diff --git a/pom.xml b/pom.xml index 49d4e7db8..e65b832e7 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.nossr50.mcMMO mcMMO - 2.1.228-SNAPSHOT + 2.1.228 mcMMO https://github.com/mcMMO-Dev/mcMMO diff --git a/src/main/java/com/gmail/nossr50/events/skills/rupture/McMMOEntityDamageByRuptureEvent.java b/src/main/java/com/gmail/nossr50/events/skills/rupture/McMMOEntityDamageByRuptureEvent.java index 1ed3ae6b2..6612af381 100644 --- a/src/main/java/com/gmail/nossr50/events/skills/rupture/McMMOEntityDamageByRuptureEvent.java +++ b/src/main/java/com/gmail/nossr50/events/skills/rupture/McMMOEntityDamageByRuptureEvent.java @@ -1,19 +1,57 @@ -//package com.gmail.nossr50.events.skills.rupture; -// -//import com.gmail.nossr50.datatypes.player.McMMOPlayer; -//import org.bukkit.entity.Entity; -//import org.bukkit.event.entity.EntityDamageByEntityEvent; -//import org.jetbrains.annotations.NotNull; -// -//public class McMMOEntityDamageByRuptureEvent extends EntityDamageByEntityEvent { -// private final McMMOPlayer mcMMODamager; -// -// public McMMOEntityDamageByRuptureEvent(@NotNull McMMOPlayer damager, @NotNull Entity damagee, double damage) { -// this.mcMMODamager = damager; -// } -// -// @NotNull -// public McMMOPlayer getMcMMODamager() { -// return mcMMODamager; -// } -//} +package com.gmail.nossr50.events.skills.rupture; + +import com.gmail.nossr50.datatypes.player.McMMOPlayer; +import org.bukkit.entity.Entity; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.event.entity.EntityEvent; +import org.jetbrains.annotations.NotNull; + +public class McMMOEntityDamageByRuptureEvent extends EntityEvent implements Cancellable { + private final McMMOPlayer damager; + private final Entity damagee; + private double damage; + private boolean isCancelled = false; + private static final HandlerList handlers = new HandlerList(); + + public McMMOEntityDamageByRuptureEvent(@NotNull McMMOPlayer damager, @NotNull Entity damagee, double damage) { + super(damagee); + this.damager = damager; + this.damagee = damagee; + this.damage = damage; + } + + @NotNull + @Deprecated + public McMMOPlayer getMcMMODamager() { + return damager; + } + + public McMMOPlayer getDamager() { + return damager; + } + + public double getDamage() { + return damage; + } + + public void setDamage(double damage) { + this.damage = Math.max(0, damage); + } + + @Override + public boolean isCancelled() { + return isCancelled; + } + + @Override + public void setCancelled(boolean cancel) { + isCancelled = cancel; + } + + @NotNull + @Override + public HandlerList getHandlers() { + return handlers; + } +} diff --git a/src/main/java/com/gmail/nossr50/runnables/skills/RuptureTask.java b/src/main/java/com/gmail/nossr50/runnables/skills/RuptureTask.java index fe7bf9f11..f2e9c608f 100644 --- a/src/main/java/com/gmail/nossr50/runnables/skills/RuptureTask.java +++ b/src/main/java/com/gmail/nossr50/runnables/skills/RuptureTask.java @@ -1,9 +1,12 @@ package com.gmail.nossr50.runnables.skills; +import com.gmail.nossr50.datatypes.MobHealthbarType; import com.gmail.nossr50.datatypes.player.McMMOPlayer; +import com.gmail.nossr50.events.skills.rupture.McMMOEntityDamageByRuptureEvent; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.CancellableRunnable; import com.gmail.nossr50.util.MetadataConstants; +import com.gmail.nossr50.util.MobHealthbarUtils; import com.gmail.nossr50.util.skills.ParticleEffectUtils; import com.google.common.base.Objects; import org.bukkit.entity.LivingEntity; @@ -82,15 +85,21 @@ public class RuptureTask extends CancellableRunnable { //Ensure victim has health if (healthBeforeRuptureIsApplied > 0.01) { - // TODO: Needs updating for new spigot API - double damage = calculateAdjustedTickDamage(); //Use raw damage for Rupture + //Send a fake damage event + McMMOEntityDamageByRuptureEvent event = + new McMMOEntityDamageByRuptureEvent(ruptureSource, targetEntity, calculateAdjustedTickDamage()); + mcMMO.p.getServer().getPluginManager().callEvent(event); - if (damage <= 0 || healthBeforeRuptureIsApplied - damage <= 0) { + //Ensure the event wasn't cancelled and damage is still greater than 0 + double damage = event.getDamage(); //Use raw damage for Rupture + + if (event.isCancelled() || damage <= 0 || healthBeforeRuptureIsApplied - damage <= 0) return true; - } double damagedHealth = healthBeforeRuptureIsApplied - damage; + targetEntity.setHealth(damagedHealth); //Hurt entity without the unwanted side effects of damage()} + MobHealthbarUtils.handleMobHealthbars(targetEntity, damage, mcMMO.p); } return false; diff --git a/src/main/java/com/gmail/nossr50/util/MobHealthbarUtils.java b/src/main/java/com/gmail/nossr50/util/MobHealthbarUtils.java index d4a660ca1..3d956afe7 100644 --- a/src/main/java/com/gmail/nossr50/util/MobHealthbarUtils.java +++ b/src/main/java/com/gmail/nossr50/util/MobHealthbarUtils.java @@ -39,7 +39,7 @@ public final class MobHealthbarUtils { return; } - if (isBoss(target)) { + if (isBoss(target) || target instanceof Player) { return; }