java - 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。
解决方案
你没有提供足够的细节;您应该阅读“我如何提出一个好问题?” . 但是,您的 NullPointerException 很可能正在发生,因为null
如果地图中不存在该键,则将返回以下内容。
playerY.get(event.getPlayer())
当您将玩家添加到您的地图时,您不会在代码中向我们显示。您可以通过在尝试检索可能不存在的数据之前首先检查地图中是否存在玩家来解决此问题。
或者; 如果您只是想检测跳跃,而不是存储玩家最后的 Y 值,我假设您将这样做,您可以使用PlayerMoveEvent已经提供的信息。事件有getFrom()
和getTo()
方法。您可以检查getY()
来自该位置的值to
是否大于该位置的值。getY()
from
推荐阅读
- selection - Bokeh 1.0.4 - 使用交互式图例跨多个字形选择不包括所有字形
- javascript - Javascript 在 div 中放置元素
- excel - 将多个 csv 文件导入现有工作表
- dart - 为什么我的 setState 方法无法更改我的容器背景颜色?
- java - 如何在 Java 中删除 Array Generic 对象 Sack
- sql - 如何选择最多两列并按站分组
- arrays - 检查 json 中的两个数组是否具有相同的大小
- html - flex-wrap 不起作用,即使应用了 min-width
- sql - 多个加倍 JOIN 到同一个表
- azure-databricks - 在 DataBricks Notebook 中读取行值