ME 售货机上行接口
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | hatch.vendinguplink.me(GTNH MTE 名,非 vendingmachine: 命名空间) |
| 显示名 | hatch.vendinguplink.me.name = ME Vending Uplink Hatch |
| MTE ID | 2742(VendingMachine.ME_UPLINK_MTE_ID) |
| 类 | MTEVendingUplinkHatch extends MTEHatch |
| Tier | mTier = 3 |
| 大小 | 单方块机器 |
| 附腔 | 无(super(aID, aName, aNameRegional, mTier, 0, ...) 槽位数 0) |
| 物品形态 | 1 个 |
功能
AE2 侧的可选仓背接口。装进 自动售货机 结构后, 售货机可以直接从 ME 网络 抽取交易所需的物品与硬币,绕过机器自身的 8 个输入格与 100 个输出格。
源码:blocks/MTEVendingUplinkHatch.java(510 行)。
网络接入
| 行为 | 源码依据 |
|---|---|
| 节点标志 | gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL) — 必须有频道 |
| 所有者 | 设为方块 getOwnerName() 对应的玩家 |
| 电缆类型 | 输出面 AECableType.SMART,其余 AECableType.NONE |
| 连接面 | 默认只有正面;潜行右键扳手切换为六面(onWireCutterRightClick → additionalConnection) |
| 权限 | isAccessAllowed() 恒为 true,无任何玩家权限检查 |
| 朝向 | isFacingValid() 恒为 true,六个面都能装 |
缓存与刷新
- 每 20 tick(
tick % 20 == 0)刷新一次存储缓存refreshStorageCache(),并把网络内所有硬币折算进内部meWallet refreshCache标志由售货机的onPostTick通过uplinkHatch.setRefreshCache()置位(GUI 刷新时触发)- 售货机查询某币种数量走
getCurrencyAmount(CurrencyType)→meWallet.getCount(type)
产出回注
交易成功后的物品不会落在机器里,而是排队进 pendingItemInject(LinkedList<IAEItemStack>):
- 合并逻辑:同物品同 NBT 的堆会累加数量
- 每超过 40 tick(
tick - lastOutputTick > 40)尝试flushInjectBuffer一次 - 注入走
Platform.poweredInsert(...),按 AE2 实际可插入量部分回注 - NBT 键
pendingInject(NBTTagList)
数值
| 数值 | 值 |
|---|---|
| Tier | 3 |
| MTE ID | 2742 |
| 缓存刷新周期 | 20 tick |
| 回注最小间隔 | 40 tick |
| 存档键 | pendingInject |
交互
| 触发 | 行为 |
|---|---|
| 潜行 + 右键扳手 | 切换额外连接面(单面 ↔ 六面),聊天栏提示 GT5U.hatch.additionalConnection.* |
| AE2 电缆接入 | 建立 ME 网格代理节点 |
WAILA
getWailaNBTData 写入 stackCount(待回注堆数)与 stacks(按堆叠数降序取前 10 个)。
高级提示栏显示缓存堆数量与逐项列表,超出部分显示「还有 N 项」。
限制
- 无附腔,机器内部不能塞任何东西
- 结构中最多 1 个(
ofHatchAdderOptional(..., 1)) securityBreak()是空实现(AE2 拆除监控无响应)- 未设
mTier以外的电力需求,但需要 AE2 频道供电才能激活