简体中文
旧配置转换器下线清单
convert-legacy 这个一次性迁移工具按顺序整包删掉, 步骤如下
先明确: 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 主动预览). 连续若干个版本没有服主再报告该告警, 即可认为迁移期结束, 按上面的清单整包下线