好大一坨翔哟
本帖最后由 好大一坨翔哟 于 2022-5-16 15:11 编辑

rt,我想要得到EntityDamageEvent的攻击者而不是被攻击者,
然后就出现了 居然没有获取被攻击者的方式!这种事,
但是呢我发现一个类  EntityDamageByEntityEvent
他可以检测到攻击者,
但是我没办法把这两个放在一个方法里使用,
于是我就开始进行了我那非常sb的行为
一个方法监听两个事件 结果只能监听第一个传进去的事件(大佬们别笑)
  1. @org.bukkit.event.EventHandler
  2. public void onEntityDamage(EntityDamageEvent e1, EntityDamageByEntityEvent e2) {
  3.     double damage = e1.getDamage();
  4.     date = new Date();
  5.     Calendar rightNow = Calendar.getInstance();

  6.     if (e2.getDamager() instanceof Player) {
  7.         player = (Player)e2.getDamager();
  8.         Bukkit.getLogger().info(player.getName());
  9.     }
  10. }
复制代码



有木有大佬来解决这个问题啊
只要能同时获取 攻击者和被攻击就ok

检测到攻击者是为了加一个PAPI(小声bb)

解决方案:子类已经继承过父类。。。所以没必要监听两个事件了直接监听EntityDamageByEntityEvent 方法共享的


美味的曲奇
一个函数只能监听一个,哪有一个EventHandler监听两个的道理
直接用EntityDamageByEntityEvent获取攻击者不行吗

好大一坨翔哟
美味的曲奇 发表于 2022-5-14 18:04
一个函数只能监听一个,哪有一个EventHandler监听两个的道理
直接用EntityDamageByEntityEvent获取 ...

可是我没办法获得伤害了
应为我要改变伤害值

美味的曲奇
好大一坨翔哟 发表于 2022-5-14 18:07
可是我没办法获得伤害了
应为我要改变伤害值

EntityDamageByEntityEvent不行吗
它继承了EntityDamageEvent
哪有方法比父类少的道理

好大一坨翔哟
美味的曲奇 发表于 2022-5-14 18:16
EntityDamageByEntityEvent不行吗
它继承了EntityDamageEvent
哪有方法比父类少的道理 ...

。。。才发现继承了子类,感谢 问题解决了

结冰的离季
你可以参考我这获取攻击玩家的代码,考虑了弓箭等弹射物的情况

  1. @EventHandler(ignoreCancelled = true)
  2.     public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
  3.         Entity damager = event.getDamager();
  4.         Player player = null;
  5.         if (damager instanceof Player)
  6.             player = (Player) damager;
  7.         else if (damager instanceof Projectile) {
  8.             ProjectileSource shooter = ((Projectile) damager).getShooter();
  9.             if (shooter instanceof Player) {
  10.                 player = (Player) shooter;
  11.             }
  12.         }
  13. }
复制代码