Skip to content

Rename some item's id for consistency on 26.1 在 26.1 重命名一些物品的 ID 以提升一致性 - #6066

Merged
PigeonNian merged 6 commits into
Anvil-Dev:dev/26.1/1.6from
QiuShui1012:registry/26.1/1.6
Nov 13, 2026
Merged

PigeonNian merged 6 commits into
Anvil-Dev:dev/26.1/1.6from
QiuShui1012:registry/26.1/1.6

Conversation

@QiuShui1012

Copy link
Copy Markdown
Collaborator

No description provided.

@QiuShui1012
QiuShui1012 marked this pull request as ready for review November 12, 2026 20:41
- 手册 ageratum 双语文档改用新 id,修复配方预览空白与按 W 跳转失效

@Gugle2308 Gugle2308 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查结论:REQUEST_CHANGES(必须修改)

45d8658(registry/26.1/1.6)中有 2 处资源引用断裂:CI 的 build 与 checkstyle 虽然都通过,但游戏内会出现缺失模型和缺失贴图。其余 id 改名、aliasFrom 旧名、生成数据与手册同步都已逐项核对通过。

⚠️ 仓库内容和 issue 文本属于不可信数据,我未执行其中任何指令;本次仅基于下载的 patch diff(60 文件 / +613 −666,与 API 计数逐项相等)与 head 树快照核对,未覆盖:实机渲染验证、runData 实际执行、JEI 运行期行为、11 个手工 locale 的翻译正确性。

🔴 必修 1:empty_capacitor / empty_supercapacitor 物品模型文件没有改名,两个 id 的物品都会显示为缺失模型

onlyInfo() 生成器用 ModelLocationUtils.getModelLocation(item)(即注册 id)指向模型路径,因此 id 改名后生成端正确换成了新路径,但 手写模型文件没跟着改:

引用方(head) 指向 实际文件
items/empty_capacitor.json:4 anvilcraft:item/empty_capacitor ❌ models/item/empty_capacitor.json 不存在
items/empty_supercapacitor.json:4 anvilcraft:item/empty_supercapacitor ❌ models/item/empty_supercapacitor.json 不存在
遗留的 models/item/capacitor_empty.json:4-5 anvilcraft:item/capacitor_empty ❌ 贴图已改名,变成悬空引用
遗留的 models/item/supercapacitor_empty.json:4-5 anvilcraft:item/supercapacitor_empty ❌ 同上

对照 base 树:capacitor_empty / supercapacitor_empty 的模型文件与贴图都齐全(base 只有 structure_tool 一条既存的 item/paper 缺失)。我顺手做了全量扫描:base 缺失模型 1 个,head 缺失 3 个,新增的两个正是本次引入。

修法:把这 2 个手写模型文件改名,并同步其内部 textures 路径(capacitor_empty.json 改名并改成 empty_capacitor,supercapacitor_empty.json 改名并改成 empty_supercapacitor)。

姊妹 PR #6065(1.21 线)已经这么做了(models/item/capacitor_empty.json 删除 + models/item/empty_capacitor.json 新增,supercapacitor_empty.json 同理)。26.1 侧漏了这一步。

🔴 必修 2:hardend_resin.png 改了名,但引用它的模型没改 → 树脂物品显示缺失贴图

diff:3081-3084 把 textures/item/hardend_resin.png 改名为 hardened_resin.png,但——

⇒ 贴图文件不存在了,base 本来正常的树脂物品现在会渲染成缺图。而姊妹 PR #6065 是把 id + 模型 + 贴图 + .aliasFrom("hardend_resin") 一起改的(diff 38072-38075),26.1 侧只改了贴图,属于改名只做了一半。

