适用客户端:Minecraft 1.21.11 / 2.1.2,以及 Minecraft 26.3 / 2.2.2。代理插件仍为 2.1.0,线协议仍为 v2。
旧版将代理接收客户端数据时的防滥用限制同时用于客户端接收服务器数据:每个真实秒最多 16,384 个 Minecraft 包、128 MiB 解压数据。服务器 /tick 高速运行、网络延迟后集中交付,都可能让合法下行在一个计量窗口内超过上限,触发 Zstd packet budget exceeded 或 Zstd receive budget exceeded 并关闭连接。
断连报告中该异常来自本模组的 BatchRouter,属于网络处理断连;仅凭这种报告不能认定整个游戏进程崩溃。报告本身不能确定服务器的实际 TPS 或各客户端延迟模组的设置。
公共库增加明确的接收方向策略。旧的六参数 Layout 构造默认采用 UNTRUSTED_CLIENT,保留原有代理保护;Fabric 客户端显式采用 TRUSTED_SERVER,不以固定每秒包数或字节数拒绝合法服务器下行,也不累计这两个禁用的窗口计数。
以下检查和处理仍生效:
- 每包长度、完整性、VarInt 溢出和方向对应的最大包长。
- 解压批次最大 8 MiB + 5 B、压缩帧最大 9 MiB、Zstd 历史窗口最大 8 MiB。
- 原生流控、读取超时、引用计数与断开释放;配置的逐包 accounting 回调仍执行。
- 代理仓库中的每秒 16,384 包 / 128 MiB 限制和 Velocity 原生 limiter 不变。
不新增自建延迟队列,不改压缩帧或协商格式。客户端与已有代理保持兼容。
1.21.11 分支同步采用已验证的 Via 出站边界修复,使普通编码后的包及 Via 自行注入的已转换包都经过正确的 Zstd/AES 路径。这是另一个既有兼容修复,不是本次预算异常的原因。
回归使用同一 Zstd 批次中的 20,000 个小包确定性复现旧上限,不依赖测试机器是否能在一秒内完成循环;同时验证跨批次与集中交付、默认代理策略、长度/窗口限制和真实 Fabric 网络管线。
自动化验证不能替代完整模组组合及实际服务器的 /tick 命令验收。它证明此固定速率限制不会继续导致客户端误断连,不保证任意高速 tick 下的帧率或所有累计队列内存。