AE 要素赋予(AE2 物品获得 Thaumcraft 要素)
基本信息
| 属性 | 值 |
|---|---|
| 实现类 | thaumicenergistics.common.registries.AEAspectRegister(单例 AEAspectRegister.INSTANCE) |
| 类注释 | Gives items from AE2 aspects when scanned.(AEAspectRegister.java:36) |
| 调用时机 | ThaumicEnergistics.postInit → AEAspectRegister.INSTANCE.registerAEAspects()(ThaumicEnergistics.java:163-167) |
| 异常处理 | 整个过程被 try/catch 包裹,失败时仅记警告日志 Unable to finish aspect registration due to exception:%n%s%n(ThaumicEnergistics.java:165-167) |
| 辅助挂钩 | AspectHooks.hook_AspectInit(Aspect) 记录每个要素的归属 mod(integration/tc/AspectHooks.java:26-32) |
功能
这是 ThE 与 Thaumcraft 最重要的机制级集成(而非内容级集成):它让 AE2 的所有物品与方块都能被 ThA 扫描出要素,从而在 ThA 的扫描台、蒸馏、注魔等系统中正常参与要素逻辑。没有它,AE2 物品在 ThA 玩家眼中是「无要素的外来物」。
三条要素推导路径
buildAspects() 按优先级尝试(AEAspectRegister.java:276-297):
| 顺序 | 路径 | 方法 | 数据源 |
|---|---|---|---|
| 1 | AE2 研磨机配方 | buildAspectsFromGrinder() |
GRINDER_RECIPES(IGrinderEntry 集合) |
| 2 | AE2 压印机配方 | buildAspectsFromInscriber() |
INSCRIBER_RECIPES(IInscriberRecipe 集合) |
| 3 | 普通合成配方 | buildAspectsFromNormal() |
NORMAL_RECIPES(CraftingManager.getRecipeList(),registerAEAspects 内 :1154) |
任一路径成功即停止。匹配方式为 ThEUtils.areStacksEqualIgnoreAmount(recipeOutput, this.itemStack)(忽略数量的 ItemStack 比较)。
递归解析依赖
findAspectsForIngredients() 在遇到「本身也是 AE2 物品」的配方成分时,会递归注册该成分以取得其要素,并主动防止无限递归:
if (!AEAspectRegister.this.DEPENDENCY_CHAIN.contains(ingInfo)) { // 依赖链去重
ingInfo.registerItem(this.pass);
}
(AEAspectRegister.java:378-383)
两轮扫描(registerAEAspects,:1176-1193)
for (int pass = 1; pass <= 2; pass++) {
while (this.ITEMS_TO_ADD.size() > 0) { ... }
if (pass == 1) {
this.ITEMS_TO_ADD.addAll(this.UNREGISTERABLE); // 第 1 轮失败的第 2 轮重试
this.UNREGISTERABLE.clear();
}
}
第 1 轮无法解析的物品进入 UNREGISTERABLE,第 2 轮再试一次(此时第 1 轮已注册的物品要素已可用,故很多原本失败的物品第 2 轮能成功)。最后 registerThEItems() 单独处理 ThE 自己的物品(:1196)。
覆盖范围为 AE2 的四个注册表(:1167-1170):
getItemsFromAERegistryClass(AEApi.instance().definitions().materials());
getItemsFromAERegistryClass(AEApi.instance().definitions().items());
getItemsFromAERegistryClass(AEApi.instance().definitions().blocks());
getItemsFromAERegistryClass(AEApi.instance().definitions().parts());
研磨机特殊处理
研磨机产物额外获得 ENTROPY 1 并移除 EARTH(AEAspectRegister.java:119-125)—— 因为研磨本质是「把固体磨成粉」,这一修正反映在要素上。
硬编码的要素修正表
对特定 AE2 物品,源码给出固定的要素加减(addPredefinedBonuses(),:113-272):
| AE2 物品 | 要素修正 |
|---|---|
分子装配机 molecularAssembler |
+CRAFT 4 +ENERGY 6 +MECHANISM 2 +CRYSTAL 1(:128-134) |
天空石 skyStone |
+DARKNESS 3(:137-140) |
天空箱 skyChest |
+VOID 4,−EARTH(:142-148) |
石英玻璃 quartzGlass |
+CRYSTAL 4(:151-154) |
ME 控制器 controller |
+MECHANISM 3 +SENSES 1 +MIND 9,−FIRE −ORDER(:156-167) |
ME 驱动器 drive |
+VOID 4,−FIRE −ORDER −SENSES −MECHANISM(:169-177) |
ME 箱子 chest |
+VOID 4,−FIRE −ORDER −SENSES −MECHANISM(:179-187) |
ME IO 口 iOPort |
+EXCHANGE 4,−FIRE −ORDER −SENSES −MECHANISM(:189-197) |
集束器 condenser |
+VOID 10(:199-202) |
红石卡 cardRedstone |
+SENSES 2(:204-207) |
电池工作台 cellWorkbench |
+CLOTH 2(:209-212) |
ME 接口 iface |
+EXCHANGE 6(:214-217) |
逻辑处理器 logicProcessor |
−METAL −FIRE −ORDER,+MIND 3 +METAL 1(:219-232) |
计算处理器 calcProcessor |
−METAL −FIRE −ORDER,+MIND 6 +METAL 1(:234-247) |
工程处理器 engProcessor |
−METAL −FIRE −ORDER,+MIND 9(:249-262) |
| 合成加速器 4x | +ENERGY 2(:260) |
| 合成加速器 16x | +ENERGY 4(:262) |
| 合成加速器 64x | +ENERGY 8(:264) |
| 合成加速器 256x | +ENERGY 16(:266) |
| 合成加速器 1024x | +ENERGY 32(:268) |
ThE 自身物品的要素
registerThEItems()(:991-1041)的策略值得注意:它复制 AE2 1K 电池的要素列表,裁剪到不超过 4 条(超出时按 getAspectsSortedAmount() 移除最低的),再追加 MAGIC 3 + AURA 5:
cellAspects.add(Aspect.MAGIC, 3);
cellAspects.add(Aspect.AURA, 5);
(:1022-1023)随后把同一份要素列表注册给全部 10 种要素电池:1k/4k/16k/64k/256k/1024k/4096k/16384k/Quantum/Singularity(:1024-1033)。若 AE2 1K 电池取不到,则记录 Could not register "Essentia Cells" for TC scanning.(:1039)。
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 扫描轮数 | 2 | for (int pass = 1; pass <= 2; pass++)(AEAspectRegister.java:1176) |
| 覆盖的 AE2 注册表 | 4(materials / items / blocks / parts) | :1167-1170 |
| 要素推导路径优先级 | 研磨机 > 压印机 > 普通合成 | buildAspects()(:276-297) |
| 电池要素条数上限 | 4(裁剪后追加 MAGIC/AURA) | :1004-1019 |
| 电池追加要素 | MAGIC 3 + AURA 5 |
:1022-1023 |
| 硬编码修正的 AE2 物品数 | 20 类(见上表) | :113-272 |
| 最低研磨机要素 | ENTROPY 1 |
:121 |
| 最低集束器要素 | VOID 10 |
:201 |
交互
| 触发 | 行为 |
|---|---|
| 游戏进入 PostInit | 自动执行 registerAEAspects(),玩家无需操作 |
| 玩家用扫描台扫描 AE2 物品 | 返回推导出的要素列表 |
| AE2 研磨配方产物 | 获得 ENTROPY 1 并移除 EARTH |
| 扫描 ThE 自己的要素电池 | 返回 AE2 电池要素(裁剪至 4 条)+ MAGIC 3 + AURA 5 |
| 加载失败 | 仅警告日志,不崩溃(ThaumicEnergistics.java:165-167) |
| 记忆卡 | GUI 中有「Reset the aspects」按钮,可重置左侧要素表到初始状态(thaumicenergistics.tooltip.button.reset.aspect=Reset the aspects) |
合成配方
本条目描述的是系统级行为,不涉及本 mod 的物品配方。可被赋予要素的 ThE 自身物品见 ME Essentia Storage Cell。
相关条目
- Aspect - 承载要素信息的技术物品
- Essentia Vibration Chamber - 消费要素发电的机器
- Infusion Provider - 作为
IAspectSource向 ThA 供给要素