节点基体 (Node Matrix)

基本信息

属性 值
类名 shukaro.nodalmechanics.items.ItemMatrix
父类 net.minecraft.item.Item
内部注册名 NodalMechanics:nodalmechanics.matrix
未本地化名(已调制) nodalmechanics.matrix.attuned(lang key item.nodalmechanics.matrix.attuned.name)
未本地化名(未调制) nodalmechanics.matrix.unattuned(lang key item.nodalmechanics.matrix.unattuned.name)
英文名 Attuned Node Matrix / Unattuned Node Matrix
最大堆叠 1(setMaxStackSize(1))
子类型 开启(setHasSubtypes(true)),但所有变体共用同一张贴图
贴图 nodalmechanics:itemMatrix(registerIcons 一次性注册,getIconFromDamage 忽略 meta)
稀有度 已调制 = uncommon(发光),未调制 = common
耐久 / 附魔 未设置(Item 构造中无 setMaxDamage / setMaxStackSize 之外的属性调用),即无耐久、不可附魔
创造标签 NodalMechanics.mainTab(NodalTab,标签名 lang key itemGroup.nodalmechanics.tab,中文「节点学」)

⚠️ 注册名说明:NodalItems.initItems() 调用的是 GameRegistry.registerItem(itemMatrix, itemMatrix.getUnlocalizedName()), 传入的是未本地化名 nodalmechanics.matrix,因此内部注册名是 NodalMechanics:nodalmechanics.matrix(modid 段 NodalMechanics + 重复的一段 nodalmechanics.matrix)。 这是直接按 NodalItems.java:11 读出的结果,不是笔误修正。

功能

节点基体是本 mod 唯一的物品,也是整套系统的载体。它本身不执行任何动作,全部行为通过 NBT 中的 Aspects 字段表达:

  • 未调制基体:没有 Aspects NBT,是"空"的(tooltip 显示「空」),无法用于节点催生。
  • 已调制基体:Aspects NBT 中存有一组要素(aspect)及其数量,是节点催生时提供要素种子的输入,也是创造标签里"一键拿样机"的变体来源。

判定逻辑在 ItemMatrix.isAttuned(ItemStack):只要 NBT 含有 Aspects 键就算已调制, 不做非空校验。因此一张写入空 Aspects 列表的基体会显示为「已调制」并带发光特效, 但在下文的两个配方里都会被拒绝(AspectList.size() == 0 → matches 返回 false)—— 这是代码里真实存在的一个 UI 与可用性不一致的边界情况。

显示名通过覆写 getUnlocalizedName(ItemStack) 实现:按是否已调制追加 .attuned 或 .unattuned 后缀, 所以同一个物品在物品栏里同时存在两种名字(zh_CN:「节点基体(已调制)」「节点基体(未调制)」)。

要素标记(附魔等价说明)

ItemMatrix 没有自定义附魔。基体的"要素倾向"完全由 AspectList.writeToNBT() 写入的 Aspects NBT(每种本原要素一个条目,值为 essentia 数量)承载,这组数据被两个配方读取:

基体的 vis 总量始终等于「NBT 里所有要素数量之和 × 4」。

创造标签内容

getSubItems 会在标签里列出 1 + N 个变体,其中 N = Aspect.getPrimalAspects() 的数量:

变体 数量 NBT
未调制基体 1 无
每个本原要素一个"已调制"基体 每个本原要素 1 个 Aspects = 该要素 8 essentia

本原要素列表由泰老 Aspect.getPrimalAspects() 在运行时给出(泰老本体为 6 种; 若其他 mod 追加本原要素,标签内的变体数会同步增加)。所有变体的堆叠数都是 1, getIconFromDamage 忽略 meta,所以图上看起来与未调制基体完全一样,只有名字和高亮不同。

配方

初始基体(奥术注魔 · Infusion)

由 NodalRecipes.matrixRecipe 注册(ThaumcraftApi.getCraftingRecipes().add):

参数 值
配方 ID NODECATALYZATION(需先完成该研究)
核心物品 NodalMechanics:nodalmechanics.matrix(构造函数的 key 参数)
不稳定性 10
要素消耗 禁忌 SLOTH 16、禁忌 PRIDE 16、AURA 32、MAGIC 32
注入材料 禁忌魔力等价物 ForbiddenItems.deadlyShards meta 3、泰老平衡碎片 itemShard:6、deadlyShards meta 5、itemShard:6、deadlyShards meta 5、itemShard:6(共 6 个)
产物 IC2 拉普隆晶体 Ic2Items.lapotronCrystal(meta 为 OreDictionary.WILDCARD_VALUE)

该配方在代码里的 key(核心物品)被设为节点基体本身、recipeOutput 被设为拉普 tron 晶体。 这两个参数与「用基体换晶体」的直觉相反,是照抄 NodalRecipes.java:31-40 的原样。 TC4 注魔机实际返还哪一个栈由 thaumcraft.api.crafting.InfusionRecipe 与 BlockArcaneInfusion 决定,不在本 mod 源码内——此处不做推断,实际产物请以游戏内为准。 可以确定的是:这张配方是唯一一处把禁忌要素(DarkAspects)引入系统的配方。

itemShard:6 在源码里的变量名是 balancedShard;deadlyShards 的 meta 3 / meta 5 在本 mod 中没有区分命名,其具体变体名称由禁忌魔法定义。

后续配方

基体本身不参与工作台/奥术工作台合成,它只在两个由 mod 动态实现的配方里作为输入出现:

  • Matrix Attunement:基体 + essentia 源质瓶 → 要素更多的基体
  • Node Infusion:已调制基体 + itemResource:14 ×4 → 注入用节点种子

两张配方的研究页面图示(静态 ShapedArcaneRecipe / InfusionRecipe)见 Research NODECATALYZATION。

数值

数值 值 来源
最大堆叠 1 ItemMatrix 构造
创造标签变体数 1 + 本原要素数 getSubItems
标签示例要素量 8 new AspectList().add(aspect, 8)
调制换算倍率 essentia ÷ 4(整数除) RecipeAttune.ESSENTIA_MULTIPLIER
催生 vis 倍率 要素量 × 4 RecipeNode.ESSENTIA_MULTIPLIER
催生注入材料 itemResource:14 ×4 RecipeNode 构造函数
催生不稳定性 10 RecipeNode.INSTABILITY
扭曲值 8 ThaumcraftApi.addWarpToItem(itemMatrix, 8)

耐久与消耗

项目 值
最大耐久 无
每次使用消耗 无耐久消耗
使用后是否消失 调制与催生都会消耗输入的基体(作为配方材料被吃掉),但产物仍是基体/节点

第三方 mod 集成

  • Thaumcraft:Aspect / AspectList(NBT 数据格式)、ItemApi(源质瓶 itemEssence:1、itemResource:14、itemShard:6、节点罐 itemJarNode:0)。
  • Forbidden Magic:DarkAspects.SLOTH / DarkAspects.PRIDE 作为初始基体配方的要素,ForbiddenItems.deadlyShards meta 3/5 作为注入材料。
  • IC2:Ic2Items.lapotronCrystal 作为初始基体配方的 recipeOutput。
  • Tainted Magic / AWWayofTime:@Mod 注解里声明为 required-after,但 src/ 内没有任何代码引用,属于硬依赖却不参与逻辑。
  • 无 NEI / NEI 集成代码;配方展示完全依靠泰老研究页面。

相关条目