Bonsoir,
Ce n'est pas le joueur qui applique des dégâts mais bien le projectile en lui-même, donc si tu veux envoyer un retour d'information au lanceur du projectile, il faut convertir l'entité attaquante en projectile afin de pouvoir récupérer l'éventuelle lanceur.
Java:
@EventHandler(priority = EventPriority.MONITOR)
public void onEntityDamageByEntity(EntityDamageByEntityEvent e) {
Entity damagee = e.getEntity();
if(!(damagee instanceof Player)) {
return;
}
Entity damager = e.getDamager();
if(!(damager instanceof Projectile)) {
return;
}
ProjectileSource pSource = ((Projectile) damager).getShooter();
if(!(pSource instanceof Player)) {
return;
}
Player shooter = (Player) pSource;
final double health = ((Player) damagee).getHealth() - e.getFinalDamage();
if(health > 0d) {
// TODO: utiliser « d' » si le nom du joueur commence par une voyelle
shooter.sendMessage("§3Points de vie de " + ((Player) damagee).getDisplayName() + "§r§3: " + (int) Math.ceil(health));
}
}
J'ai mit la priorité de l'évènement à
EventPriority.MONITOR
parce que cela garanti que tous les plugins modifiants/annulant l'évènement aient étés appelés avant (ce qui garanti que le joueur subira bien
e.getFinalDamage()
), cependant d'autres plugins avec la même priorité peuvent être exécutés après donc tu ne dois pas non plus modifier (augmenter/réduire/annuler) les dégâts dans cette priorité.
Cordialement,
ShE3py