奇点物品类名单(classNameList)
基本信息
| 属性 | 值 |
|---|---|
| 配置键 | S:classNameList(category general) |
| 类型 | 字符串列表 |
| 读取阶段 | preInit(CommonProxy.java:40-47) |
| 存储 | CommonProxy.classSet(Set<Class<?>>,行 32) |
| 匹配方式 | Class.forName(className) 后按物品 Java 类比对 |
作用
指定哪些 mod 的奇点物品要被从 Avaritia 无限催化剂配方里抽走, 并成为 Eternal Singularity 聚合配方的输入。
默认值
CommonProxy.java:43-45 的 4 项:
| 类名 | 所属 mod | @Mod 中的依赖强度 |
|---|---|---|
com.rcx.aobdsingularities.item.AOBDItemSingularity |
AOBD Singularities | after:aobdsingularities(软) |
fox.spiteful.avaritia.items.ItemSingularity |
Avaritia | required-after:Avaritia(硬) |
wanion.thermsingul.ThermalSingularityItem |
ThermSingul | after:thermsingul(软) |
wealthyturtle.uiesingularities.UniversalSingularityItem |
Universal Singularities | after:universalsingularities(软) |
后三项都是 after:(软依赖),因此未安装时也能加载,
但对应的类找不到,会走下面的容错分支。
容错与后果
for (final String className : classNameList) {
try { classSet.add(Class.forName(className)); }
catch (ClassNotFoundException e) {
EternalSingularityMod.logger.warn("Couldn't find " + className);
}
}
(CommonProxy.java:48-54)
类找不到只打 WARN 并继续。所以:
- 缺席的奇点 mod 不会导致崩溃,只是其奇点不参与聚合
- 若名单里全部类都不存在,
classSet为空 → postInit 在行 67 早退,永恒奇点无任何配方(见 无限催化剂配方替换)
匹配的是类,不是注册名
判定条件是 classSet.contains(item.getClass())
(CommonProxy.java:77),即精确 Java 类:
| 情况 | 是否命中 |
|---|---|
| 该 mod 的奇点类与名单完全一致 | ✅ |
| 同名但不同包/不同类名的奇点 | ❌ 需自行加入全限定名 |
| 该物品有子类(继承) | ❌ getClass() 不做父类匹配 |
因此自定义奇点 mod 需把自己的全限定类名加进本列表。
已知源码问题
Configuration被 new 了两次且首次未保存检查:config.getStringList(...)在行 40-46 读取,config.hasChanged()判定在行 47。 但 preInit 的configFile字段赋值(行 39new Configuration(configFile = file)) 与 postInit 的new Configuration(configFile)(行 82)是两个独立对象, 后者会重新读同一个文件。preInit 写入的默认值在 postInit 侧依赖磁盘落盘。 源码未复用同一实例。- 无格式校验:
classNameList是自由文本列表,填入非法类名时Class.forName抛的是ClassNotFoundException(行 51)可被捕获, 但拼写错误的类名同样只表现为 WARN,与「mod 未安装」无法区分。 - 不影响已有存档的 classSet 语义:
classSet在 postInit 末尾被置null(行 68 / 126),但没有任何代码读取它为null的情况, 属单纯的引用释放(注释写// Destroy reference)。
相关条目
- 无限催化剂配方替换 - 名单的消费点
- 复合奇点模式 - 抽取结果如何分组
- Eternal Singularity - 聚合配方产物