旧配置转换器下线清单
convert-legacy 是一次性迁移设施,不是插件功能。本页记录它的下线契约:等所有服务器都迁移完成后,照这份清单删除即可,不必重新调查调用点。
判定位收口本身的说明在物品匹配器,本页只讲「怎么把转换器整包删掉」。
为什么单独记一页
转换器分布在 6 个包里(CoreLib 共享引擎 + 5 个模块各自的目标定义),彼此有删除顺序约束。删错顺序会让其余模块的转换器编译失败,而这个依赖关系从代码里看不出来——LegacyMessageSink 还被两个非迁移用途的类实现着。
删除顺序
CoreLib 的 corelib.legacy 是共享引擎,被全部 5 个模块依赖。单独删它会让每个模块的转换器编译失败,所以它必须与模块级 legacy 包在同一次改动里下线,不能提前。
整包下线清单
一次改动内删除以下全部内容:
EmakiCoreLib的corelib.legacy包;- 5 个模块各自的
legacy包(Cooking / Forge / Gem / Level / Strengthen); - 每个模块命令路由里那一行
case "convert-legacy" -> ...,以及 tab 补全列表里的"convert-legacy"字符串; - 每个模块双语语言文件中的
command.convert_legacy.*键;Gem 与 Strengthen 另有command.help.desc.convert_legacy; - 每个模块加载期的
reportLegacyItemSources()调用(Strengthen 无此调用); AbstractMessageService与LevelMessageService的implements LegacyMessageSink子句。
第 6 项容易漏:LegacyMessageSink 是共享引擎里唯一有非迁移用途消费方的成员,删包时这两个 implements 会变成悬空引用。
各模块落位
| 模块 | 迁移目标 | 命令入口 | 删包后需要改的其他位置 |
|---|---|---|---|
| CoreLib | 共享引擎,无自己的目标 | 无 | AbstractMessageService、LevelMessageService 的 implements |
| Cooking | config.yml 与 recipes/ 中的旧扁平 matcher 键迁移到嵌套 item_sources + matcher;发酵桶 inputs[] 保留旧键以便兼容状态身份空间 | /emakicooking convert-legacy | CookingCommandRouter、EmakiCookingPlugin |
| Forge | recipes/ 的 materials[] 与 blueprint_requirements[] 旧 item_sources 结构迁移到当前字段形态;材料目标保留旧键 | /emakiforge convert-legacy | ForgeCommandRouter、EmakiForgePlugin |
| Gem | items/*.yml 的旧 match 块 | /emakigem convert-legacy | GemCommandRouter、EmakiGemPlugin |
| Level | sources/*.yml 的 result_item_sources → item_sources | /emakilevel convert-legacy | LevelCommand、EmakiLevelPlugin |
| Strengthen | recipes/*.yml 的旧 match 块 | /emakistrengthen convert-legacy | StrengthenCommandRouter |
共同安全性质
这些性质是「可以放心删」的依据:
- 只从命令入口与加载期扫描告警进入,运行期的判定、加载、锻造/烹饪/镶嵌路径都不调用它;
- 不读运行期状态,不写任何 PDC 条目,不碰玩家存档;只读写插件数据目录下的配置文件;
- 删掉整包后,除上表列出的位置外,插件其余部分照常编译。
各模块特有边界
判定位改成 item_sources 与 matcher 同级 AND 之后,转换器的可迁移面已经明显收窄:
Cooking / Forge / Gem 仍保留配置迁移目标。 Cooking 的转换器处理工具、锅铲、容器、蒸锅加水规则、营养映射以及各类配方输入的旧扁平 matcher 键;发酵桶 inputs[] 迁移会保留旧键,以保持持久化槽位身份的兼容空间。Forge 的转换器处理 materials[] 与 blueprint_requirements[] 的旧来源字段,材料项保留旧键。Gem 的转换器处理开孔器与宝石定义中的旧来源字段;宝石构造底材当前推荐独立使用 base_item_source,旧顶层 item_sources 仍作为构造底材回退读取。
Level 仍有一项真实转换: sources/*.yml 的 rules[].result_item_sources → item_sources。
Gem / Strengthen 的旧 match 块转换仍在,且输出可直接使用。 两个转换器都不再往 matcher 里写 type: item_source:Gem 把旧 match.item_sources 提升为顶层 item_sources;Strengthen 把旧 match.source_ids 转成锚定正则(形如 ^\Qemakiitem-xxx\E$)并合并进顶层 source_patterns。转换结果无需手工修正。
判断迁移是否完成
旧写法不会静默失效:Cooking 的旧扁平前缀键与 Gem 的旧顶层 item_sources 都被加载期兼容读取,只是不再是推荐写法。
Cooking、Forge、Gem、Level 四个模块启动时会扫描残留旧写法并告警(Strengthen 没有这个调用,只能靠 /emakistrengthen convert-legacy 主动预览)。连续若干个版本没有服主再报告该告警,即可认为迁移期结束,按上面的清单整包下线。