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,不含物品配方。

相关条目