BlessAzek
本帖最后由 BlessAzek 于 2022-12-18 15:33 编辑

emm,如题,
如果玩家是被击杀的,怎么获取击杀者?


我首先想到的就是 监听 PlayerDeathEvent 这个玩家死亡事件,但是这种方法只能获取到死亡的玩家,并不能获取到击杀者。
通过 Player.getKiller() 的返回值也是 null

下面的是我测试用的代码

  1. @EventHandler
  2. static void onPlayerDeath(PlayerDeathEvent event) {
  3.         Player deathPlayer = event.getEntity();  // 这个是死亡的玩家
  4.         Player killer = deathPlayer.getKiller() // 这个是击杀者,但是返回了null,为什么?
  5. }


复制代码

凌语丶
srds,有一句后面少了个分号

为什么不这样写呢
  1.     @EventHandler
  2.     static void onPlayerDeath(@NotNull PlayerDeathEvent event) {
  3.         // 这个是死亡的玩家
  4.         Player deathPlayer = event.getEntity();
  5.         // 这个是击杀者,但是返回了null,为什么?
  6.         if (Objects.equals(Objects.requireNonNull(deathPlayer.getLastDamageCause()).getEntity().getType(), EntityType.PLAYER)) {
  7.             // debug only
  8.             System.out.println("击杀者是" + Objects.requireNonNull(deathPlayer.getLastDamageCause()).getEntity().getName());
  9.         }
  10.     }
复制代码

BlessAzek
凌语丶 发表于 2022-12-18 16:28
srds,有一句后面少了个分号

为什么不这样写呢

这... 为啥是玩家自己啊,我直接copy过来的





凌语丶
BlessAzek 发表于 2022-12-18 16:59
这... 为啥是玩家自己啊,我直接copy过来的
没有bug的代码是不完美的(
  1.     @EventHandler
  2.     static void onPlayerDeath(@NotNull PlayerDeathEvent event) {
  3.         // 这个是死亡的玩家
  4.         Player deathPlayer = event.getEntity();
  5.         // 这个是击杀者,但是返回了null,为什么?
  6.         EntityDamageByEntityEvent damageEvent = (EntityDamageByEntityEvent) deathPlayer.getLastDamageCause();
  7.         if (Objects.nonNull(damageEvent) && Objects.equals(damageEvent.getDamager().getType(), EntityType.PLAYER)) {
  8.             if (Objects.nonNull(((Player) damageEvent.getDamager()).getPlayer())) {
  9.                 // debug only
  10.                 System.out.println("击杀者是" + ((Player) damageEvent.getDamager()).getPlayer().getName());
  11.             }
  12.         }
  13.     }
复制代码

BlessAzek
凌语丶 发表于 2022-12-18 17:31
没有bug的代码是不完美的(

感谢大佬给的代码!!!

丶米饭
凌语丶 发表于 2022-12-18 17:31
没有bug的代码是不完美的(

emm
判断了半天,这个我想问下跟killer 有啥区别吗。。。

凌语丶
本帖最后由 凌语丶 于 2022-12-19 17:07 编辑
丶米饭 发表于 2022-12-19 17:01
emm
判断了半天,这个我想问下跟killer 有啥区别吗。。。

草 之前在写一个监听实体死亡获取击杀玩家的代码 就按照这个思路去写了(
(有没有一种可能,之前的思路也复杂了)
能跑就行(

第一页 上一页 下一页 最后一页