暗黑元素(Dark Aspects)

[!INFO] 注册真源:DarkAspects.java:28-74 initAspects() / DarkAspects.java:81-327 addAspects() 资源:本地化键 tc.aspect.<tag>,纹理 assets/forbidden/textures/aspects/<tag>.png

本模组向 Thaumcraft 注册 7 个自定义元素(Aspect),全部在 preInit 的 DarkAspects.initAspects()(Forbidden.java:63)中创建、postInit 的 DarkAspects.addAspects()(Forbidden.java:83)中绑定对象。

Aspect 构造调用形如 new Aspect(tag, color, Aspect[] aspects, ResourceLocation icon, int),5 个实参依次为拉丁名、颜色、二元、纹理路径、整数字面量。本条目只记录源码字面值;整数字面量的确切语义见文末「源码缺陷」第 1 条。

基本信息

属性 值
元素数量 7(其中 LUST 受 Config.noLust 开关控制)
注册阶段 initAspects() = preInit;addAspects() = postInit
本地化键 tc.aspect.<tag>(7 条)
帮助键 tc.aspect.help.<tag>(7 条)

7 个元素的真值

下表逐项对应 DarkAspects.java:28-74,顺序即源码中的创建顺序:

字段 拉丁名(tag) 颜色 二元(piston pair) 第 5 参数(整数字面量) 源码行
LUST luxuria 0xffc1ce FLESH + HUNGER 1 :30-35
NETHER infernus 0xff0000 FIRE + MAGIC 771 :38-43
PRIDE superbia 0x9639ff FLIGHT + VOID 1 :44-49
GLUTTONY gula 0xd59c46 HUNGER + VOID 1 :50-55
ENVY invidia 0x00ba00 SENSES + HUNGER 1 :56-61
SLOTH desidia 0x6e6e6e TRAP + SOUL 771 :62-67
WRATH ira 0x870404 WEAPON + FIRE 771 :68-73

LUST 的创建整段包在 if (!Config.noLust) 中(:29),Config.java:42,111 的 No Lust 默认为 false。关闭时元素数为 6,且 addAspects() 中所有引用 LUST 的对象标签也会走 else 分支(见下)。

本地化

assets/forbidden/lang/en_US.lang:3-9 与 zh_CN.lang:3-9 定义 7 条名称键,:11-17 定义 7 条帮助键:

tag en_US zh_CN
infernus The Nether, Demons, Hellfire 下界,恶魔,地狱火
ira Wrath, Anger, Rage 暴怒,恼怒,怒火
gula Gluttony, Consumption, Indulgence 饕餮,挥霍,放纵
invidia Envy, Jealousy, Insecurity 妒忌,嫉妒,不安
superbia Pride, Arrogance, Disdain 傲慢,自大,轻蔑
desidia Sloth, Laziness, Procrastination 怠惰,懒散,拖延
luxuria Lust, Desire, Excess 欲望,欲念,无度

[!NOTE] 这 7 条 tc.aspect.* 键复用原版 Thaumcraft 的键前缀,因此会在 Thaumcraft 的元素列表中直接显示,而不是带 forbidden. 前缀。

对象标签(Object Tags)

addAspects() 通过 ThaumcraftApi.registerObjectTag 给原版物品/方块追加元素,这是本 mod 对元素系统的真正玩法贡献。取值方式统一为 ThaumcraftApiHelper.getObjectAspects(stack) 在现有值上追加(DarkAspects.java:76-79)。

原版方块与物品

目标 追加元素 源码
下界岩(下界岩全 meta) NETHER 1 :84-86
下界传送门 NETHER 4 :88-90
下界石英(矿物词典 oreQuartz) CRYSTAL 3 + NETHER 2 :96
下界之星 NETHER 8 + PRIDE 8 :98-100
下界疣 NETHER 1 :102-104
下界砖(物品) NETHER 1 :106-108
下界砖块 NETHER 2 :110-112
恶魂之泪 WRATH 4 :114-116
生物头(skull meta 1 / meta 4) NETHER 4 / WRATH 2 :118-124
TNT WRATH 2 :130-132
金头盔 / 金胸甲 / 金护腿 / 金靴 PRIDE 2 / 1 / 1 / 1 :134-158
金剑 PRIDE 2 :160-164
床 CRAFT 3 + CLOTH 6 + SLOTH 4 :168-169
末影之眼 SENSES 4 + ELDRITCH 4 + MAGIC 3 + ENVY 4 :172-174
蛋糕 GLUTTONY 7 :178-180
曲奇 GLUTTONY 1 :182-184
火焰弹 WRATH 1 :186-188
比较器 MECHANISM 2 + ORDER 2 + ENVY 2 :192-193
培根(矿物词典 itemBacon) FLESH 6 + LIFE 6 + ENERGY 6 + BEAST 4 + GLUTTONY 6 :201-203
鞍(!noLust) LUST 2 :205-208
拴绳(!noLust) BEAST 2 + CLOTH 2 + SLIME 1 + LUST 2 :211-213

[!WARNING] 金色装备与床、比较器等项用的是 getAspectList(...) 的追加语义(:134-164、:168-169、:192-193),而末影之眼、比较器、培根、拴绳这几项中有的用的是新建 AspectList 覆盖语义(:172、:192、:201、:211)。因此被覆盖的物品会丢失原版元素——例如末影之眼原版的 MINECRAFT/SENSES 被整条替换。

本 mod 自身物品

