gpt4 book ai didi

java - Java Bukkit 插件上的 RegisteredListener.callEvent 错误

转载 作者:行者123 更新时间:2023-12-01 12:45:30 26 4
gpt4 key购买 nike

我正在开发一个 Bukkit 插件,我正在开发的功能之一涉及一个监听器,它可以检测玩家何时右键单击床,并向他们发送消息并写入数据到 YML 文件(不是配置)。以前,只要与床交互,它就会执行此操作,但现在与床交互时,它会在控制台中显示错误。

这是我的听众:

public class listener
implements Listener
{
public static main plugin;

public listener(main instance)
{
plugin = instance;
}

@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) throws IOException{
File file = new File(listener.plugin.getDataFolder(), "beds.yml");
if(!file.exists()) {
file.createNewFile();
}
YamlConfiguration yml = YamlConfiguration.loadConfiguration(file);
Player p = event.getPlayer();
String dn = p.getDisplayName();
dn = ChatColor.stripColor(dn);
double x = p.getBedSpawnLocation().getX();
double z = p.getBedSpawnLocation().getZ();
double y = p.getBedSpawnLocation().getY();
World w = p.getBedSpawnLocation().getWorld();
String wn = w.getName();
if ((event.getAction() == Action.RIGHT_CLICK_BLOCK) {
if (event.getClickedBlock().getType() == Material.BED_BLOCK)
p.sendMessage(ChatColor.DARK_GREEN + "Bed home set!");
yml.set(dn + ".x", x);
yml.set(dn + ".y", y);
yml.set(dn + ".z", z);
yml.set(dn + ".world", wn);
try {
yml.save(file);
} catch (IOException ex) {
ex.printStackTrace();
}

}
}
}

这是我收到的错误:

http://pastebin.com/iYX27RnA (pastebin链接,因为它占用大量空间)

提前谢谢

最佳答案

您收到NullPointerException:

Caused by: java.lang.NullPointerException

当您的代码尝试调用值为 null 的对象上的方法时,会引发 NullPointerException。您的错误还指出错误位于您的 listener.java 类的第 37 行:

at me.Superior_Slime.bedhome.listener.onPlayerInteract(listener.java:37)

哪一行是:

double x = p.getBedSpawnLocation().getX();

问题是以下两件事之一:

  1. p 为空

  2. p.getBedSpawnLocation() 返回的值为 null

我们知道它不是 #1,因为不可能存在没有玩家的 PlayerInteractEvent,因此,它必须是 #2,即从 p 返回的值。 getBedSpawnLocation() 为 null。

问题是来自 PlayerInteractEvent 的 Player 没有床生成位置,因此 p.getBedSpawnLocation() 返回 null。然后,当您尝试调用它的另一个方法(例如 .getX())时,您会收到 NullPointerException,因为您尝试调用空对象的方法。

要解决此问题,您应该创建一个 if 语句来检查天气或玩家是否有床生成位置:

if(p.getBedSpawnLocation() != null){//the bed spawn location is not null
//code here
}

关于java - Java Bukkit 插件上的 RegisteredListener.callEvent 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24740909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com