Repository navigation
Fix 1.21.11 predicate previews 修复方块预览属性组合 - #144
WhereisFff wants to merge 1 commit into
Conversation
WhereisFff
commented
Oct 4, 2026
- 修复预览状态的属性组合与范围匹配
- fixed [Bug] JEI内多方块合成和多方块转化配方显示异常 AnvilCraft#5206
|
已完成 diff 下载与跨文件/跨分支核对(base 源码取自 代码审查摘要 — PR #144操作: opened( 🔍 根因定位(与 #5206 症状对齐,已交叉验证)hunk 1 — 属性组合( for (PropertyMatcher matcher : matchers)
states.addAll(matcher.applyToState(definition, blockHolder.value().defaultBlockState()));只要某个 matcher 的属性值恰好等于默认值,它就会把"原样默认状态"塞进预览集合。以 hunk 2 — 范围匹配( 旧写法保留的是区间之外的值(且与 🔴 关键问题
|
| 声称 | 状态 | 依据 |
|---|---|---|
| 修复预览状态的属性组合 | ✅ | hunk 1:笛卡尔积 + allMatch 终筛 |
| 修复预览状态的范围匹配 | ✅ | hunk 2:>= min / <= max,与 RangedMatcher.match 一致 |
fixed Anvil-Dev/AnvilCraft#5206 |
根因对齐(楼梯"全朝北"= 默认状态被并集污染),但仅覆盖 1.21.4/1.21.8/1.21.11/26.1 四条 lib 线;#5206 的 1.21.1 复现线(anvillib-neoforge-1.21.1)未见对应 PR |
|
| 描述"1.21.11"限定 | ✅ | base 为 dev/1.21.11,标题与分支一致 |
🧪 测试建议
| 被测目标 | 推荐测试场景 | 优先级 |
|---|---|---|
BlockStatePredicate.constructStatesForRender() |
组内多 matcher 且部分属性值等于默认值(楼梯 {facing:south,half:bottom,waterlogged:false})→ 断言结果不含 facing=north 默认状态;结果全部满足 testWithoutEntity |
🔴 |
| 同上 | 组内两条同属性 matcher 互斥(facing=south + facing=east)→ 结果为空(组不可满足) |
🟡 |
| 同上 | 多组(OR)分别命中 → 结果为各组合集合并集、且无重复 | 🟡 |
RangedMatcher.applyToState() |
min=A,max=C → 仅返回 A/B/C(含端点);min 为非法字符串 → 空列表(与 match 一致) |
🔴 |
getStatesCache() |
同一实例重复调用返回同一不可变列表(缓存生效,distinct 去重正确) |
🟢 |
tag 谓词(this.blocks 多元素) |
各组独立求值、不串味;组内属性在该方块上不存在时该组对该方块不产出状态 | 🟡 |
结论: APPROVE — 两处 hunk 都精确命中根因(预览集合污染 + 范围判定反向),且与同类的 match 实现语义对齐,可直接合并。合并前请确认 dev/1.21.1 是否需要同款 backport(#5206 的原始复现线)。
由 Hermes Agent 审查
|
💾 Self-improvement review: Patched SKILL.md in skill 'blockstate-predicate-review' (1 replacement). |
🌿 Roseau API Breaking Change Report
|
|
PR #144 状态已确认为 |