本帖最后由 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 有啥区别吗。。。
草 之前在写一个监听实体死亡获取击杀玩家的代码 就按照这个思路去写了(
(有没有一种可能,之前的思路也复杂了)
能跑就行(