研究树
Thaumic Machina 注册一个独立的研究分类(与 Thaumcraft 本体的 THAUMATURGY 等并列),共 21 个 ResearchItem。加载在 postInit 阶段(core/proxy/ProxyCommon.java:61 → ResearchHelper.loadResearch())。
分类注册
ResearchCategories.registerCategory("THAUMIC_MACHINA_CAT",
new ResourceLocation("ThaumicMachina:textures/research/r_tab.png"),
new ResourceLocation("thaumcraft:textures/gui/gui_researchback.png"));
lang 键 tc.research_category.THAUMIC_MACHINA_CAT=Thaumic Machina。
三种研究项类型
| 类 | 实例数 | 用途 |
|---|---|---|
TMResearchItem |
19 | 主体研究,分类固定为 THAUMIC_MACHINA_CAT |
DupResearchItem |
2 | 镜像 Thaumcraft 本体研究(TMNODES ← NODES;TMTHAUMATURGY ← THAUMATURGY),标 setDuplicate()+setStub()+setHidden(),getName()/getText() 转发给 parent |
LockResearchItem |
0 | 死代码,见下方缺陷 |
完整依赖树(父项 → 子项)
INFORMATION_CONCEPTS [concept=false, setAutoUnlock(), Items.book, complexity 0]
│
├── TMNODES [Dup of NODES]
│ ├── NODAL_STUDIES [ENERGY 1 / AURA 2 / MIND 1, complexity 1, (-2,5)]
│ │ └── AURA_FIELD [AURA 2 / ENERGY 1 / VOID 1 / ORDER 1, setConcealed()]
│ │ parents: @NODAL_STUDIES + @VIS_STUDIES
│ └── VIS [parents: @TMNODES]
│ └── VIS_STUDIES [ENERGY 1 / MIND 2, setConcealed()]
│ ├── VIS_CHARGE [ENERGY 2 / ENTROPY 1, setConcealed()]
│ └── AURA_FIELD (同上,第二父项)
│
├── TMTHAUMATURGY [Dup of THAUMATURGY, useItemAsIcon=true, (-8,0)]
│ └── WAND_STUDIES [MIND 2 / MAGIC 1 / TOOL 1]
│ │ parents: @TMTHAUMATURGY; parentsHidden: @VIS_CHARGE
│ └── WAND_AUGMENTATION [MAGIC 2 / TOOL 1 / MECHANISM 1 / ORDER 1, setSpecial()]
│ │ parents: @WAND_STUDIES; parentsHidden: INFUSION ← 父项不存在
│ ├── WAND_AUGMENTATION_CHARGE_BUFFER [TOOL 1/MAGIC 1/ENERGY 1/VOID 2]
│ ├── WAND_AUGMENTATION_VIS_CHANNEL [TOOL 1/MAGIC 1/WATER 2]
│ ├── WAND_AUGMENTATION_TAINTED_CORE [TOOL 1/MAGIC 1/ENTROPY 1/TAINT 2/DARKNESS 1]
│ │ └── WAND_AUGMENTATION_TAINT_CAPPING [TOOL 1/MAGIC 1/TAINT 1/AURA 2/ENERGY 1]
│ └── WAND_AUGMENTATION_CONTACT_DISCHARGE [DARKNESS 1/ENERGY 1/WEAPON 2/LIFE 1]
│ parents: @WAND_AUGMENTATION + @CRIMSON_WAND_AUGMENTATION ← 跨深红分支
│
└── CRIMSON_PHILOSOPHY [空 AspectList, complexity 0, setSpecial+setStub+setHidden]
├── CRIMSON_ASTRONOMY [AURA 1 / ELDRITCH 1 / VOID 2, complexity 2, setConcealed]
│ └── CRIMSON_REALISATION [ELDRITCH 1 / MIND 2 / AURA 1]
│ └── CRIMSON_CELESTIAL_FIELD
└── CRIMSON_THAUMATURGY
└── CRIMSON_WAND_AUGMENTATION → CONTACT_DISCHARGE 的第二父项
5 个 WAND_AUGMENTATION_* 全部 setConcealed();6 个 CRIMSON_* 全部 concept = true。
两个关键设计
CRIMSON_PHILOSOPHY 是事件型研究
research/ResearchHelper.java:263-273 注册时带 setSpecial() + setStub() + setHidden(),复杂度 0、要素为空、图标 ConfigItems.itemEldritchObject meta 1。它不在研究书中显示、无法手动完成,唯一完成途径是游戏内右键深红物品(见 事件处理器 1b)。这是有意设计,不是缺陷。
CONTACT_DISCHARGE 跨分支双父项
WAND_AUGMENTATION_CONTACT_DISCHARGE 同时要求 @WAND_AUGMENTATION(常规分支)与 @CRIMSON_WAND_AUGMENTATION(深红分支)。也就是说唯一被深红研究线门控的改装,恰好是那个没有任何功能实现的空改装(见 Contact Discharge)。
Concept 研究机制
TMResearchItem 构造器(research/TMResearchItem.java:27-38)对 concept = true:
setRound()—— 圆节点样式Settings.conceptResearchMode == 1→setSecondary()(可购买)Settings.conceptResearchMode == 2→setAutoUnlock()(自动解锁)
getName() 注入前缀 [TM] [Concept] (:80-81,取 lang tm.research.prefix.concept)。全树 12 个 concept = true。配置语义见 配置文件。
INFORMATION_CONCEPTS 是唯一 concept = false 却仍被手动 setAutoUnlock() 的项(ResearchHelper.java:43),作为整棵树的根。
数值
| 数值 | 值 |
|---|---|
| 分类 key | THAUMIC_MACHINA_CAT |
| ResearchItem 总数 | 21 |
TMResearchItem / DupResearchItem / LockResearchItem |
19 / 2 / 0(死代码) |
| concept = true | 12 |
| 深红研究 | 6 |
| 法杖改装研究 | 5 |
| 分类图标 | ThaumicMachina:textures/research/r_tab.png |
| 背景 | 复用 thaumcraft:textures/gui/gui_researchback.png |
| lang 键前缀 | tm.research.name. / .desc. / .page. / tc.research_category. |
源码缺陷
setParentsHidden("INFUSION")指向不存在的研究(research/ResearchHelper.java:92)。INFUSION从未被注册(loadEssentiaResearch()是空方法,见下),因此WAND_AUGMENTATION的这条隐藏前置永远无法满足也不会报错。loadEssentiaResearch()是空方法(ResearchHelper.java:130):private static void loadEssentiaResearch() {}—— 名称完整、内容为零。loadEntityResearch()是空方法(ResearchHelper.java:191):private static void loadEntityResearch() {},同样零内容。LockResearchItem完全是死代码:40 行、3 个构造器、checkLockout()实现完整,但grep -rn 'new LockResearchItem'全仓零命中,boundResearchItems无人填充。ResearchEventHandler是空壳且未注册:handlePlayerTick(TickEvent.PlayerTickEvent event) {}方法体为空,且从未MinecraftForge.EVENT_BUS.register。- lang 键大小写不统一:分类用
tc.research_category.(大写 TC),条目用tm.research.(小写)。 - 分类图标资源域大小写:
"ThaumicMachina:textures/research/r_tab.png"混合大小写,磁盘目录为小写assets/thaumicmachina/。 setPageCount()逐键 i18n 探测(TMResearchItem.java:56+):循环查tm.research.page.<NAME>.<i>直到未命中,上限 255,无缓存。- 概念研究的 lang 页不完整:
INFORMATION_CONCEPTS的正文明确写「Concepts can be customized in the config file (turned to easy mode (purchasable), or turned off completely (automatically unlocked)」,但 3 档模式只覆盖 1 和 2,没有「完全关闭」的档位 —— mode 0 下 concept 研究仍需正常研究。
相关条目
- 事件处理器 - 1b 段是
CRIMSON_PHILOSOPHY的唯一完成途径 - 配置文件 -
research.concept.mode直接影响 12 个 concept 节点 - Charge Buffer - 改装研究与注魔配对的样例
- Celestial Wand Core - 研究树中无对应分支(未接入内容)