自定义研究
基本信息
| 属性 | 值 |
|---|---|
| 注册入口 | common/CustomResearch.java,init() 由 CommonProxy.java:142 在 postInit 调用 |
| 设置基类 | config/settings/CustomResearchSetting.java |
| 研究条目数 | 3(REPLACEWANDCAPS、REPLACEWANDCORE、CHESTSCAN) |
| 升级类型 | 1(DisenchantFocusUpgrade,研究 id FOCUS_DISENCHANTING) |
| 附加研究页 | 1(RESEARCHDUPE 追加一页,开关 nomiconDuplicateResearch) |
功能
本模组通过 Thaumcraft 4 的 ResearchItem API 注册 3 条新研究,
外加 1 条用于解锁焦点附魔剥离的升级研究。
每条研究的数据不是硬编码在 Java 里的,而是由 CustomResearchSetting 从
.cfg 读出——因此玩家可以在配置文件中调整页签位置、前置研究、要素与价格。
研究列表
| 研究 key | 展示名 | 页签 | col, row | 难度 | 前置研究 | 要素 | 页面图标 | 开关 |
|---|---|---|---|---|---|---|---|---|
salisarcana:REPLACEWANDCAPS |
替换法杖端盖 | THAUMATURGY |
4, 2 | 未设置 | CAP_gold |
未设置 | salisarcana:capPlaceholder |
replaceWandCaps |
salisarcana:REPLACEWANDCORE |
替换法杖核心 | THAUMATURGY |
-6, 2 | 未设置 | ROD_greatwood |
未设置 | salisarcana:rodPlaceholder |
replaceWandCore |
salisarcana:CHESTSCAN |
箱子扫描 | BASICS |
8, 3 | 3 | DECONSTRUCTOR |
ordo:10、perditio:10、permutatio:10 |
minecraft:chest |
thaumometerScanContainers |
salisarcana:FOCUS_DISENCHANTING |
焦点除魔 | THAUMATURGY |
-2, -8 | 2 | FOCALMANIPULATION |
auram:4、praecantatio:6、vacuos:8、perditio:4 |
由 DisenchantFocusUpgrade 自定 |
enableFocusDisenchanting |
前两条与后两条的差异来自类型:前两条是 ReplaceWandComponentSettings
(CustomResearchSetting 的子类,键名多一个 Research 后缀),
后两条是直接的 CustomResearchSetting。
「未设置」表示
ConfigFeatures.java:41与ConfigFeatures.java:47的ResearchInfo链上没有调用.setDifficulty(...)或.setAspects(...), 此时价格由CustomResearchSetting的默认值决定(难度 0、空要素列表)。
配置键
CustomResearchSetting 是本模组唯一一个设置写出多个配置键的类型。
loadFromConfiguration()(CustomResearchSetting.java:45-139)依次读取:
| 键后缀 | 含义 | 类型与范围 | 默认 |
|---|---|---|---|
_enabled + 键名 |
总开关 | getBoolean |
组内默认值 |
+ Category |
泰奥纳米肯页签名 | getString |
ResearchInfo 给定值 |
+ Col |
页内列 | getInt,Integer.MIN_VALUE–MAX_VALUE |
ResearchInfo 给定值 |
+ Row |
页内行 | getInt |
ResearchInfo 给定值 |
+ Parents |
前置研究 ID 列表 | getStringList |
ResearchInfo 给定值 |
+ Purchasable |
是否可用要素购买而非小游戏 | getBoolean |
false |
+ AutoUnlock |
父研究完成后是否自动解锁 | getBoolean |
false |
+ Warp |
研究时施加的偏斜值 | getInt,0–100 |
0 |
+ Aspects |
研究要素列表 | getStringList |
空列表 |
注意总开关的真实键名是 _enabled 拼接 键名,例如端盖研究是
_enabledreplaceWandCapsResearch(因为 CustomResearchSetting 先给名字加
Research 后缀,再由 loadFromConfiguration 加 _enabled 前缀,
见 CustomResearchSetting.java:28 与 CustomResearchSetting.java:47)。
这一命名规则可与 AspectRecipeIndexCompatSettings.java:12 的注释互相印证。
数值
maybeRegister(...)(CustomResearch.java:292-317)构造 ResearchItem 时固定调用
.setConcealed()(隐藏研究页的「神秘」标记)与 .setSpecial()(标记为特殊研究),
并按 settings.autoUnlock 决定是否 setStub() + 自动点亮全部父研究。
元素配方页方面,端盖研究提供 3 组配方(法杖、权杖、魔杖),
核心研究同样提供 3 组——都由 CustomResearch.exampleCapRecipes()(CustomResearch.java:77)
与 exampleRodRecipes()(CustomResearch.java:156)在运行时按
WandHelper.allVanillaCaps() / allVanillaRods() 动态生成,
因此配方条数随已注册的组件数量变化,无法静态核实。
配方是可交换的有序配方(ShapelessArcaneRecipe),要素价格经
AspectHelper.primalList(cost) 由 WandType.WAND/STAFF/SCEPTER.getCraftingVisCost(...)
按具体组件计算。核心替换配方还会在安装了 GTNHTCWands 时额外要求螺丝与导体
(gtnhtcwands.coreSwapMaterials)。
交互
研究完成后解锁对应的替换配方。玩家通过
FocalManipulator 使用 DisenchantFocusUpgrade 剥离焦点附魔,
按 focusDisenchantingRefundPercentage(默认 75)返还经验。
合成配方
见上。CHESTSCAN 不提供配方页,只解锁泰奥测向仪扫描箱子容器的功能,
其数据包为 salisarcana:MessageScanContainer 与 MessageScanIInventory
(见 网络消息)。