多外设 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),请求被静默丢弃(不注册、不再重试)。
相关条目
- ComputerCraft 多外设系统 - 合并与排序逻辑
- 设置:ComputerCraft - 三项开关
- 第三方外设集成 - 内置的 38 个 CC 驱动示例