样板编码台

基本信息

属性 值
注册名 ae2stuff:Encoder
英文名 Pattern Encoder
中文名 样板编码台
TileEntity net.bdew.ae2stuff.machines.encoder.TileEncoder
硬度 1(BlockEncoder.scala:38)
材质 MachineMaterial(MapColor.ironColor)
GUI ID 1(MachineEncoder.scala:30)
可旋转 是(RotatableTileBlock + RotatableTile)
内部储能 无(MachineEncoder 只混入 Machine,未混入 PoweredMachine)
升级槽 无

功能

样板编码台是一个纯手动的 3×3 配方编码器:玩家把材料放进 3×3 假合成槽,再放入 AE2 空白样板(Blank Pattern),编码台就把结果写进第 11 号槽的「已编码样板」,玩家手动取出。它不自动把样板发送到 ME 网络,也不做循环消耗——与 ME 分子屋里的自动编码完全是两回事。

第 10 号槽放入已编码样板(Encoded Pattern)时,会被 ContainerEncoder.slotClick(ContainerEncoder.scala:59-70)自动拆成对应数量的空白样板。

槽位

TileEncoder.getSizeInventory = 12(TileEncoder.scala:40):

槽号 用途 约束
0–8 3×3 配方材料 SlotFakeCrafting,canTakeStack 恒 false,只能整组替换(点击放入 1 个)
9 合成结果 SlotFakeCraftingResult,isItemValid 恒 false,纯展示
10 样板 isItemValidForSlot 只接受 blankPattern
11 已编码样板 每次 markDirty 覆写,canTakeStack 恒 false;左键取 1 个 / Shift 取全部(slots.scala:53-78)

编码逻辑

TileEncoder.encodePattern(TileEncoder.scala:63-88)的成立条件:结果槽非空、9 个材料槽至少一个非空、第 10 槽有空白样板。产出 NBT:

  • in:9 个材料的完整 writeToNBT 快照(空槽写空 NBTTagCompound)
  • out:单个结果快照
  • crafting: true(AE2 用它区分合成样板与处理样板)

从网络读回配方

GUI 的「从网络载入样板」按钮发 MsgSetRecipe2 / MsgSetRecipe3 到服务端(MachineEncoder.scala:51-84)。TileEncoder.findMatchingRecipeStack(TileEncoder.scala:90-120)会去 IStorageGrid 的 getStorageList 里用 findPrecise 精确查找,以还原服务端保存的精确 NBT(而非只按物品类型匹配)。若该物品 damage 为 OreDictionary.WILDCARD_VALUE,会先 getSubItems 展开全部子物品再匹配(注释说明是为绕开若干坏掉的 NEI handler)。全部匹配失败时退回列表第一个变体。

数值

数值名 值 来源
待机功耗 1 AE/t tuning.cfg Machines/Encoder/IdlePower
工作功耗 0(无周期概念) —
内部容量 0(不混入 PoweredMachine) MachineEncoder.scala:27-29
槽位总数 12 TileEncoder.scala:40

编码台不消耗任何工作量,只要通电就持续以 1 AE/t 挂在网格上。

交互

触发 行为
右键(未连接网格) 红色聊天提示「未连接网络」,不开 GUI(BlockEncoder.scala:72-77)
右键(已连接) 打开 GUI(node.isActive 为真时才开)
潜行 + AE2 扳手 拆除并返还(IDismantleable)
潜行 + BC 扳手 同上,BC 存在时

meta 与外观

@MENetworkEventSubscribe networkPowerStatusChange(TileEncoder.scala:138-146)把 meta 设为 1(node.isActive)或 0,并据此切换 topIconOn / topIconOff。其余各面共用 side 图标(BlockEncoder.scala:43-50)。旋转只影响 GUI 内图案朝向,不影响功能。

破坏掉落

实现 BlockKeepData + afterTileBreakSave 会移除 ae_node 标签(TileEncoder.scala:122-125),因此机器可被 AE2 自动化拆走而不污染新放置方块的网格节点。

配方

无序:B:crafting_table + OD:itemIlluminatedPanel(EnderIO)+ M:calcProcessor(AE2 计算处理器)→ ae2stuff:Encoder(recipes.cfg:23-29)。EnderIO 非硬依赖,但默认配方需要它。

已知缺陷

MachineEncoder 没有混入 PoweredMachine,因此 lazy val idlePowerDraw 只被 TileEncoder.getIdlePowerUsage(TileEncoder.scala:136)使用——没有可调容量,这一点与 晶体催生仓 和 高级压印器 不同。