目标 元素
致命碎片 meta 0 NETHER 1 + WRATH 2 + CRYSTAL 1
致命碎片 meta 1 NETHER 1 + ENVY 2 + CRYSTAL 1
致命碎片 meta 2 TAINT 3 + CRYSTAL 1
致命碎片 meta 3 NETHER 1 + PRIDE 2 + CRYSTAL 1
致命碎片 meta 4 !noLust:NETHER 1 + LUST 2 + CRYSTAL 1;noLust:VOID 1(:283-285)
致命碎片 meta 5 NETHER 1 + SLOTH 2 + CRYSTAL 1
致命碎片 meta 6 NETHER 1 + GREED 2 + CRYSTAL 1
暴食碎片(全 meta) NETHER 1 + GLUTTONY 2 + CRYSTAL 1
FMResource meta 0 CRYSTAL 1
FMResource meta 1 DARKNESS 1
墨之花(全 meta) PLANT 1 + LIFE 1 + SENSES 1 + DARKNESS 1
骑乘作物(!noLust) TREE 2 + CLOTH 2 + BEAST 1 + LUST 1 + WEAPON 1
污秽果 TAINT 2 + POISON 1
污秽煤 TAINT 2 + ENTROPY 2
污秽树叶 TAINT 1 + PLANT 1
污秽原木 TAINT 1 + TREE 3
污秽木板 TREE 1
污秽石(仅 meta 1) EARTH 1

来源:DarkAspects.java:268-326。

生物标签

addAspects() 遍历 ThaumcraftApi.scanEntities 追加元素(:216-265):

生物 追加元素
BrainyZombie WRATH 3
GiantBrainyZombie WRATH 4
Firebat WRATH 1 + NETHER 2
Skeleton(有 NBT) NETHER 3
Creeper(无 NBT) WRATH 2
Creeper(有 NBT) WRATH 4
WitherBoss NETHER 7 + WRATH 7
Ozelot SLOTH 3
Enderman PRIDE 4 + ENVY 4
Ghast NETHER 3 + WRATH 3
PigZombie WRATH 6
EnderDragon PRIDE 10
Taintacle(!noLust) LUST 3
Pig GLUTTONY 3
LavaSlime NETHER 1
TwilightForest.Forest Bunny(!noLust) LUST 5
TwilightForest.Mini Ghast NETHER 1 + WRATH 1
TwilightForest.Tower Boss NETHER 10 + WRATH 10
TwilightForest.Tower Ghast NETHER 3 + WRATH 3
TwilightForest.Twilight Lich PRIDE 10
TwilightForest.Pinch Beetle(!noLust) LUST 3
TwilightForest.King Spider PRIDE 4
witchery.demon NETHER 8

[!NOTE] 另有 Config.java:325-345 的 spawnerMobs 映射表(14 个原版生物 → 精华类型),把刷怪笼生成物关联到精华,其中 "Ghast" → DarkAspects.NETHER(:333)。它作用于刷怪笼而非普通生成,与上面的 scanEntities 追加是两套独立机制。

研究触发

只有 3 条研究用 setAspectTriggers 把本 mod 元素作为研究解锁条件(ForbiddenResearch.java):

研究 触发元素 源码
HELLFIRE DarkAspects.NETHER :187-188
SUBCOLLAR DarkAspects.LUST :212
ARCANECAKE DarkAspects.GLUTTONY :251

其余 WRATH / ENVY / PRIDE / SLOTH 4 个元素没有任何研究以其为解锁条件——它们只能通过上面的对象标签与生物标签被动获得。

源码缺陷

  • 7 个元素的第 5 个构造参数只有两个取值:LUST / PRIDE / GLUTTONY / ENVY 传入 1,NETHER / SLOTH / WRATH 传入 771(DarkAspects.java:30-73)。

    无法核实:该参数在 Thaumcraft Aspect 构造器中的确切语义(是否为元素 ID、重复值如何处理)无法从本仓库确认。已检查 /Users/evlos/a/mirror/ 下仅有 ThaumcraftMobAspects,无 Thaumcraft 本体源码(find /Users/evlos/a/mirror/Thaumcraft* -path '*api/aspects/Aspect.java' 无结果)。此处仅记录源码字面值,不推断其运行时后果。

  • LUST 关闭后元素数与引用不对齐:Config.noLust = true 时 LUST 字段保持 null(:20 声明、:29-36 整段跳过),但 addAspects() 中 6 处 LUST 引用必须靠 if (!Config.noLust) 逐个包住(:205、:243、:249、:259、:280),漏掉任一处会直接 NPE。
  • 注释掉的标签仍有部分保留:oreNetherQuartz(:92-95)、enderPearl(:126-128)、bed 的追加式写法(:166-167)、comparator 的 registerComplexObjectTag 旧 API(:194-199)、eyeOfEnder 的 registerComplexObjectTag(:175-176)均已注释但保留在源码中。

相关条目

  • 研究 —— 54 条研究的 4 个来源拆分;HELLFIRE / SUBCOLLAR / ARCANECAKE 三条的触发元素见上表
  • 通用物品 —— 致命碎片 7 种 meta 与 FMResource 2 种 meta 的元素来源
  • 污秽树 —— 污秽原木 / 木板 / 树叶的元素标签
  • 配置项 —— No Lust 开关与其余 spawnerMobs 映射
  • WandOverlord —— 唯一直接消费 HELLFIRE 研究的研究机制