Node Transmodifier

基本信息

属性 值
注册名 ThaumicMachina:nodeTransmodifier
类 BlockNodeTransmodifier(继承 TMBlockContainer)
TileEntity TileNodeTransmodifier(IInventory,4 槽)
材质 Material.rock
库存名 "Node Transmodifier"(hasCustomInventoryName() == false)
getRenderType -1(TESR 路径,renderID = -1)
getIcon 恒返回 customIcon,方块无 meta 差异
GUI ID 0(GuiID.ID_NODE_TRANSMODIFIER)
硬度 / 抗性 / 亮度 未调用 setter —— 全部为 Block 默认值(硬度 0.0、抗性 0.0、亮度 0)
掉落 未覆写 getDrops / getItemDropped —— 无掉落物

功能

本模组唯一的机器方块。玩家放入最多 4 个 Node Augmentation,然后用红石脉冲触发:updateEntity() 检测到 receivingIndirectRedstoneSignal 为真时,扫描以自身为中心的一个立方体区域,把每个槽位的节点改装 handle() 到区域内所有 TileNode 上。

它不是多方块结构:无 IMultiblock、无结构控制器、无方块框架判定。

数值

数值 值
Inventory 槽数 4(new ItemStack[4])
每槽 stackLimit 1(getInventoryStackLimit() 硬编码 1)
扫描体积 13×13×13 = 2197 格(regionBounds = 7,循环 i/j/k ∈ [-6, 6])
扫描原点 相对 TE 自身坐标 xCoord/yCoord/zCoord
目标实体 thaumcraft.common.tiles.TileNode(Aura Node)
触发方式 间接红石信号(receivingIndirectRedstoneSignal)
束光起点 (x+0.5, y+0.75, z+0.5)
束光贴图 ThaumicMachina:textures/misc/beam_transmodifier.png
束光 speed / opacity / noClip 0.015 / 0.25F / false
束光颜色 两端 Color(4915330) → Color(7089607),按 sin(ticks/20) 插值
GUI ID 0

扫描范围推导:TileNodeTransmodifier.java:35-38

final int regionBounds = 7;
for (int i = -(regionBounds / 2 + 3); i < regionBounds; ++i) {   // -(3+3) = -6 .. 6

每轴 13 格,范围关于原点对称。

交互

触发 行为
右键 打开 GUI(player.openGui(ThaumicMachina.instance, 0, world, x, y, z))
红石脉冲 扫描 13³ 体积,逐一执行 4 槽装改的 handle(node)
关闭 GUI 内容物随 TE 存 NBT;isUseableByPlayer 恒 true(无权限校验)
方块破坏 TMBlockContainer.breakBlock → world.removeTileEntity;不倾倒 4 槽内容物

源码缺陷

  • 无任何配方。全仓 GameRegistry.addRecipe 调用数为 0(core/TMObjects.java 只注册 1 个奥术配方 + 循环 5 个注魔配方),本方块在生存模式无法获得。
  • 默认硬度 0.0。BlockNodeTransmodifier 构造器(block/BlockNodeTransmodifier.java:15-22)只设了 renderAsNormalBlock / renderID / isOpaqueCube,从未调用 setHardness。
  • 破坏丢槽:TMBlockContainer.breakBlock(block/TMBlockContainer.java:31-34)只移除 TE,4 槽 ItemStack[] 不掉落也不返还。
  • isItemValidForSlot 恒 false(tile/TileNodeTransmodifier.java:176-178)。容器用 SlotLocked 覆盖了同一判断,所以实际可用,但 TE 侧的这个方法是死代码。
  • 服务器端也会跑 drawBeam 前的逻辑:updateEntity 中 if (this.worldObj.isRemote) continue; 出现在 handle(node) 之后,即服务端同样执行改装,只是不画特效。注释与实际顺序相反,容易误读。
  • doubleRecharge(TileNode) 是死代码(tile/TileNodeTransmodifier.java:100-110):反射调用 handleRecharge(boolean),但全仓无任何调用点,导致 Dual Charging 改装完全失效(详见 节点改装系统)。

相关条目