高级存储卡(Advanced Memory Card)

BetterP2P 注册的唯一物品,用于检视与编辑 ME 网络中的 P2P 隧道。 AE2 原版内存卡的超级升级版:右键 P2P/ME 设备即可打开 GUI 完成配对、复制、改类型、重命名、解绑等操作。

基本信息

属性 值
注册名 betterp2p:advanced_memory_card
内部类 com.projecturanus.betterp2p.item.ItemAdvancedMemoryCard (Kotlin object)
最大堆叠 1
耐久度 无
创造标签 AE2 CreativeTab.instance
NBT 存储 gui (byte), selectedIndex (compound), frequency (long), mode (int)

功能

  • 对任意带 GridNode 的方块(如 ME 控制器、P2P 隧道、ME 终端等)右键:扫描该网络内所有 P2P 隧道并打开 GuiAdvancedMemoryCard。
  • GUI 内可以完成 AE2 内存卡做不到的事:
    • 配对两端的 P2P 隧道(一键绑定同一频道)。
    • 复制输入端频道到任意输出端。
    • 解绑(把频率置 0)。
    • 改类型(如 ME-P2P 转红石-P2P),并可级联整组网络。
    • 重命名 P2P(设置 AE2 自定义名称)。
  • 支持 4 种模式(OUTPUT / INPUT / COPY / UNBIND)切换,影响 GUI 中选择目标的行为。
  • 搜索框支持 @in / @out / @b / @u / @types=... / "name" 过滤语法。
  • 潜行(Shift)+ 右键:在客户端清空 P2P 缓存、清除世界中的方框高亮。

使用方式

使用方式 触发条件 使用效果 条件/限制
右键点击方块 目标方块为 IGridHost 且对应方向有 GridNode 在服务端调用 ModNetwork.initConnection(...) 并把当前 MemoryInfo(含模式、选中项、频率)写入 NBT;客户端接收 S2COpenGui 后打开 GUI 需 AE2 安全权限 BUILD(否则失败);潜行不绕过方块交互 (doesSneakBypassUse = true,但不影响右键逻辑)
右键点击空气 玩家潜行且世界为 isRemote 清空 ClientCache(包括边框高亮列表) 仅客户端;服务端无效
GUI 关闭 玩家关闭 GUI 服务端接收 C2SCloseGui 后从 playerState 移除该玩家状态 自动

服务器只在玩家右键到合法 IGridHost 时才记录状态、才把 GUI 推到客户端。

数值与 NBT

字段 类型 默认值 说明
gui byte GuiScale.DYNAMIC.ordinal GUI 行数缩放
selectedIndex compound (P2PLocation) 空 选中的 P2P 位置
frequency long 0 当前频率(0=未配对)
mode int BetterMemoryCardModes.OUTPUT.ordinal 当前绑定模式

模式

详见 绑定模式。物品本身只存储 mode 的 ordinal,行为由服务端 GridServerCache 决定。

网络包

  • 客户端 → 服务端:C2SUpdateMemoryInfo(同步 MemoryInfo 回 NBT)。
  • 服务端 → 客户端:S2COpenGui(首次打开 GUI 的全量 P2P 列表 + MemoryInfo)、S2CUpdateP2P(增量更新)。
  • 业务操作:C2SLinkP2P、C2SUnlinkP2P、C2STypeChange、C2SRenameP2P、C2SRefreshP2PList、C2SCloseGui。详见 网络协议。

安全检查

onItemUse 内部检查(ItemAdvancedMemoryCard.kt:65-68):

if (grid is ISecurityGrid && !grid.hasPermission(player, SecurityPermissions.BUILD)) {
    return false
}

玩家必须拥有 AE2 安全网格的 BUILD 权限才能打开 GUI。

相关条目