BuildCraftBuilder 模块(appeng.integration.modules.BuildCraftBuilder)
基本信息
| 属性 | 值 |
|---|---|
| 源码 | appeng/integration/modules/BuildCraftBuilder.java |
| 类声明 | 44,public class |
| 实现接口 | 只有 IIntegrationModule(不实现任何 abstraction 接口) |
| 静态单例 | public static BuildCraftBuilder instance |
| modID | BuildCraft|Builders(IntegrationType.java:25,显示名 BuildCraft Builders) |
| side | BOTH |
| 本 wiki 收录情况 | BuildCraft 未被本 wiki 收录 —— 写全名 BuildCraft |
职责
让 BC 的建筑师能正确摆放 AE2 自己的方块。 不注入任何 AE2 内容 —— 注入的是「AE2 方块 → BC 蓝图」的登记信息。
生命周期
| 阶段 | 行号 | 动作 |
|---|---|---|
init() |
59 | try { initBuilderSupport(); } catch (Exception e) { /* not supported? */ }(:60-64) |
postInit() |
68 | 空 {} |
⚠️ 整个 init() 被 try / catch (Exception) 包住,
catch 块只有注释 // not supported?(:63)——
任何异常都被静默吞掉,连日志都没有。若 BC Builders 版本不兼容,
本目标会「成功」但什么都没做。
initBuilderSupport() 的做法
BuildCraftBuilder.java:70-:
final ISchematicRegistry schematicRegistry = BuilderAPI.schematicRegistry; // :71
final IBlocks blocks = AEApi.instance().definitions().blocks(); // :73
final IBlockDefinition maybeMultiPart = blocks.multiPart(); // :74
for (final Method blockDefinition : blocks.getClass().getMethods()) { // :76
final IBlockDefinition def = (IBlockDefinition) blockDefinition.invoke(blocks); // :78
final Optional<Block> maybeBlock = def.maybeBlock(); // :79
if (!maybeBlock.isPresent()) { continue; } // :80-82
final Block block = maybeBlock.get(); // :84
if (block instanceof IOrientableBlock && ((IOrientableBlock) block).usesMetadata()
&& !(def instanceof ITileDefinition)) { // :85-86
...
关键设计:反射遍历 IBlocks 的所有 getter(:76),
逐个取 IBlockDefinition → maybeBlock() → 过滤条件 → 登记。
过滤条件
登记的方块必须同时满足:
block instanceof IOrientableBlock(:85)—— 可定向((IOrientableBlock) block).usesMetadata()—— 用 metadata 存朝向(:85)!(def instanceof ITileDefinition)—— 不是带 tile 的方块(:86)
IOrientableBlock 定义在 appeng/api/util/IOrientableBlock.java(不在本分片)。
用到的 BC API
| 类型 | 用途 | 位置 |
|---|---|---|
buildcraft.api.blueprints.BuilderAPI |
取 schematicRegistry 静态字段 |
BuildCraftBuilder.java:24 import |
buildcraft.api.blueprints.ISchematicRegistry |
蓝图注册表 | :25 import,:71 使用 |
用到的 AE2 API
| 类型 | 用途 | 位置 |
|---|---|---|
IBlocks |
全部方块定义 | :16 import |
IBlockDefinition / ITileDefinition |
单个方块定义 | :17 / :18 import |
IOrientableBlock |
可定向判定 | :19 import |
mod 没装时是否安全跳过
是,但有双保险:
BuildCraft|Builders未装 →IntegrationNode的Loader.isModLoaded判为false→ModNotInstalled→FAILED- 即使装了但
BuilderAPI不可用 →:62的catch (Exception)静默吞掉
⚠️ 第二条保险没有日志,出问题时无法从日志判断 BC Builders 兼容是否生效。