Bonjour,
Je ne sais pas trop ce que tu tentes de faire, mais bon ça pourrait être un bon début :
Java:
public class MyListener implements Listener {
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
Entity damager = event.getDamager();
Player attacker = null;
if(damager instanceof Player) {
// damager is a Player
attacker = (Player) damager;
}
else if(damager instanceof Projectile) {
// damager is a Projectile
ProjectileSource shooter = ((Projectile) damager).getShooter();
if(/* shooter != null && */ shooter instanceof Player)
attacker = (Player) shooter; // the projectile's shooter is a Player
}
if(attacker == null)
return; // cannot convert the damager into a Player
MyPlayer player = MyPlayer.get(attacker);
event.setDamage(DamageModifier.BASE, player.attributeMap().strength());
}
}
Tu peux prendre en compte les enchantements avec les
DamageModifiers, elle est dépréciée, mais a posteriori elle fonctionne.
Bon après tu peux aussi jeter un coup d’œil à
la javadoc, ça te permettra de ne pas te tromper de fonction et de récupérer les subtilités.
Là il ne prend pas en compte l'arme utilisée, donc que tu le frappes avec une boule de neige ou une hache en diamant ça fera les même dégâts. Par contre il prend bien en compte les enchantements et l'armure, parce que ceux-ci ne sont pas dans
DamageModifier#BASE
mais respectivement dans
DamageModifier#MAGIC
et dans
DamageModifier#ARMOR
.
Par ex., pour protéger 5 points de vie grâce à l'armure :
Java:
event.setDamage(DamageModifier.ARMOR, -5d);
Les dégâts finaux sont la somme de tous les modificateurs, et oui, si la somme est négative, cela soigne l'entité attaquée.
Cordialement,
ShE3py.