多外设 API

基本信息

属性 值
包路径 pl.asie.computronics.api.multiperipheral
文件数 5 个接口/类 + 1 个 package-info.java
面向 其它 mod 想给 Computronics 的方块加外设时实现

本包是 ComputerCraft 多外设系统 对外的契约。它属于 Computronics,不是 CC 的 API——CC 侧不暴露这套东西。

接口

类型 作用
IMultiPeripheralProvider 接入点:第三方实现这个,把外设交给 Computronics 汇总
IMultiPeripheral 标记接口:外设容器必须实现它
IMultiPeripheralRegistry 注册表句柄:静态方法签名接收它,用于把自己登记进表
ICombinedMultiPeripheral 标记接口:表示该外设内部合并了多个来源
WrappedMultiPeripheral 包装器:把 OC/OpenPeripheral 的外设适配成 IMultiPeripheral

方法签名

IMultiPeripheralProvider

IMultiPeripheral getPeripheral(World world, int x, int y, int z, int side);
List<IMultiPeripheral> getAllPeripherals(World world, int x, int y, int z, int side);
  • getPeripheral 是必选路径:返回该位置的单个外设,或 null。
  • getAllPeripherals 只在 computercraft.multiperipheral.allMultiPeripherals 为真时被调用(MultiPeripheralProvider.java:20-22),用于「一个方块有多个外设」的场景。

本 mod 自身的实现是 pl.asie.computronics.cc.CCPeripheralProvider(CCPeripheralProvider.java:13-25):它要求 TileEntity 同时实现 IComputronicsPeripheral 与 IMultiPeripheral,并在实现 ISidedPeripheral 时校验 canConnectPeripheralOnSide(side)。

IMultiPeripheralRegistry

Computedronics.registerMultiPeripheralProvider 的静态方法必须签名为 (IMultiPeripheralRegistry),这是 IMC 反射调用的硬性要求(见下)。

两种接入方式

方式 时机 错误可见性
直接调 Computronics.registerMultiPeripheralProvider(provider) 本 mod preInit 与 init 之间 编译期可见
IMC 消息 addmultiperipherals,值形如 com.example.MyClass.register 任意时间 有完整日志

IMC 方式的三层异常处理(Computronics.java:485-497):

异常 日志
ClassNotFoundException Could not find class <name> + 堆栈
NoSuchMethodException Could not find method <signature> + 堆栈
其它 Exception Exception while trying to call method <signature> + 堆栈
外层 Exception Exception while trying to register a MultiPeripheral + 堆栈

⚠️ 若在本 mod 的 preInit 之前收到该消息,只会打一条 warn:Mod (%s) tried to register MultiPeripheral before Computronics' preInit!(Computronics.java:499-504),请求被静默丢弃(不注册、不再重试)。

相关条目