Skip to content

旧配置转换器下线清单 ​

convert-legacy 这个一次性迁移工具按顺序整包删掉, 步骤如下

先明确: convert-legacy 是一次性的迁移工具, 不是插件的正式功能. 它的下线约定记在这里; 等所有服务器都迁移完成, 你照这份清单删掉就行, 不用再回头调查哪里调用了它

判定位收口本身的做法见物品匹配器, 这里只讲"怎么把转换器整包删掉"

为什么单独记一页 ​

转换器分布在 6 个包里 (CoreLib 共享引擎 + 5 个模块各自的目标定义), 它们彼此删起来有先后顺序. 顺序错了会让其余模块的转换器编译不过, 而这份依赖关系从代码里看不出来 -- LegacyMessageSink 还被两个非迁移用途的类实现着

删除顺序 ​

CoreLib 的 corelib.legacy 是共享引擎, 5 个模块全都依赖它. 你只删它, 每个模块的转换器都会编译不过; 所以它必须和模块级的 legacy 包在同一次改动里一起下线, 不能提前

整包下线清单 ​

在同一次改动里删掉下面这些内容:

  1. EmakiCoreLib 的 corelib.legacy 包;
  2. 5 个模块各自的 legacy 包 (Cooking / Forge / Gem / Level / Strengthen);
  3. 每个模块命令路由里那一行 case "convert-legacy" -> ..., 以及 tab 补全列表里的 "convert-legacy" 字符串;
  4. 每个模块双语语言文件中的 command.convert_legacy.* 键; Gem 与 Strengthen 另有 command.help.desc.convert_legacy;
  5. 每个模块加载期的 reportLegacyItemSources() 调用 (Strengthen 无此调用);
  6. AbstractMessageService 与 LevelMessageService 的 implements LegacyMessageSink 子句

注意第 6 项最容易漏: LegacyMessageSink 是共享引擎里唯一还有非迁移用途的成员, 删包时这两个 implements 会变成悬空引用

各模块对应改哪里 ​

模块迁移目标命令入口删包后需要改的其他位置
CoreLib共享引擎, 无自己的目标无AbstractMessageService, LevelMessageService 的 implements
Cookingconfig.yml 与 recipes/ 中的旧扁平 matcher 键迁移到嵌套 item_sources + matcher; 发酵桶 inputs[] 保留旧键以便兼容状态身份空间/emakicooking convert-legacyCookingCommandRouter, EmakiCookingPlugin
Forgerecipes/ 的 materials[] 与 blueprint_requirements[] 旧 item_sources 结构迁移到当前字段形态; 材料目标保留旧键/emakiforge convert-legacyForgeCommandRouter, EmakiForgePlugin
Gemitems/*.yml 的旧 match 块/emakigem convert-legacyGemCommandRouter, EmakiGemPlugin
Levelsources/*.yml 的 result_item_sources → item_sources/emakilevel convert-legacyLevelCommand, EmakiLevelPlugin
Strengthenrecipes/*.yml 的旧 match 块/emakistrengthen convert-legacyStrengthenCommandRouter

共同安全性质 ​

这些性质是"可以放心删"的依据:

  • 只从命令入口与加载期扫描告警进入, 运行期的判定, 加载, 锻造/烹饪/镶嵌路径都不调用它;
  • 不读运行期状态, 不写任何 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 主动预览). 连续若干个版本没有服主再报告该告警, 即可认为迁移期结束, 按上面的清单整包下线