Skip to content

Fix fishtank recipe bug 修复鱼缸加工bug#83

Merged
QiuShui1012 merged 1 commit into
dev/1.21.1from
dev/fix3-21
Jul 13, 2026
Merged

Fix fishtank recipe bug 修复鱼缸加工bug#83
QiuShui1012 merged 1 commit into
dev/1.21.1from
dev/fix3-21

Conversation

@WhereisFff

Copy link
Copy Markdown
Contributor

No description provided.

@Gugle2308

Copy link
Copy Markdown

代码审查摘要

PR #83 — Fix fishtank recipe bug / 修复鱼缸加工bug

Action: opened
Repo: Anvil-Dev/AnvilLib
File: module.recipe/.../InWorldRecipe.java
Changes: +17 / -5 行,1 个文件

结论:批准 ✅ 修复正确,逻辑完整。


🐛 Bug 分析

InWorldRecipe.matches() 有两个问题:

  1. 匹配失败时错误清理nonConflictingconflicting 不匹配时直接调用 context.getStack().clear(),只清空了 List 引用但未调用 context.pop(),导致已压入的 predicate 未能正确回退。

  2. 匹配成功时误清理初始 predicatecontext.getStack().forEach(p -> p.clearStack(context)) 遍历了全部 predicate,包括匹配前已经存在于世界中的初始 predicate。clearStack() 标记物品"已消耗",导致初始物品被错误消耗——这就是鱼缸加工 bug 的根源。


🔧 修复验证

# 改动 正确性
1 增加 initialStackSize = context.getStack().size() 作为快照 ✅ 在 predicate 操作前捕获,值正确
2 nonConflicting 失败时调用 rollbackPredicates() 替代 clear() rollbackPredicates 通过 context.pop() 从栈顶逐个弹出,不会残留
3 conflicting 失败时同样使用 rollbackPredicates() ✅ 与上一致
4 成功路径只对 [initialStackSize, stack.size()) 范围内的新增 predicate 调用 clearStack() ✅ 初始 predicate 被保留,不误消耗
5 rollbackPredicates()private static,复用性好 ✅ 不影响状态,纯操作
6 末尾 \No newline at end of file 修复为正常换行 ✅ POSIX 兼容

💡 额外观察

clearStack() 是在 IRecipePredicate 上的方法,通常只修改 predicate 的内部状态而不修改 stack 列表本身。因此成功路径中的普通 for 循环(非 Iterator)访问 stack.get(i) 不会触发并发修改问题——安全。


总结

这是一个精准的 bug 修复。核心问题(成功路径中误消耗初始 predicate)已通过 initialStackSize 快照 + 分范围 clearStack() 解决;失败路径的清理也改为使用正确的 context.pop() 机制。代码质量良好,无副作用或遗漏。✅

@Gugle2308

Copy link
Copy Markdown

🌿 Roseau API Breaking Change Report

Module Status Breaking Changes
codec ⚪ Skipped
collision ⚪ Skipped
config ⚪ Skipped
integration ⚪ Skipped
moveable-entity-block ⚪ Skipped
network ⚪ Skipped
rendering ⚪ Skipped
space-select ⚪ Skipped
font ⚪ Skipped
util ⚪ Skipped
explosion ⚪ Skipped
rpc ⚪ Skipped
multiblock ⚪ Skipped
recipe ⚪ Skipped
registrum ⚪ Skipped
sync ⚪ Skipped
wheel ⚪ Skipped
main ⚪ Skipped

Full CSVs: see the Artifacts section of this workflow run.

@QiuShui1012
QiuShui1012 merged commit edd71ec into dev/1.21.1 Jul 13, 2026
33 checks passed
@Gugle2308

Copy link
Copy Markdown

PR #83 的状态是 closed,按照规则:

"closed" / "labeled"停止,不发评论

这是一个已关闭的 PR(并非已合并的代码变更),因此不需要审查。此处停止。

@Gu-ZT Gu-ZT linked an issue Jul 13, 2026 that may be closed by this pull request
1 task
@Gu-ZT
Gu-ZT deleted the dev/fix3-21 branch July 14, 2026 11:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] 鱼缸加工bug

3 participants