API:模组间通信
基本信息
| 属性 | 值 |
|---|---|
| API 包 | thaumic.tinkerer.api(gradle.properties 中 apiPackage = api) |
| 公开类型 | 2(1 个常量类 + 1 个标记接口) |
| IMC 处理入口 | ThaumicTinkerer.HandleIMCMessages(FMLInterModComms.IMCEvent) |
| 处理方法 | @EventHandler 标注,ThaumicTinkerer.java:99 |
gradle.properties 声明 apiPackage = api 与 modGroup = thaumic.tinkerer,即本模组的对外 API 根包为 thaumic.tinkerer.api。
数值:IMC 键
InterModCommsOperations(api/InterModCommsOperations.java)全文只有两个 public static final String:
| 常量 | 键值 | 作用 | 处理位置 |
|---|---|---|---|
ADD_RESEARCH_BLACKLIST |
AddResearchBlacklist |
追加 KAMI 研究自动前置的黑名单 | ThaumicTinkerer.java:101-104 |
ADD_CC_BLACKLIST |
AddCCBlacklist |
追加 CC 外设黑名单 | ThaumicTinkerer.java:105-107 |
功能
AddResearchBlacklist
处理逻辑(ThaumicTinkerer.java:101-104):
if (message.key.equalsIgnoreCase(InterModCommsOperations.ADD_RESEARCH_BLACKLIST)) {
String[] values = message.getStringValue().split(",");
KamiResearchItem.Blacklist.addAll(Arrays.asList(values));
}
- 键比较用
equalsIgnoreCase,因此大小写不敏感 - 值按英文逗号分隔为多个条目后整体
addAll进KamiResearchItem.Blacklist - 目标列表
KamiResearchItem.Blacklist初始已含"MINILITH"(research/KamiResearchItem.java静态块) - 该列表在
KamiResearchItem.setPages()中被逐项匹配:id 以黑名单项开头的普通研究会被排除在 KAMI 研究的自动前置之外(详见 研究总览)
AddCCBlacklist
处理逻辑(ThaumicTinkerer.java:105-107):
if (message.key.equalsIgnoreCase(InterModCommsOperations.ADD_CC_BLACKLIST)) {
if (LoadedMods.computerCraftLoaded) blackListCCDevices(message.getStringValue());
}
- ComputerCraft 缺失时整条消息被忽略(不发警告、不记录)
blackListCCDevices(String)带@Optional.Method(modid = "ComputerCraft")注解(ThaumicTinkerer.java:110-112),内部执行PeripheralHandler.Blacklist.add(classname)- 与
AddResearchBlacklist不同,此处不按逗号切分,整条字符串作为一个类名加入 - 匹配在
PeripheralHandler.getPeripheral()中以s.equalsIgnoreCase(tile.getClass().getName())进行,即忽略大小写地比对类的全限定名(PeripheralHandler.java:34-37)
数值:标记接口
| 接口 | 用途 | 本仓实现方 |
|---|---|---|
INoRemoveEnchant |
空标记接口(api/INoRemoveEnchant.java),标记「不应被移除附魔」的物品 |
0 |
INoRemoveEnchant 全文只有接口声明,无任何成员。它在本仓库内只被读取、从未被实现:两处 instanceof 检查分别是
SpellClothCraftingHandler.java:26:if (stack.isItemEnchanted() && !(stack.getItem() instanceof INoRemoveEnchant) && !foundEnchanted)SpellClothRecipe.java:38:同一条件
两处都用于「合成咒文布时,带此标记的物品可保留已有附魔」。由于本模组自身没有任何类 implements INoRemoveEnchant,该分支对本模组自己的物品恒不成立;它是留给其他模组的扩展点。SpellClothCraftingHandler 在 TTCommonProxy.init() 中注册到 FML bus(TTCommonProxy.java:156)。
硬编码的非 IMC 集成
Waila 的注册不走 IMC 常量,而是在 preInit() 中直接发送一条字面量消息:
if (LoadedMods.wailaLoaded) {
FMLInterModComms.sendMessage(
"Waila",
"register",
"thaumic.tinkerer.common.compat.TTinkererProvider.callbackRegister");
}
(ThaumicTinkerer.java:63-68)
这条消息的「消息键」是字面量 "register",接收类名也是字面量字符串 —— 它属于 compat/TTinkererProvider 的回调注册契约,不在 InterModCommsOperations 中定义。