我试图检测球员何时跳跃,但我一直得到一个NullPointerExeption,我不知道是什么原因造成的。这是我的密码
private Map<Player, Double> playerY = new HashMap<>();
@org.bukkit.event.EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
if (event.getPlayer().getLocation().getY() > playerY.get(event.getPlayer())
&& event.getPlayer().getWorld().getBlockAt((int)event.getPlayer().getLocation().getX(), (int)(event.getPlayer().getLocation().getY() - 0.2), (int)event.getPlayer().getLocation().getZ()).getType() == (Material.AIR)) {
//My Code
}
}
我知道我可能错过了一些非常明显的东西,但我不知道为什么我要得到一个NullPointerException。
发布于 2021-03-10 12:53:13
您没有提供足够的详细信息;您应该阅读“我该怎么问一个好问题呢?”。但是,您的NullPointerException可能正在发生,因为如果映射中不存在密钥,下面的代码将返回null
。
playerY.get(event.getPlayer())
当您将播放机添加到您的地图上时,或如果您将播放机添加到地图中,您不会在代码中显示我们。在尝试检索可能不存在的数据之前,可以先检查播放机是否存在于地图中,从而修复此问题。
或者,如果您只是尝试检测跳转,而不是存储最后一个Y值(我假设您要这样做),您可以使用PlayerMoveEvent提供的信息。该事件具有getFrom()
和getTo()
方法。您可以检查来自to
位置的to
值是否大于来自from
位置的getY()
值。
https://stackoverflow.com/questions/66556817
复制相似问题