研究树

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:

  1. setRound() —— 圆节点样式
  2. Settings.conceptResearchMode == 1 → setSecondary()(可购买)
  3. 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 研究仍需正常研究。

相关条目