使用 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。