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) 的判定顺序:

  1. 研究校验:未完成 NODECATALYZATION → false。
  2. 材料数量:input == null || input.size() != 4 → false(必须正好 4 个)。
  3. 材料种类:逐个 OreDictionary.itemMatches(itemResource:14, input.get(i), true) (checkNBT = true),任一不符 → false。
  4. 中心物品:central != null && central.getItem() == NodalItems.itemMatrix; 且 central 必须带 NBT compound——未调制的基体(无 NBT)直接失败。
  5. 要素非空:读出基体 Aspects,size() == 0 → false。
  6. 计算 vis:this.aspects = 基体每种要素量 × 4(直接覆写配方实例上的字段)。
  7. 写产物 NBT:
    • 把基体的要素列表按**原量(×1)**写进新的 NBT(种子);
    • nodetype = 随机节点类型(必写);
    • 75% 概率再写 nodemod = 随机修饰符;
    • ((ItemStack) this.recipeOutput).setTagCompound(...) —— 直接改写配方实例上的 recipeOutput 栈(父类该字段声明为 Object,所以这里要强转)。
  8. 返回 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:本配方不使用(它们只出现在初始基体配方里)。

相关条目