To prevent disguises remaining on players after death, and enderdragons from missing out on animations
This commit is contained in:
		@@ -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())) {
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user