Spigot 跳转检测返回 NullPointerException

Spigot Jump Detection Returning NullPointerException

我试图检测玩家何时跳跃,但我一直收到 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。

您没有提供足够的详细信息;你应该阅读 'How do I ask a good question?'。但是,您的 NullPointerException 很可能正在发生,因为如果映射中不存在键,则以下内容将 return null

playerY.get(event.getPlayer())

您没有在代码中向我们展示您何时或是否曾经将播放器添加到您的地图。您可以通过在尝试检索可能不存在的数据之前首先检查玩家是否存在于地图中来解决此问题。

或者;如果你只是想检测跳跃,而不是存储玩家最后的 Y 值,我假设你会这样做,你可以使用 from 中的 PlayerMoveEvent. The event has getFrom() and getTo() methods. You could check if the getY() from the to location is greater than the getY() 值已经提供的信息位置。