ImmibisMicroblocks 模块(appeng.integration.modules.ImmibisMicroblocks)

基本信息

属性 值
源码 appeng/integration/modules/ImmibisMicroblocks.java
类声明 35,public class
实现接口 IIntegrationModule + IImmibisMicroblocks(integration/abstraction/IImmibisMicroblocks.java:18)
静态单例 public static ImmibisMicroblocks instance
modID ImmibisMicroblocks(IntegrationType.java:52)
side BOTH
本 wiki 收录情况 Immibis Microblocks 未被本 wiki 收录 —— 写全名 Immibis Microblocks

生命周期

阶段 行号 动作
init() 53 反射抓 MicroblockAPIUtils,失败只 debug 日志
postInit() 74 空 {}

注入内容:init() 里的反射(全部包在 try)

// ImmibisMicroblocks.java:54-70
try {
    this.MicroblockAPIUtils = Class.forName("mods.immibis.microblocks.api.MicroblockAPIUtils");
    this.mergeIntoMicroblockContainer = this.MicroblockAPIUtils.getMethod(
            "mergeIntoMicroblockContainer",
            ItemStack.class, EntityPlayer.class, World.class,
            int.class, int.class, int.class, int.class, Block.class, int.class);
    this.canConvertTiles = true;
} catch (final Throwable t) {
    AELog.debug(t);
}
行号 动作
55 Class.forName("mods.immibis.microblocks.api.MicroblockAPIUtils")
56-66 getMethod("mergeIntoMicroblockContainer", ...) —— 9 个参数
67 this.canConvertTiles = true(唯一成功标志)
68-70 catch (Throwable t) { AELog.debug(t); }

mergeIntoMicroblockContainer 的 9 个参数签名(按 :56-66 顺序):

# 类型 推测含义(源码未给参数名)
1 ItemStack 要合并的微方块物品
2 EntityPlayer 玩家
3 World 世界
4-7 int × 4 x, y, z, 面向(ForgeDirection 序数)
8 Block 目标方块
9 int metadata

⚠️ 参数名在源码里不可见(getMethod 按类型匹配), 上表的「含义」是按类型推断,不是源码断言。

与 FMP 的区别:失败不崩游戏

FMP ImmibisMicroblocks
反射失败 抛 NoSuchMethodException → IntegrationNode 捕获 → FAILED catch 掉,只 AELog.debug(:69)
后果 目标显示「Disabled」 目标显示「Enable」,但 canConvertTiles 保持 false

⚠️ 这是本包唯一「反射失败仍报成功」的目标。 日志级别是 debug,默认不可见。 IntegrationNode.java:116 会打 Immibis Microblocks - Integration Enable(来自 IntegrationType.java:52 的 dspName)—— 实际没生效却在日志里说启用了。

IImmibisMicroblocks 只有 1 个方法

integration/abstraction/IImmibisMicroblocks.java:18:

方法 行号 语义
leaveParts(TileEntity te) 26 让 tile 脱离微方块容器

另有 getOrCreateHost(EntityPlayer, int side, TileEntity)(ImmibisMicroblocks.java:77) 属于 IPartHost 契约(AE2 自己的),不在 abstraction/。

getOrCreateHost 的判定(:77-)

行号 条件
82-83 isPartItem = 玩家手持的是 IPartItem
85 te instanceof IMultipartTile && this.canConvertTiles && isPartItem
86 取 AEApi.instance().definitions().blocks().multiPart()
88 maybeMultiPartBlock / maybeMultiPartStack

即微方块 + AE2 multipart 方块 + 玩家手持 AE2 part 物品时, 把微方块容器转成 AE2 的 IPartHost。

微方块不是 AE2 的方块

⚠️ Immibis Microblocks 的方块不是 AE2 的。 本模块做的是「双向容器转换」,不注册任何 AE2 方块。 blocks.multiPart() 是 AE2 自己的 multipart 方块 (ApiBlocks 里定义),只作为转换目标。

mod 没装时是否安全跳过

是,且最干净:唯一的 mods.immibis.* 引用是 Class.forName 的字符串(:55),没有 import。 所以 ImmibisMicroblocks.class 在 MB 缺席时也能正常加载, init() 的 catch 保证不抛。

相关条目