【问题标题】:Catch exception "PlayerInteractEvent" and checking location exist || Minecraft Plugin Spigot Bukkit捕获异常“PlayerInteractEvent”并检查位置是否存在 || Minecraft 插件 Spigot Bukkit
【发布时间】:2021-07-28 17:48:21
【问题描述】:

我有一个问题。 我有一个我正在尝试使用的我的世界服务器插件,但它不存在。

我收到以下错误:

无法将事件 PlayerInteractEvent 传递给 XXX org.bukkit.event.EventException:空 在 org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:319) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:589) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:576) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:483) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:450) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 net.minecraft.server.v1_16_R2.PlayerInteractManager.a(PlayerInteractManager.java:148) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 net.minecraft.server.v1_16_R2.PlayerConnection.a(PlayerConnection.java:1219) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 net.minecraft.server.v1_16_R2.PacketPlayInBlockDig.a(SourceFile:40) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 net.minecraft.server.v1_16_R2.PacketPlayInBlockDig.a(SourceFile:10) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 net.minecraft.server.v1_16_R2.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:19) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 net.minecraft.server.v1_16_R2.TickTask.run(SourceFile:18) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 net.minecraft.server.v1_16_R2.IAsyncTaskHandler.executeTask(SourceFile:144) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 net.minecraft.server.v1_16_R2.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 net.minecraft.server.v1_16_R2.IAsyncTaskHandler.executeNext(SourceFile:118) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 net.minecraft.server.v1_16_R2.MinecraftServer.ba(MinecraftServer.java:941) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 net.minecraft.server.v1_16_R2.MinecraftServer.executeNext(MinecraftServer.java:934) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 net.minecraft.server.v1_16_R2.IAsyncTaskHandler.awaitTasks(SourceFile:127) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 net.minecraft.server.v1_16_R2.MinecraftServer.sleepForTick(MinecraftServer.java:918) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 net.minecraft.server.v1_16_R2.MinecraftServer.w(MinecraftServer.java:850) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 net.minecraft.server.v1_16_R2.MinecraftServer.lambda$0(MinecraftServer.java:164) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] 在 java.lang.Thread.run(Thread.java:832) [?:?] 原因:java.lang.NullPointerException:无法调用“org.bukkit.Location.getBlockZ()”,因为“this.secondLocation”为空 在 XXX.PlayerInteractEventListener.onPlayerUse(PlayerInteractEventListener.java:128) ~[?:?] 在 jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] 在 jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) ~[?:?] 在 jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] 在 java.lang.reflect.Method.invoke(Method.java:564) ~[?:?] 在 org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:315) ~[spigot-1.16.3.jar:git-Spigot-57bbdd8-b8dd5ec] ... 21 更多

是否有 spigot 的例外列表?

在这种情况下,我应该使用 try 和 catch 捕获哪个异常?

谁能建议任何其他方法来检查给定位置是否存在?

【问题讨论】:

  • 可以添加代码PlayerInteractEventListener吗?你可能需要if (this.secondLocation == null) {...} else {...}

标签: java plugins minecraft bukkit


【解决方案1】:

您是否尝试过验证位置是否为空?

if (location != null){
   // Do your thing
}

【讨论】:

  • 嗨,这很有用,但在我的情况下,我有一个位置但没有坐标,当我尝试通过以下方式获取坐标时出现错误:'variable= location.getBlockX();'来自没有定义它们的对象。 (在下一步中,我增加这个变量并用这个值设置位置 X。)在这个阶段我不知道如何进行检查,所以我正在考虑使用 try and catch 异常。
【解决方案2】:

使用这个:

if (secondLocation != null) {
    int someVar = secondLocation.getBlockZ();
}

如果你想捕获异常,你可以使用这个:

try {
    int someVar = secondLocation.getBlockZ();
} catch (NullPointerException) {
    // Handle exception
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多