本帖最后由 BlessAzek 于 2022-12-18 15:33 编辑 
emm,如题,
如果玩家是被击杀的,怎么获取击杀者?
我首先想到的就是 监听 PlayerDeathEvent 这个玩家死亡事件,但是这种方法只能获取到死亡的玩家,并不能获取到击杀者。
通过 Player.getKiller() 的返回值也是 null
下面的是我测试用的代码
复制代码
emm,如题,
如果玩家是被击杀的,怎么获取击杀者?
我首先想到的就是 监听 PlayerDeathEvent 这个玩家死亡事件,但是这种方法只能获取到死亡的玩家,并不能获取到击杀者。
通过 Player.getKiller() 的返回值也是 null
下面的是我测试用的代码
 
- @EventHandler
 
- static void onPlayerDeath(PlayerDeathEvent event) {
 
-         Player deathPlayer = event.getEntity();  // 这个是死亡的玩家
 
-         Player killer = deathPlayer.getKiller() // 这个是击杀者,但是返回了null,为什么?
 
- }
 
 
 
srds,有一句后面少了个分号
为什么不这样写呢
复制代码
为什么不这样写呢
-     @EventHandler
 
-     static void onPlayerDeath(@NotNull PlayerDeathEvent event) {
 
-         // 这个是死亡的玩家
 
-         Player deathPlayer = event.getEntity();
 
-         // 这个是击杀者,但是返回了null,为什么?
 
-         if (Objects.equals(Objects.requireNonNull(deathPlayer.getLastDamageCause()).getEntity().getType(), EntityType.PLAYER)) {
 
-             // debug only
 
-             System.out.println("击杀者是" + Objects.requireNonNull(deathPlayer.getLastDamageCause()).getEntity().getName());
 
-         }
 
- }
BlessAzek 发表于 2022-12-18 16:59
这... 为啥是玩家自己啊,我直接copy过来的
-     @EventHandler
 
-     static void onPlayerDeath(@NotNull PlayerDeathEvent event) {
 
-         // 这个是死亡的玩家
 
-         Player deathPlayer = event.getEntity();
 
-         // 这个是击杀者,但是返回了null,为什么?
 
-         EntityDamageByEntityEvent damageEvent = (EntityDamageByEntityEvent) deathPlayer.getLastDamageCause();
 
-         if (Objects.nonNull(damageEvent) && Objects.equals(damageEvent.getDamager().getType(), EntityType.PLAYER)) {
 
-             if (Objects.nonNull(((Player) damageEvent.getDamager()).getPlayer())) {
 
-                 // debug only
 
-                 System.out.println("击杀者是" + ((Player) damageEvent.getDamager()).getPlayer().getName());
 
-             }
 
-         }
 
- }
 本帖最后由 凌语丶 于 2022-12-19 17:07 编辑 
草 之前在写一个监听实体死亡获取击杀玩家的代码 就按照这个思路去写了(
(有没有一种可能,之前的思路也复杂了)
能跑就行(
丶米饭 发表于 2022-12-19 17:01
emm
判断了半天,这个我想问下跟killer 有啥区别吗。。。
草 之前在写一个监听实体死亡获取击杀玩家的代码 就按照这个思路去写了(
(有没有一种可能,之前的思路也复杂了)
能跑就行(
 
