样板编码台
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | 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)使用——没有可调容量,这一点与 晶体催生仓 和 高级压印器 不同。