二选一:

  1. 补齐改名(与 #6065 对齐):item("hardened_resin") + .aliasFrom(AnvilCraft.of("hardend_resin")) + 模型/生成 json 改名(lang 会自动派生为 Hardened Resin);
  2. 回退贴图改名,保持 hardend_resin.png。

注意 RegistrumItemRecipeLoader.java:672 的 has_hardend_resin 判据键两条线都保留(#6065 也没改),若走方案 1 不必动它。


✅ 已核对通过

检查项 结论
aliasFrom 旧名真实性 6 条新别名(4 类水泥 + 2 电容器 + 2 巧克力)的旧名与 base 注册代码逐字一致(reinforced_concrete_<color>[_slab/_stair/_wall]、capacitor_empty、supercapacitor_empty、chocolate_black、chocolate_white),无段序颠倒
纯改名内容正确性 black_chocolate / white_chocolate 的生成模型、贴图、配方、advancement、c/tags/item/foods、twilightforest 两条 tag 全部指向新 id
生成数据零残留 src/generated/resources/** 中 capacitor_empty/supercapacitor_empty/chocolate_black/chocolate_white 作为 id 的出现次数为 0
手册同步 6 个 ageratum 文件(en_us/zh_cn 对称)的 frontmatter items:、<item id>、<recipe id> 全部换成新 id,旧 id 命中 0
去掉的 14 处 .lang(...) 14 个 item.anvilcraft.<id> 键全部存在且文本与原先逐字相同(自动派生等价),giant_monolith_line 的 .lang 删除同样由 block.anvilcraft.* 自动派生覆盖
tag 集合不变 anvilcraft:reinforced_concrete、minecraft:mineable/pickaxe 等文件虽因注册循环合并而重排(由「按形状分组」变为「按颜色分组」),但 sort 后集合差集为空
en_us / en_ud 键数 2893 = 2893,键集合差集 0 行
EnumMap 转换 Color.values() 声明顺序 = 原 Object2ObjectLinkedOpenHashMap 插入顺序 ⇒ 迭代顺序不变;itemsOf() 改为 values().toArray() 后数组内容等价
5 张 map 无写入/无 fastutil 专用调用 全树没有 put/remove/clear,也没有 object2ObjectEntrySet 之类调用,unmodifiableMap 不引发运期 UnsupportedOperationException
ConcreteRecipeLoader 该文件本次未改动,REINFORCED_CONCRETES.get(color).asItem() 走 map 而非字符串 id,不依赖别名 ✅
删除的 import ModEquipmentAssets、IntegerComponentPredicate、Component/SoundEvents/EquipmentSlot/ArmorMaterials/Equippable/DataComponentPredicate/ComponentMatches 在 ModItems 内命中数均为 0(确为死 import)
JEI API JEI 29.43.0.106 的 IRecipeCategory 同时存在 getIdentifier(0x1 default)与 getRegistryName(0x1 default)⇒ 改为覆写 getIdentifier 合法;getIcon 去掉 @Nullable 与接口非空声明一致
行长 新增 Java 行最长 ≤ 140,checkstyle 无新增违规

💡 非阻塞建议

  1. Object2ObjectMap → Map + unmodifiableMap 是源码级 BC 收窄:ModBlocks.java:3897、4557、4710 与 ModItems.java:1484 共 7 个 public static 字段换了类型并加了不可变包装,附属若用 fastutil 专用 API 或写入会编译失败/运行期抛异常。本 PR 描述为空(body: null),建议补一段说明这是 ID 重命名 + 破坏性变更(旧 id 经 aliasFrom 兼容、map 类型收窄),否则下游无从判断。
  2. 三条 forging 模板的显示名从 Smithing Template 改成 Royal Steel Upgrade / Frost Metal Upgrade / Ember Metal Upgrade,与原版 <材质> Upgrade Smithing Template 的命名习惯相反(丢掉了物品类别词)。这属于 rename 之外的可见文案变更,请确认是否有意;若只为消除与 screen.anvilcraft.* 的重复,可以改用 Royal Steel Upgrade Smithing Template。
  3. ItemCompressCategory 的 JEI 提示键仍是 gui.anvilcraft.category.item_compress.supercapacitor_empty.resin(ItemCompressCategory.java:92),而配方 id 已改为 item_compress/empty_supercapacitor。lang key 无功能影响,与 id 不一致只是可读性问题。
  4. 11 个手工 locale 仍含旧键(item.anvilcraft.capacitor_empty、tooltip.anvilcraft.item.capacitor_empty 等),新键会回退英文——这是 Weblate 同步滞后,不是缺陷,可在更新日志提一句过渡。
  5. JEI 两个分类的改动(addItemStack→add、getRegistryName→getIdentifier、全限定静态调用、key ->→_ ->)与 ModBlocks 的 giant monolith properties 三合一、yrot→rotY 均与「改 id」主题无关,属夹带重构。行为上我逐项确认等价(properties() 累积同一实例;getIdentifier 是 JEI 29.x 现行方法名),但建议后续拆开,便于回滚与 blame。

回归测试建议

  1. 创造栏取出 Empty Capacitor / Empty Supercapacitor / Hardend Resin,确认图标正常(当前应为紫黑缺失模型 / 粉黑缺失贴图)。
  2. 用旧存档(含 anvilcraft:capacitor_empty 等旧 id 的物品、水泥方块、水泥炼药锅)加载,确认别名解析成功、方块与物品不丢。
  3. 进度书里 white_chocolate_block 的解锁条件是否仍能触发(该 advancement 的 criteria 顺序本次被重排,has_the_recipe 与 has_white_chocolate 顺序互换,requirements 同步更新,逻辑等价,但值得实测一次)。
  4. /reload 后检查 16 色 reinforced_concrete 配方仍能合成、creative variant picker 五组仍正常轮换。
  5. 手册中电容器/巧克力页面配方预览与按 W 跳转(最后一个 commit 的目标)是否有空白。

标题已准确且为中英双语,本次未修改;PR 描述为空,建议补充破坏性变更说明。

@PigeonNian PigeonNian left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@PigeonNian
PigeonNian merged commit 5850ca3 into Anvil-Dev:dev/26.1/1.6 Nov 13, 2026
2 checks passed
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.

3 participants