package nautilus.game.arcade.stats; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDeathEvent; import nautilus.game.arcade.game.Game; public class KillEntityStatTracker extends StatTracker { private final String _statName; private EntityType _entityType; public KillEntityStatTracker(Game game, String statName, EntityType entityType) { super(game); _statName = statName; setEntityType(entityType); } @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void onEntityDeath(EntityDeathEvent event) { if (event.getEntity().getType() != getEntityType()) return; if (!(event.getEntity().getLastDamageCause() instanceof EntityDamageByEntityEvent)) return; EntityDamageByEntityEvent edbee = (EntityDamageByEntityEvent) event.getEntity(); Player damager = null; if (edbee.getDamager() instanceof Player) damager = (Player) edbee.getDamager(); else if (edbee.getDamager() instanceof Projectile && ((Projectile) edbee.getDamager()).getShooter() instanceof Player) damager = (Player) ((Projectile) edbee.getDamager()).getShooter(); if (damager != null) addStat(damager, getStatName(), 1, false, false); } public String getStatName() { return _statName; } public EntityType getEntityType() { return _entityType; } public void setEntityType(EntityType entityType) { _entityType = entityType; } }