LeavesMC / Leaves

Fork of Paper aimed at repairing broken vanilla properties.
https://leavesmc.org
Other
325 stars 34 forks source link

Bug:Error saving packet #221

Open CerealAxis opened 1 month ago

CerealAxis commented 1 month ago

服务端版本 LeavesMC Version

1.20.6-206-0d3dee8 (MC: 1.20.6)

预期的行为 Expected behavior

当调用ReplayAPI进行录制的时候,服务端无报错。

观测到的实际行为 Observed/Actual behavior

ReplayAPI无法按预期工作。且服务端会报错刷屏。日志如下:

[18:10:05 ERROR]: [Leaves] Error saving packet
[18:10:05 WARN]: io.netty.handler.codec.EncoderException: Sending unknown packet 'clientbound/minecraft:bundle'
[18:10:05 ERROR]: [Leaves] Error saving packet
[18:10:05 WARN]:        at net.minecraft.network.codec.IdDispatchCodec.encode(IdDispatchCodec.java:46)
[18:10:05 WARN]:        at net.minecraft.network.codec.IdDispatchCodec.encode(IdDispatchCodec.java:20)
[18:10:05 WARN]:        at org.leavesmc.leaves.replay.ReplayFile.getPacketBytes(ReplayFile.java:95)
[18:10:05 WARN]:        at org.leavesmc.leaves.replay.ReplayFile.savePacket(ReplayFile.java:121)
[18:10:05 WARN]:        at org.leavesmc.leaves.replay.Recorder.lambda$savePacket$5(Recorder.java:234)
[18:10:05 WARN]:        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
[18:10:05 WARN]:        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
[18:10:05 WARN]:        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
[18:10:05 WARN]:        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
[18:10:05 WARN]:        at java.base/java.lang.Thread.run(Thread.java:1583)
[18:10:05 WARN]: io.netty.handler.codec.EncoderException: Sending unknown packet 'clientbound/minecraft:bundle'
[18:10:05 WARN]:        at net.minecraft.network.codec.IdDispatchCodec.encode(IdDispatchCodec.java:46)
[18:10:05 WARN]:        at net.minecraft.network.codec.IdDispatchCodec.encode(IdDispatchCodec.java:20)
[18:10:05 WARN]:        at org.leavesmc.leaves.replay.ReplayFile.getPacketBytes(ReplayFile.java:95)
[18:10:05 WARN]:        at org.leavesmc.leaves.replay.ReplayFile.savePacket(ReplayFile.java:121)
[18:10:05 WARN]:        at org.leavesmc.leaves.replay.Recorder.lambda$savePacket$5(Recorder.java:234)
[18:10:05 WARN]:        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
[18:10:05 WARN]:        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
[18:10:05 WARN]:        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
[18:10:05 WARN]:        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
[18:10:05 WARN]:        at java.base/java.lang.Thread.run(Thread.java:1583)
[18:10:05 ERROR]: [Leaves] Error saving packet
[18:10:05 ERROR]: [Leaves] Error saving packet
[18:10:05 WARN]: io.netty.handler.codec.EncoderException: Sending unknown packet 'clientbound/minecraft:bundle'
[18:10:05 WARN]:        at net.minecraft.network.codec.IdDispatchCodec.encode(IdDispatchCodec.java:46)
[18:10:05 WARN]:        at net.minecraft.network.codec.IdDispatchCodec.encode(IdDispatchCodec.java:20)
[18:10:05 WARN]:        at org.leavesmc.leaves.replay.ReplayFile.getPacketBytes(ReplayFile.java:95)
[18:10:05 WARN]:        at org.leavesmc.leaves.replay.ReplayFile.savePacket(ReplayFile.java:121)
[18:10:05 WARN]:        at org.leavesmc.leaves.replay.Recorder.lambda$savePacket$5(Recorder.java:234)
[18:10:05 WARN]:        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
[18:10:05 WARN]:        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
[18:10:05 WARN]:        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
[18:10:05 WARN]:        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
[18:10:05 WARN]:        at java.base/java.lang.Thread.run(Thread.java:1583)
[18:10:05 WARN]: io.netty.handler.codec.EncoderException: Sending unknown packet 'clientbound/minecraft:bundle'
[18:10:05 ERROR]: [Leaves] Error saving packet
[18:10:05 WARN]:        at net.minecraft.network.codec.IdDispatchCodec.encode(IdDispatchCodec.java:46)
[18:10:05 WARN]:        at net.minecraft.network.codec.IdDispatchCodec.encode(IdDispatchCodec.java:20)
[18:10:05 WARN]:        at org.leavesmc.leaves.replay.ReplayFile.getPacketBytes(ReplayFile.java:95)
[18:10:05 WARN]:        at org.leavesmc.leaves.replay.ReplayFile.savePacket(ReplayFile.java:121)
[18:10:05 WARN]:        at org.leavesmc.leaves.replay.Recorder.lambda$savePacket$5(Recorder.java:234)
[18:10:05 WARN]:        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
[18:10:05 WARN]:        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
[18:10:05 WARN]:        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
[18:10:05 WARN]:        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
[18:10:05 WARN]:        at java.base/java.lang.Thread.run(Thread.java:1583)
[18:10:05 WARN]: io.netty.handler.codec.EncoderException: Sending unknown packet 'clientbound/minecraft:bundle'
[18:10:05 ERROR]: [Leaves] Error saving packet
[18:10:05 WARN]:        at net.minecraft.network.codec.IdDispatchCodec.encode(IdDispatchCodec.java:46)
[18:10:05 WARN]:        at net.minecraft.network.codec.IdDispatchCodec.encode(IdDispatchCodec.java:20)
[18:10:05 WARN]:        at org.leavesmc.leaves.replay.ReplayFile.getPacketBytes(ReplayFile.java:95)
[18:10:05 WARN]:        at org.leavesmc.leaves.replay.ReplayFile.savePacket(ReplayFile.java:121)
[18:10:05 WARN]:        at org.leavesmc.leaves.replay.Recorder.lambda$savePacket$5(Recorder.java:234)
[18:10:05 WARN]:        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
[18:10:05 WARN]:        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
[18:10:05 WARN]:        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
[18:10:05 WARN]:        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
[18:10:05 WARN]:        at java.base/java.lang.Thread.run(Thread.java:1583)
[18:10:05 WARN]: io.netty.handler.codec.EncoderException: Sending unknown packet 'clientbound/minecraft:bundle'

