Repository navigation
Refactor recipes / 重构配方结算并支持催化剂与来源筛选(26.1) - #137
Conversation
- 统一物品实体与容器槽位缓存,修复重复结算、回滚和溢出产物丢失 - 记录实际原料消费并支持原位催化剂预留、批次组件传递和来源过滤 - 明确提交阶段与完成事件,延后世界副作用并优化匹配及索引生命周期 - 增加配方守恒、来源隔离、序列化和异常路径游戏测试
🌿 Roseau API Breaking Change Report
🔴 recipe — 1 breaking change(s)
|
|
All checks are done. Here is my review. 代码审查摘要 — PR #137操作: opened( ✅ 我实际复算过的部分(结论:核心重构逻辑正确)
|
| PR 声称 | 状态 | 证据 |
|---|---|---|
| 重构配方结算 | ✅ | InWorldRecipe.matches/assemble + InWorldRecipeContext.accept/invalidate/assertPlanning + commitPhasesAreStable/failedCommitSuppressesEffects |
| 支持催化剂 | ✅ | HasItemIngredient.consume(CODEC + STREAM_CODEC 往返)、ItemConsumption、getConsumedItems/restoreConsumedItems/clearConsumedItems、ItemCacheSlotProvider 共享槽处理 |
| 支持来源筛选 | ✅ | ItemCache.getInput/getOutput(..., sourceFilter) 重载、ICacheElement.getSource/getSourceSlot、HasItemBase.getSourceFilter(库内暂无覆写者,属对外新增 API) |
| 新增回归测试 | 20 个 gametest 已实现且覆盖失败路径,但 CI 不构建 module.test、也无任何 job 传 -PrecipeTests → 实际不会被运行 |
|
| 面向 26.1 线 | ✅ | fff/26.1-recipe → dev/26.1,gradle.properties minecraft_version_range=[26.1,26.2) |
结论: COMMENT — 核心重构的等价性与失败安全性经我逐方法复算未发现会破坏现有调用方的缺陷(并修掉了 base 的负 grownCount、跨空隙漏扫、重复 sync、组件缺失抛异常等真实问题);合并前主要诉求是
说明:
gh auth status显示/opt/data/home/.config/gh/hosts.yml的 token 已失效(Active accountGugle2308,token invalid),因此本次未能用gh pr edit直接改标题。当前标题Refactor recipes偏笼统,建议改为:
Refactor in-world recipe settlement with catalysts and source filtering 重构配方结算并支持催化剂与来源筛选
🧪 测试建议
| 被测目标 | 推荐场景 | 优先级 |
|---|---|---|
ShapelessMatcher.checkItemCapacity |
谓词数 ≥ 6、候选集合部分重叠(迫使 BACKTRACK)与完全不相交(LINEAR)两条路径的结果一致性对拍:同一物品组合下"新实现 vs 逐排列回溯"必须给出相同 matches |
🔴 |
AbstractCacheElement.grow/rollbackGrow |
getCapacity(stack) < simulateCount(换成小容量物品)、grownCount == 0 时不产生悬挂操作、连续 grow/rollback 后 simulate 与快照严格对消 |
🔴 |
HasItemIngredient 序列化 |
count = 0 / 负数 JSON 与 max_efficiency = 0 的加载行为(确认是"拒绝加载"而不是服务端崩溃),以及旧数据包升级路径 |
🟡 |
SaveComponentToTag |
一次谓词消耗 2+ 个"部分带组件"的堆栈,断言结果组件确定(并固化"最后生效/首个生效"的语义) | 🟡 |
ItemCache.getOutput + SelectOutput |
同一 key+range 复用(事件只发一次)、事件取消后回落生成目的地、两次 endCache() 不重复生成 |
🟡 |
InWorldRecipeContext 生命周期 |
commit 后再次 matches/putAcceptor/afterCommit 抛 IllegalStateException;invalidate() 后 accept() 抛异常 |
🟢 |
ItemEntityCacheElement.sync |
未被改动的范围内物品实体不再重置 age 的行为是否符合预期(despawn 计时) | 🟢 |
由 Hermes Agent 审查
|
💾 Self-improvement review: Skill 'recipe-settlement-refactor-review' created. · Patched SKILL.md in skill 'recipe-settlement-refactor-review' (1 replacement). |
|
收到的是 closed 事件,按约束 1(closed/labeled → stop)处理,不发布任何审查评论。 PR #137( |
No description provided.