常见问题

十三条问答 · 返回总条目

拉弓包(Pull Bow)是什么?
Minecraft Java 版 1.17+ 中的一个复合包:由 S32/C0F 序号往返、C08、半个 C07 与移动包族在同一 tick 内依次发出、由服务端按顺序处理,不是单独注册的包类型。
拉弓包是 S2C 包还是 C2S 包?
两侧都有内容:S2C 一侧是序号往返(S32/C0F)与位置校正(S08),C2S 一侧是 C08、半个 C07 与移动包族。C08 复合载荷说认为只有 C2S 一侧成立。
拉弓包的数据包 ID 是多少?
没有独立分配的 ID。线上看到的是组成它的几个原版包各自带着自己的 ID 连续发出;官方映射里也不存在对应的类。
触发拉弓包的前置条件是什么?
主手必须持弓,并且本地 getTicksUsingItem() 达到 20,即持续拉弓满 1 秒。握手说与融合说还要求先完成 S32 与 C0F 的序号往返。
为什么蓄力满了还是发不出去?
触发是概率性的:同一 tick 内的对齐能否成功,取决于客户端在那一 tick 里还剩多少余量。本文不给出具体概率数值——现有说法里的这类数字都没有可复现的来源。各模型对概率来源的解释不同,见理论模型。
补发了 C06 但服务端没有下发首包,是什么原因?
按握手说的解释,问题通常不在 C06,而在半个 C07 没有和 S32、C0F、C08 落在同一个 tick 内。该说法把这类失败归因于服务端对连续包的处理窗口宽窄不一。
发包顺序可以调换吗?
不可以。握手说要求先收 S32 并用 C0F 回带 id,再发 C08 与半个 C07;顺序错误或超出 1 tick 都不会触发。完整顺序见握手序列。
哪种理论模型是对的?
没有定论。C08 复合载荷说是主流,握手说是二流说法,融合说认为两者描述的是同一件事的不同层面。三种说法都缺少完整抓包记录。
是谁最早发现的?
发包行为最早见于早期的反作弊讨论,没有留下具名记录。目前流传的描述都晚于这些讨论本身。
能抓包看到拉弓包吗?怎么抓?
能抓到组成它的那几个包。在客户端与本地服务端之间抓,按 tick 对齐后可以看到 C08 与 C07 落在同一 tick,各自带着自己的长度前缀与 ID。服务端不会合并它们,而是按到达顺序逐个处理——效果来自这个先后。
1.17 和 1.21 有什么区别?
两处差别。S32 / C0F 这对 Ping / Pong 是 1.17 才有的,1.16 及更早的同一编号是事务确认包;Play 状态的包 ID 逐版本重排。所以关于拉弓包的讨论基本都以 1.17 以后为准。
可以用数据包或资源包做出来吗?
不行。数据包与资源包都改动不了协议层的包定义,只能影响服务端逻辑或客户端资源。要引入新的包只能通过自定义载荷,或直接修改协议实现。
为什么在官方映射里搜不到 PullBow?
因为拉弓包是复合包,不是一个类。官方映射里只有它的组成包,所以搜 PullBow 什么也找不到——这是预期的结果,不是资料缺失。组成清单见构成。