SFM Drive(复制驱动器)
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | StevesAddons:duplicator |
| 物品类 | stevesaddons.items.ItemSFMDrive |
| 未本地化名称 | duplicator |
| 纹理 | stevesaddons:duplicator |
| 最大堆叠 | 1 |
| 耐久 | 无 |
| 创意模式标签 | StevesFactoryManager |
⚠️ 注册名不是
SFMDrive。代码里的注册名是duplicator(reference/Names.java:5,registry/ItemRegistry.java:25),类名ItemSFMDrive才是旧名;本地化键为item.StevesAddons.duplicator.name。
功能
SFM Drive(源码注册名 duplicator,也称"复制器")是用于复制和迁移机器管理器布局的单槽位物品。在潜行时右键点击 SFM 机器管理器方块(TileEntityManager,含 RF 版 TileEntityRFManager),会读取该机器的 NBT 并存储在物品上。
存储的布局可以应用到其他机器管理器方块,或通过 /stevesaddons save、/stevesaddons load 命令保存/加载。已装 WAILA 时物品提示会显示作者或来源坐标(ItemSFMDrive.addInformation)。
使用方式
| 使用方式 | 触发条件 | 使用效果 | 条件/限制 |
|---|---|---|---|
| 潜行 + 右键点击管理器方块 | 潜行 + 右键 | 复制管理器 NBT 数据到驱动器 | 必须是同类管理器 |
| 潜行 + 右键点击同类管理器 | 潜行 + 右键 | 将存储的 NBT 写入目标管理器 | 目标必须是同类型 |
| 快捷栏右键 | 无目标 | 无效果 | — |
行为细节
- 交互判定:生效对象是
instanceof TileEntityManager的 TileEntity,而非按方块注册名判定(ItemSFMDrive.java:56)。另有一条PlayerInteractEvent路径,潜行时用 SFM 管理器替换目标方块的 TileEntity(naming/EventHandler.java:85-94)。 - NBT 验证:驱动器只接受 NBT
id为TileEntityMachineManagerName或TileEntityRFManager的数据;无效 NBT 会被清空(ItemSFMDrive.java:43-49)。注意TileEntityRFManager.writeToNBT会把自己的 id 覆写为TileEntityMachineManagerName(vswe/stevesfactory/blocks/TileEntityRFManager.java:8-11)。 - 坐标剥离:
save时删除x/y/z并写入Author(CommandSave.java:46-49);load时由unstripBaseNBT补回的是 6 个基础键(id、Variables、Components、Timer、ProtocolVersion、ench,CommandDuplicator.java:17,54-59),不含x/y/z——坐标是在应用到目标管理器时由correctNBT按目标方块实际坐标重新写入的(ItemSFMDrive.java:74-76)。 - 组件重编号:若目标管理器已有流量组件(
currentFlow > 0),粘贴时会把ConnectionComponent索引整体加上该数量,避免组件串位(ItemSFMDrive.java:77-105)。 - 最大堆叠为 1,不可叠加。
合成配方
x x = 铁锭(oreDict: ingotIron)
xyx y = StevesFactoryManager 方块管理器
x
实际形状为 3×3 中间的十字,纵向两端为空格(ItemRegistry.java:33-35)。
已订正(审计)
- 注册名:原文
stevesaddons:SFMDrive→ 实为StevesAddons:duplicator(reference/Names.java:5,registry/ItemRegistry.java:25)。 - 未本地化名称:原文
DRIVE→ 实为duplicator。代码用的是setUnlocalizedName(Names.DRIVE),其值为小写"duplicator"(ItemSFMDrive.java:22),DRIVE只是常量名。 - 合成配方图:原文画成 3×3 实心方阵(4 角与 4 边共 6 个
x),与代码不符。实为" x " / "xyx" / " x "十字形,共 5 格(ItemRegistry.java:33-35)。 - 「加载时恢复坐标」:原文称剥离的
x/y/z在加载时恢复,实为不恢复——unstripBaseNBT只补 6 个基础键,坐标在应用时由correctNBT重新写入。 - 「同类型管理器」:原文把生效对象写成
TileEntityMachineManagerName/TileEntityRFManager方块,实际交互判定是instanceof TileEntityManager,这两个字符串只是 NBT 校验用的 id 值。 - 最大堆叠 1、NBT 校验规则经核对属实,未改动。