使用 Craftbukkits API 发送数据包无效
Sending packets using Craftbukkits API not working
我一直在尝试使用多种不同的方法向玩家发送 JSON 原始消息,其中 none 似乎有效。我尝试过的一件事是这样做:
String json = "{text:\"Test!\",hoverEvent:{action:show_text,value:\"test\"}}";
PacketPlayOutChat packet = new PacketPlayOutChat(ChatSerializer.a(json), true);
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
现在eclipse验证代码时,没有错误出现,只有当服务器运行这段代码时,它才会给我这个错误:
java.lang.NoClassDefFoundError: net/minecraft/server/v1_7_R3/Packet
at bukkit.pangea.terms.Main.registerCommands(Main.java:31) ~[?:?]
at bukkit.pangea.terms.Main.onEnable(Main.java:21) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) ~[c
raftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader
.java:335) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManage
r.java:405) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.craftbukkit.v1_8_R1.CraftServer.loadPlugin(CraftServer.jav
a:356) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.craftbukkit.v1_8_R1.CraftServer.enablePlugins(CraftServer.
java:316) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.craftbukkit.v1_8_R1.CraftServer.reload(CraftServer.java:74
6) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.Bukkit.reload(Bukkit.java:534) [craftbukkit.jar:git-Spigot
-952179b-e87122e]
at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:
25) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:14
1) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.craftbukkit.v1_8_R1.CraftServer.dispatchCommand(CraftServe
r.java:646) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.craftbukkit.v1_8_R1.CraftServer.dispatchServerCommand(Craf
tServer.java:632) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at net.minecraft.server.v1_8_R1.DedicatedServer.aM(DedicatedServer.java:
353) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:3
17) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:6
23) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java
:526) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at java.lang.Thread.run(Unknown Source) [?:1.7.0_71]
Caused by: java.lang.ClassNotFoundException: net.minecraft.server.v1_7_R3.Packet
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.
java:91) ~[craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.
java:86) ~[craftbukkit.jar:git-Spigot-952179b-e87122e]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.7.0_71]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.7.0_71]
... 18 more
我尝试过的很多其他事情也给了我类似的错误。如果有人能帮我解决这个问题,那将非常有帮助,谢谢。
好吧,您可能在服务器上使用了另一个 spigot/bukkit jar,而不是您使用的。使用完全一样。否则找不到服务器Packet版本的主要class
java.lang.NoClassDefFoundError: net/minecraft/server/v1_7_R3/Packet
这里说找不到class。您在服务器上使用哪个 Spigot/Bukkit 版本?你用哪个来开发?
你的方法在我的 spigot/craftbukkit 版本中工作得很好,尽管我使用的似乎是更新版本 (1.8.3),其中 PacketPlayOutChat 的构造函数将一个字节作为第二个参数而不是布尔值。该字节(值为 1 或 2)决定聊天消息是正常发送还是显示在操作栏上方。我会使用 BuildTools.
将你的 craftbukkit/spigot jar 更新到最新版本
您的项目构建路径中需要有更高版本的 Spigot。如果您不能按照上面的答案所述构建它,那么您可以改为依赖服务器使用的 jar。
我一直在尝试使用多种不同的方法向玩家发送 JSON 原始消息,其中 none 似乎有效。我尝试过的一件事是这样做:
String json = "{text:\"Test!\",hoverEvent:{action:show_text,value:\"test\"}}";
PacketPlayOutChat packet = new PacketPlayOutChat(ChatSerializer.a(json), true);
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
现在eclipse验证代码时,没有错误出现,只有当服务器运行这段代码时,它才会给我这个错误:
java.lang.NoClassDefFoundError: net/minecraft/server/v1_7_R3/Packet
at bukkit.pangea.terms.Main.registerCommands(Main.java:31) ~[?:?]
at bukkit.pangea.terms.Main.onEnable(Main.java:21) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) ~[c
raftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader
.java:335) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManage
r.java:405) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.craftbukkit.v1_8_R1.CraftServer.loadPlugin(CraftServer.jav
a:356) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.craftbukkit.v1_8_R1.CraftServer.enablePlugins(CraftServer.
java:316) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.craftbukkit.v1_8_R1.CraftServer.reload(CraftServer.java:74
6) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.Bukkit.reload(Bukkit.java:534) [craftbukkit.jar:git-Spigot
-952179b-e87122e]
at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:
25) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:14
1) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.craftbukkit.v1_8_R1.CraftServer.dispatchCommand(CraftServe
r.java:646) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.craftbukkit.v1_8_R1.CraftServer.dispatchServerCommand(Craf
tServer.java:632) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at net.minecraft.server.v1_8_R1.DedicatedServer.aM(DedicatedServer.java:
353) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:3
17) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:6
23) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java
:526) [craftbukkit.jar:git-Spigot-952179b-e87122e]
at java.lang.Thread.run(Unknown Source) [?:1.7.0_71]
Caused by: java.lang.ClassNotFoundException: net.minecraft.server.v1_7_R3.Packet
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.
java:91) ~[craftbukkit.jar:git-Spigot-952179b-e87122e]
at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.
java:86) ~[craftbukkit.jar:git-Spigot-952179b-e87122e]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.7.0_71]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.7.0_71]
... 18 more
我尝试过的很多其他事情也给了我类似的错误。如果有人能帮我解决这个问题,那将非常有帮助,谢谢。
好吧,您可能在服务器上使用了另一个 spigot/bukkit jar,而不是您使用的。使用完全一样。否则找不到服务器Packet版本的主要class
java.lang.NoClassDefFoundError: net/minecraft/server/v1_7_R3/Packet
这里说找不到class。您在服务器上使用哪个 Spigot/Bukkit 版本?你用哪个来开发?
你的方法在我的 spigot/craftbukkit 版本中工作得很好,尽管我使用的似乎是更新版本 (1.8.3),其中 PacketPlayOutChat 的构造函数将一个字节作为第二个参数而不是布尔值。该字节(值为 1 或 2)决定聊天消息是正常发送还是显示在操作栏上方。我会使用 BuildTools.
将你的 craftbukkit/spigot jar 更新到最新版本您的项目构建路径中需要有更高版本的 Spigot。如果您不能按照上面的答案所述构建它,那么您可以改为依赖服务器使用的 jar。