Repository navigation
Rename some item's id for consistency on 26.1 在 26.1 重命名一些物品的 ID 以提升一致性 - #6066
Conversation
- 手册 ageratum 双语文档改用新 id,修复配方预览空白与按 W 跳转失效
Gugle2308
left a comment
There was a problem hiding this comment.
审查结论: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,但——
- 注册 id 仍是
hardend_resin(ModItems.java:1148,没有aliasFrom,lang key 也仍是item.anvilcraft.hardend_resin); - 生成模型 models/item/hardend_resin.json:4 的
layer0仍指向anvilcraft:item/hardend_resin。
⇒ 贴图文件不存在了,base 本来正常的树脂物品现在会渲染成缺图。而姊妹 PR #6065 是把 id + 模型 + 贴图 + .aliasFrom("hardend_resin") 一起改的(diff 38072-38075),26.1 侧只改了贴图,属于改名只做了一半。
二选一:
- 补齐改名(与 #6065 对齐):
item("hardened_resin")+.aliasFrom(AnvilCraft.of("hardend_resin"))+ 模型/生成 json 改名(lang 会自动派生为Hardened Resin); - 回退贴图改名,保持
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 无新增违规 |
💡 非阻塞建议
Object2ObjectMap→Map+unmodifiableMap是源码级 BC 收窄:ModBlocks.java:3897、4557、4710 与 ModItems.java:1484 共 7 个public static字段换了类型并加了不可变包装,附属若用 fastutil 专用 API 或写入会编译失败/运行期抛异常。本 PR 描述为空(body: null),建议补一段说明这是 ID 重命名 + 破坏性变更(旧 id 经aliasFrom兼容、map 类型收窄),否则下游无从判断。- 三条 forging 模板的显示名从
Smithing Template改成Royal Steel Upgrade/Frost Metal Upgrade/Ember Metal Upgrade,与原版<材质> Upgrade Smithing Template的命名习惯相反(丢掉了物品类别词)。这属于 rename 之外的可见文案变更,请确认是否有意;若只为消除与screen.anvilcraft.*的重复,可以改用Royal Steel Upgrade Smithing Template。 ItemCompressCategory的 JEI 提示键仍是gui.anvilcraft.category.item_compress.supercapacitor_empty.resin(ItemCompressCategory.java:92),而配方 id 已改为item_compress/empty_supercapacitor。lang key 无功能影响,与 id 不一致只是可读性问题。- 11 个手工 locale 仍含旧键(
item.anvilcraft.capacitor_empty、tooltip.anvilcraft.item.capacitor_empty等),新键会回退英文——这是 Weblate 同步滞后,不是缺陷,可在更新日志提一句过渡。 - JEI 两个分类的改动(
addItemStack→add、getRegistryName→getIdentifier、全限定静态调用、key ->→_ ->)与ModBlocks的 giant monolithproperties三合一、yrot→rotY均与「改 id」主题无关,属夹带重构。行为上我逐项确认等价(properties()累积同一实例;getIdentifier是 JEI 29.x 现行方法名),但建议后续拆开,便于回滚与 blame。
回归测试建议
- 创造栏取出
Empty Capacitor/Empty Supercapacitor/Hardend Resin,确认图标正常(当前应为紫黑缺失模型 / 粉黑缺失贴图)。 - 用旧存档(含
anvilcraft:capacitor_empty等旧 id 的物品、水泥方块、水泥炼药锅)加载,确认别名解析成功、方块与物品不丢。 - 进度书里
white_chocolate_block的解锁条件是否仍能触发(该 advancement 的 criteria 顺序本次被重排,has_the_recipe与has_white_chocolate顺序互换,requirements同步更新,逻辑等价,但值得实测一次)。 /reload后检查 16 色reinforced_concrete配方仍能合成、creative variant picker 五组仍正常轮换。- 手册中电容器/巧克力页面配方预览与按 W 跳转(最后一个 commit 的目标)是否有空白。
标题已准确且为中英双语,本次未修改;PR 描述为空,建议补充破坏性变更说明。
No description provided.