Node Infusion(节点催生 · 动态注入配方)
基本信息
| 属性 | 值 |
|---|---|
| 类名 | shukaro.nodalmechanics.recipe.RecipeNode |
| 父类 | thaumcraft.api.crafting.InfusionRecipe |
| 注册时机 | NodalRecipes.initRecipes()(FMLInitializationEvent),ThaumcraftApi.getCraftingRecipes().add(...) |
| 工作方块 | 奥术注魔(Arcane Infusion) |
| 配方 ID | NODECATALYZATION |
| 注入中心 | 已调制的 节点基体 |
| 注入材料 | 泰老 itemResource:14 ×4 |
| 不稳定性 | INSTABILITY = 10 |
| 要素消耗 | 动态:基体 Aspects 中每种要素 × ESSENTIA_MULTIPLIER(4) |
| 随机项 | 节点类型(6 选 1)+ 节点修饰符(3 选 1 或不写) |
功能
把一张已调制的节点基体放进奥术注魔的注入位,注入 4 个 itemResource:14,
并按基体上记录的全部要素提供 vis,产出一个带随机类型/修饰符的节点种子。
基体上的要素种类与数量原样写入产物的 NBT——即基体决定了"这个节点会长成什么",
而随机数决定"它是哪一档节点"。
matches(ArrayList<ItemStack> input, ItemStack central, World, EntityPlayer) 的判定顺序:
- 研究校验:未完成
NODECATALYZATION→false。 - 材料数量:
input == null || input.size() != 4→false(必须正好 4 个)。 - 材料种类:逐个
OreDictionary.itemMatches(itemResource:14, input.get(i), true)(checkNBT = true),任一不符 →false。 - 中心物品:
central != null && central.getItem() == NodalItems.itemMatrix; 且central必须带 NBT compound——未调制的基体(无 NBT)直接失败。 - 要素非空:读出基体
Aspects,size() == 0→false。 - 计算 vis:
this.aspects = 基体每种要素量 × 4(直接覆写配方实例上的字段)。 - 写产物 NBT:
- 把基体的要素列表按**原量(×1)**写进新的 NBT(种子);
nodetype= 随机节点类型(必写);- 75% 概率再写
nodemod= 随机修饰符; ((ItemStack) this.recipeOutput).setTagCompound(...)—— 直接改写配方实例上的recipeOutput栈(父类该字段声明为Object,所以这里要强转)。
- 返回
true。
⚠️ 产物模板说明:构造函数里
recipeOutput传的是new ItemStack(NodalItems.itemMatrix), 而key传的是ItemApi.getItem("itemJarNode", 0)。matches()覆写后不再检查 key (因此itemJarNode:0这个 key 实际不参与判定),只会把 NBT 打进recipeOutput。 也就是说:产出的物品类型、是否真的落在节点罐上,由泰老InfusionRecipe与BlockArcaneInfusion的实现决定,不在本 mod 源码内,此处不做断言。 可以从源码确定的是:产物栈携带的 NBT 为「基体原要素 +nodetype+ 可选nodemod」, 而研究页面上的两张静态等价配方variedNodeRecipe/sameNodeRecipe把产物写的是itemJarNode:0(见 研究页面), 因此设计意图是产出已种子的节点罐。
节点类型变体(thaumcraft.api.nodes.NodeType)
getNodeType() 用一次 random.nextInt(100) 分档:
| 掷点区间 | 枚举值 | 概率 | 与其他类型的差异(本 mod 视角) |
|---|---|---|---|
| 0–74 | NORMAL |
75% | 基准档,超过半数命中;无任何额外处理 |
| 75–79 | UNSTABLE |
5% | 稀有档之一,与 DARK/TAINTED/HUNGRY/PURE 同为 5% |
| 80–84 | DARK |
5% | 稀有档之一 |
| 85–89 | TAINTED |
5% | 稀有档之一 |
| 90–94 | HUNGRY |
5% | 稀有档之一 |
| 95–99 | PURE |
5% | 稀有档之一(区间上界,与其余 5 档平分最后 20 点) |
- 除
NORMAL外其余 5 种各占 5%,合计 25%——即约 4 次里有 1 次出非普通节点。 - 每种类型在 NBT 中存的是
NodeType枚举的 ordinal 值(nodetype整数字段)。 - 各类型的实际行为由泰老
NodeType定义,本 mod 只决定概率,不做任何行为差异处理。 想知道某种节点的效果请查泰老节点系统,本条目不臆测。
节点修饰符变体(thaumcraft.api.nodes.NodeModifier)
getNodeModifier() 只在 matches() 里 random.nextInt(100) < 75 成立时才被调用,
即 25% 的产物根本没有 nodemod 字段(对应泰老"无修饰符"状态)。
在"进入修饰符判定"的 75% 中:
| 掷点区间 | 枚举值 | 条件概率 | 折算到全部产物 |
|---|---|---|---|
| 0–74 | FADING |
75% | 56.25% |
| 75–89 | PALE |
15% | 11.25% |
| 90–99 | BRIGHT |
10% | 7.5% |
| — | 无 nodemod 字段 |
— | 25% |
(折算列 = 条件概率 × 75%,为本 wiki 基于源码概率的算术推算,源码中没有这一列。)
- NBT 字段名
nodemod,值为NodeModifier枚举的 ordinal 值。 - 修饰符的分档逻辑与类型完全独立,两次掷点互相独立(
getNodeModifier内部还有自己的nextInt(100)),所以"类型"和"修饰符"是两枚独立骰子。 - 同样地,修饰符的具体效果由泰老
NodeModifier定义,本 mod 只决定概率。
变体组合一览
因为类型与修饰符是两次独立掷点,理论组合数为 6 × 4 = 24 种(6 类型 × 3 修饰符 + 无修饰):
| 组合 | 出现概率(本 wiki 算术推算) |
|---|---|
NORMAL + 无修饰 |
18.75% |
NORMAL + FADING |
18.75% |
NORMAL + PALE |
3.75% |
NORMAL + BRIGHT |
2.5% |
| 其余 5 种类型 × 4 种修饰状态 | 各 ≤ 1.25% |
推算方式:类型概率 × 对应修饰状态概率(FADING 0.5625、PALE 0.1125、BRIGHT 0.075、无 0.25)。
这些概率不在源码里,仅由 getNodeType()/getNodeModifier() 的分档推出。
数值
| 数值 | 值 |
|---|---|
ESSENTIA_MULTIPLIER |
4 |
INSTABILITY |
10 |
| 注入材料数量 | 4(固定) |
| 注入材料 | ItemApi.getItem("itemResource", 14) |
| vis 消耗 | 基体全部要素数量之和 × 4 |
| 节点类型概率 | 75 / 5 / 5 / 5 / 5 / 5(%) |
| 修饰符出现概率 | 75%(出现时 FADING 75% / PALE 15% / BRIGHT 10%) |
| 种子要素量 | 基体原量(×1,不乘 4) |
静态等价配方(仅研究页面展示)
| 配方 | 核心 | 要素 | 材料 | 产物 NBT |
|---|---|---|---|---|
variedNodeRecipe |
variedAttune(六本原各 2 的基体) |
六本原各 8(合计 48) | itemResource:14 ×4 |
Aspects 六本原各 2 + nodetype = 0 |
sameNodeRecipe |
sameAttune(IGNIS 16 的基体) |
IGNIS 64 |
itemResource:14 ×4 |
Aspects IGNIS 16 + nodetype = 0 |
两张的不稳定性都是 10,研究都是 NODECATALYZATION,且同样没有被加入配方列表
(initRecipes() 只注册 matrixRecipe、RecipeAttune、RecipeNode),
只作为研究页面的图示。从数值上可以对出 ×4 倍率:基体六本原各 2(合计 12)→ vis 消耗
六本原各 8(合计 48);基体 IGNIS 16 → vis 消耗 IGNIS 64。
限制
- 必须先完成
NODECATALYZATION研究。 - 注入材料必须正好 4 个
itemResource:14,多一个或少一个都不匹配。 - 注入中心必须是有
Aspects的基体:未调制基体(无 NBT)与要素为空的基体都失败。 - 中心物品不校验
nodetype/nodemod是否已存在——已催生过的产物若被当作中心 (前提是它还是NodalItems.itemMatrix类型)会重新走一遍随机,与原有 NBT 无关。 this.aspects与this.recipeOutput都是配方单例上的可变字段,每次matches()都会覆写。多玩家同时尝试时最后一次匹配的结果会留在实例上(源码无同步处理)。- 节点类型与修饰符的行为不在本 mod 内,效果需查泰老。
第三方 mod 集成
- Thaumcraft:
InfusionRecipe、NodeType(6 值)、NodeModifier(3 值)、AspectList、研究校验 API。 - IC2 / Forbidden Magic:本配方不使用(它们只出现在初始基体配方里)。
相关条目
- 节点基体 - 注入中心,携带决定种子要素的
AspectsNBT - Matrix Attunement - 上一步:把 essentia 灌进基体
- Research NODECATALYZATION - 前置研究 + 静态等价配方图示