本帖最后由 YuanYuanOwO 于 2020-12-18 00:34 编辑
是拿来做公告插件 并非聊天插件
paper1.16.4
出错段代码:
复制代码
这是后台报错信息
复制代码
或者能有个别的什么办法能实现发json给玩家也行
是拿来做公告插件 并非聊天插件
paper1.16.4
出错段代码:
- try {
- // Parse the message
- Object parsedMessage = Class.forName("net.minecraft.server." + v + ".IChatBaseComponent$ChatSerializer").getMethod("a", String.class).invoke(null, ChatColor.translateAlternateColorCodes("&".charAt(0), m));
- Object packetPlayOutChat = Class.forName("net.minecraft.server." + v + ".PacketPlayOutChat").getConstructor(Class.forName("net.minecraft.server." + v + ".IChatBaseComponent")).newInstance(parsedMessage);
- // Drill down to the playerConnection which calls the sendPacket method
- Object craftPlayer = Class.forName("org.bukkit.craftbukkit." + v + ".entity.CraftPlayer").cast(to);
- Object craftHandle = Class.forName("org.bukkit.craftbukkit." + v + ".entity.CraftPlayer").getMethod("getHandle").invoke(craftPlayer);
- Object playerConnection = Class.forName("net.minecraft.server." + v + ".EntityPlayer").getField("playerConnection").get(craftHandle);
- // Send the message packet
- Class.forName("net.minecraft.server." + v + ".PlayerConnection").getMethod("sendPacket", Class.forName("net.minecraft.server." + v + ".Packet")).invoke(playerConnection, packetPlayOutChat);
- } catch (Exception ignore) {
- ignore.printStackTrace();
- }
这是后台报错信息
- [00:08:40] [Server thread/WARN]: java.lang.NoSuchMethodException: net.minecraft.server.v1_16_R3.PacketPlayOutChat.<init>(net.minecraft.server.v1_16_R3.IChatBaseComponent)
- [00:08:40] [Server thread/WARN]: at java.base/java.lang.Class.getConstructor0(Class.java:3349)
- [00:08:40] [Server thread/WARN]: at java.base/java.lang.Class.getConstructor(Class.java:2151)
- [00:08:40] [Server thread/WARN]: at com.TeamNovus.AutoMessage.Models.MessageList.broadcastTo(MessageList.java:198)
- [00:08:40] [Server thread/WARN]: at com.TeamNovus.AutoMessage.Tasks.BroadcastTask.run(BroadcastTask.java:30)
- [00:08:40] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftTask.run(CraftTask.java:99)
- [00:08:40] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:468)
- [00:08:40] [Server thread/WARN]: at net.minecraft.server.v1_16_R3.MinecraftServer.b(MinecraftServer.java:1294)
- [00:08:40] [Server thread/WARN]: at net.minecraft.server.v1_16_R3.DedicatedServer.b(DedicatedServer.java:377)
- [00:08:40] [Server thread/WARN]: at net.minecraft.server.v1_16_R3.MinecraftServer.a(MinecraftServer.java:1209)
- [00:08:40] [Server thread/WARN]: at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:997)
- [00:08:40] [Server thread/WARN]: at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:178)
- [00:08:40] [Server thread/WARN]: at java.base/java.lang.Thread.run(Thread.java:834)
- [00:09:40] [Server thread/WARN]: java.lang.NoSuchMethodException: net.minecraft.server.v1_16_R3.PacketPlayOutChat.<init>(net.minecraft.server.v1_16_R3.IChatBaseComponent)
或者能有个别的什么办法能实现发json给玩家也行
你的反射错了
Object packetPlayOutChat = Class.forName("net.minecraft.server." + v + ".PacketPlayOutChat").getConstructor(Class.forName("net.minecraft.server." + v + ".IChatBaseComponent")).newInstance(parsedMessage);
没有这个构造函数,实际spigot反编译的代码
也就是需要3个参数
public PacketPlayOutChat(IChatBaseComponent ichatbasecomponent, ChatMessageType chatmessagetype, UUID uuid) {
this.a = ichatbasecomponent;
this.b = chatmessagetype;
this.c = uuid;
}
Object packetPlayOutChat = Class.forName("net.minecraft.server." + v + ".PacketPlayOutChat").getConstructor(Class.forName("net.minecraft.server." + v + ".IChatBaseComponent")).newInstance(parsedMessage);
没有这个构造函数,实际spigot反编译的代码
也就是需要3个参数
public PacketPlayOutChat(IChatBaseComponent ichatbasecomponent, ChatMessageType chatmessagetype, UUID uuid) {
this.a = ichatbasecomponent;
this.b = chatmessagetype;
this.c = uuid;
}