ThE 公开 API(ThEApi)
基本信息
| 属性 | 值 |
|---|---|
| 入口类 | thaumicenergistics.api.ThEApi(abstract class,非 interface) |
| 获取方式 | ThEApi.instance()(静态) |
| 实现类 | thaumicenergistics.implementaion.ThEAPIImplementation |
| 反射加载 | Class.forName("thaumicenergistics.implementaion.ThEAPIImplementation") + getMethod("instance").invoke(null)(ThEApi.java:30-38) |
| 可用时机 | 仅在 PREINIT 事件之后(源码注释:Note: Only available after the PREINIT event.,ThEApi.java:24) |
| 加载失败行为 | 捕获所有异常并返回 null(:39) |
| API 包路径 | thaumicenergistics.api(gradle.properties 中 modGroup = thaumicenergistics) |
功能
ThE 向其他 mod 暴露一套以 ThEApi 为根的访问接口,共 6 个顶层访问器。它采用反射单例而非直接持有实现引用,因此主 mod 类加载顺序不会造成循环依赖。
6 个顶层访问器(ThEApi.java:45-75)
| 访问器 | 返回类型 | 用途 |
|---|---|---|
blocks() |
IThEBlocks |
取得本 mod 的 10 个方块 |
items() |
IThEItems |
取得本 mod 的物品(含 11 电池 + 8 组件) |
parts() |
IThEParts |
取得本 mod 的 10 个线缆部件 |
config() |
IThEConfig |
读取配置项 |
interact() |
IThEInteractionHelper |
与 ThE 交互的辅助方法 |
transportPermissions() |
IThETransportPermissions |
要素运输权限控制 |
全部标注 @Nonnull(config() 与 blocks() 除外,见 :48-52)—— 即调用方不应判空,但 ThEApi.instance() 本身可能返回 null。
IThEBlocks:10 个方块(IThEBlocks.java)
每个字段都是 IThEItemDescription:
ArcaneAssembler、DistillationPatternEncoder、EssentiaProvider、EssentiaVibrationChamber、InfusionProvider、AdvancedInfusionProvider、IronGearBox、KnowledgeInscriber、ThaumiumGearBox(:17-65)
注:与注册表 BlockEnum 一致,共 10 项(含两个齿轮箱)。
IThEParts:10 个线缆部件(IThEParts.java)
同样每个字段是 IThEItemDescription:
ArcaneCrafting_Terminal、Essentia_ExportBus、Essentia_ImportBus、Essentia_LevelEmitter、Essentia_StorageBus、Essentia_Terminal、VisRelay_Interface、Essentia_StorageMonitor、Essentia_ConversionMonitor、CreativeVisRelay_Interface(:17-71)
注意:API 暴露的 10 个部件包含 4 个已弃用部件(Essentia_LevelEmitter、Essentia_Terminal、Essentia_StorageMonitor、Essentia_ConversionMonitor),它们无法合成(见 已弃用的要素部件)。API 层保留了这些字段以便旧 addon 编译通过,但不代表可用。
IThEItems:物品集合(IThEItems.java)
IThEItems 是 public abstract class 而非 interface,字段直接为 public(:11):
- 2 个核心:
CoalescenceCore、DiffusionCore - 11 个电池:
EssentiaCell_1k/_4k/_16k/_64k/_256k/_1024k/_4096k/_16384k/_Quantum/_Singularity/_Creative,外加EssentiaCell_Casing(外壳) - 8 个组件:
EssentiaStorageComponent_1k/_4k/_16k/_64k/_256k/_1024k/_4096k/_16384k - 其他:
IronGear、KnowledgeCore、WandFocusAEWrench、GolemWifiBackpack、CellMicroscope、WirelessEssentiaTerminal
IThEItemDescription:统一的物品描述接口(IThEItemDescription.java)
这是 API 的原子单位,6 个方法:
| 方法 | 签名 | 说明 |
|---|---|---|
getBlock() |
@Nullable Block |
若该物品有对应方块则返回 |
getDamage() |
int |
该物品的 damage/meta 值(对应本 mod 多变体物品的变体索引) |
getItem() |
@Nonnull Item |
取得 Item 实例 |
getStack() |
@Nonnull ItemStack |
数量为 1 的栈 |
getStacks(int) |
@Nonnull ItemStack |
指定数量的栈 |
IThEInteractionHelper:交互辅助(IThEInteractionHelper.java)
类注释:Contains miscellaneous functionality intended to help other moders interact with ThE.(:13,原文 “moders” 为源码中的拼写)
| 方法 | 侧 | 说明 |
|---|---|---|
registerGolemHookHandler(IGolemHookHandler) |
双端 | 注册一个傀儡事件处理器(源码注释:Registers a handler to receive golem events.) |
setArcaneCraftingTerminalRecipe(ItemStack[]) |
仅客户端(@SideOnly(Side.CLIENT)) |
尝试为当前玩家的奥术合成终端设置配方。若玩家未打开 ACT GUI 则调用被忽略。数组长度应为 9,按索引填入合成网格(0=左上,1=上中,2=右上…),允许 null 项 |
openWirelessTerminalGui(EntityPlayer) |
双端 | @Deprecated —— 打开无线终端 GUI |
子包中的其他 API 接口
| 包 | 接口 | 用途 |
|---|---|---|
api.entities |
IGolemHookHandler |
傀儡挂钩处理器(16 个方法,见 ThE 与 Golem 的集成) |
api.entities |
IGolemHookSyncRegistry |
傀儡同步字符注册表 |
api.grid |
IDigiVisSource |
数字 Vis 源(Vis Relay Interface 与 Arcane Crafting Terminal 实现它) |
api.grid |
ICraftingIssuerHost |
合成请求发起方宿主 |
api.gui |
ICraftingIssuerContainer |
GUI 侧容器 |
api.gui |
IWidgetHost |
控件宿主 |
api.storage |
IAspectStorage |
extends IAspectContainer(ThA 要素容器) |
api.storage |
IInventoryUpdateReceiver |
库存变更接收器 |
api.tiles |
IEssentiaTransportWithSimulate |
支持 Actionable.SIMULATE 的要素运输(多个 ThE tile 实现它) |
api.items |
IRestrictedEssentiaContainerItem |
受限要素容器物品 |
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 顶层访问器数 | 6 | ThEApi.java:45-75 |
IThEBlocks 字段数 |
10 | IThEBlocks.java:17-65 |
IThEParts 字段数 |
10(含 4 个已弃用) | IThEParts.java:17-71 |
IThEItemDescription 方法数 |
5 | IThEItemDescription.java:20-56 |
IThEInteractionHelper 方法数 |
3(1 个已弃用、1 个仅客户端) | IThEInteractionHelper.java:22-48 |
| API 接口所在子包数 | 5(entities / grid / gui / items / storage / tiles 共 6 含 tiles) | api/ 目录 |
instance() 可用时机 |
PREINIT 事件之后 | ThEApi.java:24 |
| 实现包 | thaumicenergistics.implementaion |
ThEApi.java:31(注意包名拼写为 implementaion,非 implementation) |
交互
| 触发 | 行为 |
|---|---|
其他 mod 在 PREINIT 后调用 ThEApi.instance() |
反射加载实现并返回单例 |
| 在 PREINIT 之前调用 | 返回 null(源码注释明确要求 PREINIT 之后) |
| 实现类缺失 | 捕获异常,返回 null,不抛异常 |
| 注册傀儡处理器 | interact().registerGolemHookHandler(handler) |
| 客户端设置 ACT 配方 | setArcaneCraftingTerminalRecipe(ItemStack[9]);玩家未开 ACT GUI 时静默忽略 |
| 读取方块 ItemStack | blocks().EssentiaProvider.getStack() |
| 读取指定变体电池 | items().EssentiaCell_16k.getStack()(变体已由 IThEItemDescription 封装) |
合成配方
本条目描述 API,不含物品配方。
相关条目
- ThE 与 Golem 的集成 -
IGolemHookHandler的实际用途 - Vis Relay Interface -
IDigiVisSource的实现 - Essentia Provider -
IThEBlocks.EssentiaProvider指向的方块 - ThE 配置项 -
config()返回IThEConfig