あるゲームを開発していて、この問題点に当たったのですが、
PlayerDeathEvent が発生した時点ではプレイヤーは死んでいません。
※正しくは違うのかもしれません。
PlayerDeathEvent が発生した後に死亡が確定しているように思います。
つまり、プレイヤーが死んだことをキーとするものを制作する場合、タイミングをずらして実行させる必要があります。
この問題のもっともわかりやすい例として、
Player#spigot().respawn
があります。
これを
@EventHandler
public void onDeath(PlayerDeathEvent e){
e.getEntity().spigot().respawn();
}
としてもうまくいきません。
正しくは
@EventHandler
public void onDeath(PlayerDeathEvent e){
new BukkitRunnable() {
e.getEntity().spigot().respawn();
}.runTaskLater(Plugin, 5L); // 20 で 1 秒
}
のようにしなければうまくいきません。