Search in sources :

Example 1 with PlayerKilledPlayerEvent

use of com.palmergames.bukkit.towny.event.player.PlayerKilledPlayerEvent in project Towny by TownyAdvanced.

the class TownyEntityMonitorListener method onPlayerDeath.

/**
 * This handles PlayerDeathEvents on MONITOR in order to handle Towny features such as:
 * - DeathPayments,
 * - Jailing Players,
 * @param event The event.
 */
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlayerDeath(PlayerDeathEvent event) {
    TownyUniverse townyUniverse = TownyUniverse.getInstance();
    if (!TownyAPI.getInstance().isTownyWorld(event.getEntity().getWorld()))
        return;
    Player defenderPlayer = event.getEntity();
    Resident defenderResident = TownyUniverse.getInstance().getResident(defenderPlayer.getUniqueId());
    if (defenderResident == null) {
        // Usually an NPC or a Bot of some kind.
        return;
    }
    // Killed by another entity?
    if (defenderPlayer.getLastDamageCause() instanceof EntityDamageByEntityEvent) {
        EntityDamageByEntityEvent damageEvent = (EntityDamageByEntityEvent) defenderPlayer.getLastDamageCause();
        Entity attackerEntity = damageEvent.getDamager();
        Player attackerPlayer = null;
        Resident attackerResident = null;
        if (attackerEntity instanceof Projectile) {
            // Killed by projectile, try to narrow the true source of the kill.
            Projectile projectile = (Projectile) attackerEntity;
            if (projectile.getShooter() instanceof Player) {
                // Player shot a projectile.
                attackerPlayer = (Player) projectile.getShooter();
                attackerResident = townyUniverse.getResident(attackerPlayer.getUniqueId());
            } else {
                // Something else shot a projectile.
                try {
                    // Mob shot a projectile.
                    attackerEntity = (Entity) projectile.getShooter();
                } catch (Exception e) {
                // This would be a dispenser kill, should count as environmental death.
                }
            }
        } else if (attackerEntity instanceof Player) {
            // This was a player kill
            attackerPlayer = (Player) attackerEntity;
            attackerResident = townyUniverse.getResident(attackerPlayer.getUniqueId());
            if (attackerResident == null)
                // Probably an NPC.
                return;
        }
        // This was a suicide, don't award money or jail.
        if (attackerPlayer != null && attackerPlayer == defenderPlayer)
            return;
        /*
			 * Player has died by a player: 
			 * 
			 * - Fire PlayerKilledPlayerEvent.
			 * 
			 * - charge death payment,
			 * - check for jailing attacking residents,
			 */
        if (attackerPlayer != null && attackerResident != null) {
            PlayerKilledPlayerEvent deathEvent = new PlayerKilledPlayerEvent(attackerPlayer, defenderPlayer, attackerResident, defenderResident, defenderPlayer.getLocation(), event);
            BukkitTools.getPluginManager().callEvent(deathEvent);
            deathPayment(attackerPlayer, defenderPlayer, attackerResident, defenderResident);
            isJailingAttackers(attackerPlayer, defenderPlayer, attackerResident, defenderResident);
        /*
			 * Player has died from an entity but not a player & death price is not PVP only.
			 */
        } else if (!TownySettings.isDeathPricePVPOnly() && TownySettings.isChargingDeath()) {
            deathPayment(defenderPlayer, defenderResident);
        }
    /*
		 * Player has died from non-entity cause, ie: Environmental.
		 */
    } else {
        if (!TownySettings.isDeathPricePVPOnly() && TownySettings.isChargingDeath()) {
            deathPayment(defenderPlayer, defenderResident);
        }
    }
}
Also used : Entity(org.bukkit.entity.Entity) Player(org.bukkit.entity.Player) EntityDamageByEntityEvent(org.bukkit.event.entity.EntityDamageByEntityEvent) PlayerKilledPlayerEvent(com.palmergames.bukkit.towny.event.player.PlayerKilledPlayerEvent) Resident(com.palmergames.bukkit.towny.object.Resident) TownyUniverse(com.palmergames.bukkit.towny.TownyUniverse) Projectile(org.bukkit.entity.Projectile) EventHandler(org.bukkit.event.EventHandler)

Aggregations

TownyUniverse (com.palmergames.bukkit.towny.TownyUniverse)1 PlayerKilledPlayerEvent (com.palmergames.bukkit.towny.event.player.PlayerKilledPlayerEvent)1 Resident (com.palmergames.bukkit.towny.object.Resident)1 Entity (org.bukkit.entity.Entity)1 Player (org.bukkit.entity.Player)1 Projectile (org.bukkit.entity.Projectile)1 EventHandler (org.bukkit.event.EventHandler)1 EntityDamageByEntityEvent (org.bukkit.event.entity.EntityDamageByEntityEvent)1