高级存储卡(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。