
机械动力:理包机修复
修复了机械动力(Create)模组中再打包机的一个复制漏洞。
Create: Re-Packager Fix
这是一个针对机械动力(Create)模组的服务端修复模组,用于修补再打包机(Re-Packager)中的一项复制漏洞。当碎片包裹(fragmented package)所携带的物品数量不足以满足其订单的合成配方时,再打包机仍会生成一个数量为 0 的包裹条目——而打包机的输出逻辑随后会将其作为一个真实的物理包裹弹出,其中包含一份完整的配方材料,从而允许攻击者无限复制配方材料。本模组通过 Mixin 修补了 PackageRepackageHelper.repackBasedOnRecipes,从根源上消除了该复制漏洞,且不影响正常的打包行为。
漏洞详情
受影响版本: Create 6.0.8 (1.20.1)、6.0.10 (1.21.1) 以及 Create Fly 移植版 (1.21.11 / 26.2)。
- 在工厂测量计(Factory Gauge)上配置的合成安排不受物品栏校验约束——配方材料无需与请求的物品匹配(Create 仅在红石请求器(Redstone Requester)路径中检查此一致性;工厂测量计路径完全缺少此检查)。
- 当物品栏不足时,
repackBasedOnRecipes仍会生成一个packagesToCreate == 0的包裹条目。 - (核心问题)打包机的输出逻辑
PackagerBlockEntity.tick()在检查其数量之前就复制包裹(heldBox = entry.stack.copy()先于count--执行),因此数量为 0 的包裹会被当作真实包裹弹出——空物品栏凭空产生一个包含全套配方材料的包裹,可通过工厂测量计的循环补货请求无限利用。
相关的上游议题(均仍未关闭): #8082、#8046、#8155。上游提交 3e662789 仅修复了超大型配方材料变体(copyWithCount(1));核心缺陷仍未修复。
修复方案
通过 Mixin 对 PackageRepackageHelper.repackBasedOnRecipes 进行两阶段校验修补:
- 先检查——验证所有配方材料是否可用(NBT 精确匹配);若缺少任何一项,则中止整个轮次且不消耗任何物品。
- 后消耗——仅当所有材料确认可用后,统一扣除物品栏;无部分消耗,因此玩家永远不会损失已投入的材料。
- 零数量防护——当
packagesToCreate == 0(物品栏甚至无法支持一次合成)时,不生成任何包裹。
所有正常行为(库存充足、多配方订单等)与原版完全一致。
特性
- 仅服务端——客户端无需安装即可加入
- 不影响正常的打包/再打包功能
- 材料不足时通过常规再打包返还,而非被吞没
- 可与其他修复模组共存
验证
向再打包机喂入异常包裹(空物品栏 + 声称合成 64 次的订单):
- 未安装本模组:输出 1 个包含全套配方材料的包裹(复制漏洞)
- 安装本模组:输出 0 个包裹(已修复)
测试包裹命令记录在仓库的 TEST_PACKAGES.md 文件中。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。