Vie d'un joueur non affiché - plugin

Sala85

Massacreur de Mouton
12 Octobre 2020
36
2
18
22
Bonsoir,
J'ai essayé de coder le fait qu'on puisse voir la vie d'un joueur lorsque celui-ci est touché par le projectile d'un joueur (flèche avec arc j'imagine), je code en spigot 1.8.8 et voici mon code :
1653077321773.png

Bonne soirée,
Sala
 

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 129
162
461
247
21
Mìlhüsa
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
 

Sala85

Massacreur de Mouton
12 Octobre 2020
36
2
18
22
Ok merci pour la réponse, et forcément qu'avec un simple DamageCause.PROJECTILE ça n'allait pas marché x) !
Bonne journée,
Sala