自定义研究

基本信息

属性 值
注册入口 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 (见 网络消息)。

相关条目