Mutation 转储工具

基本信息

属性 值
类型 调试用数据导出(NEI 选项面板入口)
源码类 forestry/MutationDumper.scala(全仓唯一的 .scala 源文件,其余 49 个都是 .java,但都放在 src/main/scala/ 目录下)
基类 codechicken.nei.config.ArrayDumper[IMutation]
注册方式 API.addOption(new MutationDumper(root, "<suffix>"))

三处注册点

MutationDumper 构造函数签名是 (root: ISpeciesRoot, suffix: String),i18n 前缀固定为 "tools.dump.neiaddons." + suffix。三个调用点:

调用方 root 取自 suffix NEI 选项面板名
forestry/bees/BeeHelper.setup() AlleleManager.alleleRegistry.getSpeciesRoot("rootBees") bee_mutation nei.options.tools.dump.neiaddons.bee_mutations = “Bee Mutations”
forestry/trees/TreeHelper.setup() getSpeciesRoot("rootTrees") tree_mutation nei.options.tools.dump.neiaddons.tree_mutations = “Tree Mutations”
botany/flowers/FlowerHelper.setup() getSpeciesRoot("rootFlowers") flower_mutation nei.options.tools.dump.neiaddons.flower_mutations = “Flower Mutations”

⚠️ 三个 suffix 与三个 i18n 键并不一一对应:注册用的是单数 bee_mutation / tree_mutation / flower_mutation,而 en_US.lang 里定义的键是复数 ..._mutations。ArrayDumper 用 "tools.dump.neiaddons." + suffix 拼键,所以实际查找的是 nei.options.tools.dump.neiaddons.bee_mutation(单数),lang 文件里的单数键不存在——这些选项在英文环境下会显示未翻译的键名。

面板根标题 nei.options.tools.dump.neiaddons = “NEI Addons” 存在,dumped = "%s dumped to %s" 也存在,唯独三个子项名对不上。

三个 root 为空时静默跳过

每个 setup() 在取 root 之后都判一次 null 并打警告后 return,此时 API.addOption 不会执行:

Helper 警告原文
BeeHelper "Bee Species Root not found, some functionality will be unavailable"
TreeHelper "Tree Species Root not found, some functionality will be unavailable"
ButterflyHelper "Butterfly Species Root not found, some functionality will be unavailable"
FlowerHelper "Failed to load Flower root, Botany support disabled"

即装了 Forestry 也不会注册蝴蝶转储(ButterflyHelper 根本没调 API.addOption,源码里没有对应行),但缺蝶类时其它两个照常。

导出的 CSV 列

MutationDumper 覆写三个 ArrayDumper 成员:

成员 行为
header() 返回 7 列:UID、Name、Allele0、Allele1、isSecret、baseChance、conditions
array() root.getMutations(false).toArray(Array.empty) — false 表示不排除隐性突变,所以转储表里一定包含 secret 条目,与 Show Secret Mutations 开关无关
dump(mutation, id) 逐列填值

dump() 的列取自 root.getKaryotypeKey.ordinal() 索引到的模板染色槽:

列 取值
UID mutation.getTemplate()(speciesKey).getUID
Name mutation.getTemplate()(speciesKey).getName
Allele0 mutation.getAllele0.getUID
Allele1 mutation.getAllele1.getUID
isSecret mutation.isSecret.toString
baseChance "%.1f".format(mutation.getBaseChance) — 保留 1 位小数
conditions getSpecialConditions 用 | 连接;抛异常时打日志并填 "[Error]";null 时填 ""

getSpecialConditions 的异常处理与 BaseBreedingRecipeHandler 里的写法平行(都打 logSevereExc 并带 mutation 的三个 UID),两处独立实现,互不调用。

Scala / Java 混编细节

MutationDumper.scala 里 import scala.collection.JavaConversions._,array() 用 .toArray(Array.empty) 把 java.util.Collection 转成数组。getTemplate() 在 Scala 侧写成双括号 getTemplate()(0)——即 Java 的 getTemplate()[0],因为 Scala 把无参重载视作 ()。getAllele0 同样省略括号。

相关条目