diff --git a/src/me/libraryaddict/disguise/DisguiseListener.java b/src/me/libraryaddict/disguise/DisguiseListener.java index 7df9cf30..c3686329 100644 --- a/src/me/libraryaddict/disguise/DisguiseListener.java +++ b/src/me/libraryaddict/disguise/DisguiseListener.java @@ -19,6 +19,7 @@ import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.vehicle.VehicleEnterEvent; import org.bukkit.event.vehicle.VehicleExitEvent; import org.bukkit.scheduler.BukkitRunnable; @@ -103,6 +104,16 @@ public class DisguiseListener implements Listener { } } + @EventHandler + public void onRespawn(PlayerRespawnEvent event) { + Disguise[] disguises = DisguiseAPI.getDisguises(event.getPlayer()); + for (Disguise disguise : disguises) { + if (disguise.isRemoveDisguiseOnDeath()) { + disguise.removeDisguise(); + } + } + } + @EventHandler public void onRightClick(PlayerInteractEntityEvent event) { if (disguiseSlap.containsKey(event.getPlayer().getName())) { diff --git a/src/me/libraryaddict/disguise/disguisetypes/Disguise.java b/src/me/libraryaddict/disguise/disguisetypes/Disguise.java index e0dcb520..2ddca402 100644 --- a/src/me/libraryaddict/disguise/disguisetypes/Disguise.java +++ b/src/me/libraryaddict/disguise/disguisetypes/Disguise.java @@ -189,16 +189,8 @@ public abstract class Disguise { // This is to ensure that this disguise isn't removed while clients think its the real entity // The delay is because if it sends the destroy entity packets straight away, then it means no death animation // This is probably still a problem for wither and enderdragon deaths. - if (deadTicks++ > 30) { - - if (getEntity() instanceof Player ? - - (Bukkit.getPlayerExact(((Player) getEntity()).getName()) == null ? !isKeepDisguiseOnPlayerLogout() - : !isKeepDisguiseOnPlayerDeath()) - - : - - (!isKeepDisguiseOnEntityDespawn() || getEntity().isDead())) { + if (deadTicks++ > (getType() == DisguiseType.ENDER_DRAGON ? 200 : 20)) { + if (isRemoveDisguiseOnDeath()) { removeDisguise(); } else { entity = null; @@ -369,6 +361,20 @@ public abstract class Disguise { return false; } + /** + * Internal use + */ + public boolean isRemoveDisguiseOnDeath() { + return getEntity() instanceof Player ? + + (Bukkit.getPlayerExact(((Player) getEntity()).getName()) == null ? !isKeepDisguiseOnPlayerLogout() + : !isKeepDisguiseOnPlayerDeath()) + + : + + (!isKeepDisguiseOnEntityDespawn() || getEntity().isDead()); + } + public boolean isSelfDisguiseSoundsReplaced() { return hearSelfDisguise; }