复现步骤 Steps/models to reproduce

  1. 启动Leaves 1.20.6版本
  2. 尝试使用ReplayAPI进行录制(如安装ICU插件)
  3. 查看控制台日志

插件与数据包列表。 Plugin and Datapack List.

服务端插件

[18:14:58 INFO]: Server Plugins (7):
[18:14:58 INFO]: Paper Plugins:
[18:14:58 INFO]:  - ISeeYou
[18:14:58 INFO]: Bukkit Plugins:
[18:14:58 INFO]:  - AngelChest, floodgate, Geyser-Spigot, *LiteInvitation, LuckPerms, TimeLimitDrop

服务端数据包

[18:16:07 INFO]: There are 3 data pack(s) enabled: [vanilla (built-in)], [file/bukkit (world)], [paper (built-in)]
[18:16:07 INFO]: There are no more data packs available

更多详细信息。 The more information.

Nothing.

Lumine1909 commented 1 month ago

看起来是bundle packet不兼容StreamCodec导致的 可以考虑直接忽略这部分包?

s-yh-china commented 1 month ago

不能忽略 只能单独处理

CerealAxis commented 1 month ago

忽略bundle packet这块包后leaves可以生成摄像头并录制,但由于replaymod暂无1.20.6版本,不知录制出的视频能否正常使用。

    private byte @NotNull [] getPacketBytes(Packet packet, ConnectionProtocol state) {
        ProtocolInfo<?> protocol = this.protocols.get(state);
        if (protocol == null) {
            System.err.println("Unknown protocol state " + state);
            return new byte[0];
        }

        ByteBuf buf = Unpooled.buffer();
        try {
            protocol.codec().encode(buf, packet);
        } catch (EncoderException e) {
            System.err.println("Error encoding packet: " + packet.getClass().getName());
            return new byte[0];
        }

        buf.readerIndex(0);
        byte[] ret = new byte[buf.readableBytes()];
        buf.readBytes(ret);
        buf.release();
        return ret;
    }
s-yh-china commented 1 month ago

那我们着急什么,我不想发1.20.6的正式版了其实

CerealAxis commented 1 month ago

好家伙 看这么快的嘛)

Bluemangoo commented 1 month ago

直接考虑1.21吧(

s-yh-china commented 5 hours ago

这个问题还存在吗?

CerealAxis commented 3 hours ago

暂无报错。但是leaves录制出的录像带是否可用需等待ReplayMod更新了1.21才知道。