首页 > 解决方案 > Spigot 跳转检测返回 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。

标签: javapluginsbukkit

解决方案


你没有提供足够的细节;您应该阅读“我如何提出一个好问题?” . 但是,您的 NullPointerException 很可能正在发生,因为null如果地图中不存在该键,则将返回以下内容。

playerY.get(event.getPlayer())

当您将玩家添加到您的地图时,您不会在代码中向我们显示。您可以通过在尝试检索可能不存在的数据之前首先检查地图中是否存在玩家来解决此问题。

或者; 如果您只是想检测跳跃,而不是存储玩家最后的 Y 值,我假设您将这样做,您可以使用PlayerMoveEvent已经提供的信息。事件有getFrom()getTo()方法。您可以检查getY()来自该位置的值to是否大于该位置的值。getY()from


推荐阅读