第三方 mod 方块着色集成
基本信息
| 属性 | 值 |
|---|---|
| 扩展点 | journeymap.client.model.mod.ModBlockDelegate(见 方块委托 API) |
| 已注册处理者 | 5(硬编码于 ModBlockDelegate.java:30-35,无公开注册方法) |
| 覆盖的第三方 mod | 6 个:CarpentersBlocks、TerraFirmaCraft、Mariculture、Thaumcraft、BiomesOPlenty,及一组火把类方块 |
| 硬依赖声明 | 无 —— 全部为软集成,未在 @Mod(dependencies=...) 中声明 |
| 检测方式 | 按 GameRegistry.UniqueIdentifier.modId 字符串比对(不调用 Loader.isModLoaded) |
功能
JourneyMap 对第三方 mod 的方块支持分两种:着色特殊规则与地图语义打标。所有处理者都只在遇到自己认识的方块时才返回 true,其余方块原样放行,因此未安装对应 mod 时不会有任何影响。
关于依赖声明:
Journeymap.java:37的@Mod(dependencies = "required-after:Forge@[...]")只声明了 Forge。dependencies.gradle中的 5 条依赖全是构建期依赖(servlet-api、webmap-client、javalin、slf4j-api、slf4j-simple),无一个是游戏 mod。这些第三方集成全部是软依赖,属于"装了才生效"的隐式集成。
数值
逐个处理者
| 处理者 | 文件 | 目标 mod | 匹配依据 | 施加的 BlockMD.Flag |
|---|---|---|---|---|
VanillaBlockHandler |
model/mod/vanilla/VanillaBlockHandler.java:28 |
原版 | Material 枚举 + 方块类继承(:101-148) |
按材质批量打标;空气类加 HasAir, NoTopo(:174);草类加 Plant, CustomBiomeColor(:180);NoShadow(:186) |
CarpentersBlocks.CommonHandler |
model/mod/CarpentersBlocks.java:25 |
CarpentersBlocks |
modid 常量 MODID = "CarpentersBlocks"(:27)+ NBT 标签 cbAttrList / id / Damage(:28-30) |
命中时返回 true(:51、:56) |
TerraFirmaCraft.TfcBlockHandler |
model/mod/TerraFirmaCraft.java:24 |
terrafirmacraft、tfc2、terrafirmacraftplus |
三个 modid 常量 MODID / MODID2 / MODID3(:19-21) |
命中时返回 true(:63) |
Miscellaneous.CommonHandler |
model/mod/Miscellaneous.java:29 |
见下表 | 硬编码 UniqueIdentifier 集合 |
HasAir+NoShadow / Plant / NoTopo+Foliage |
BiomesOPlenty |
model/mod/BiomesOPlenty.java:23 |
BiomesOPlenty |
blockMD.getUid().modId.equals("BiomesOPlenty")(:38)+ 方块名匹配 |
草类打标;BoPGrassColorHandler(:78)继承 VanillaColorHandler 做生物群系着色 |
Miscellaneous.CommonHandler 的 15 个硬编码方块 UID
| UID | 施加标记 | 源码 |
|---|---|---|
Mariculture:kelp |
Plant,setTextureSide(2) |
:32、:57-61 |
Thaumcraft:blockMagicalLeaves |
NoTopo、Foliage |
:34、:62-65 |
TConstruct:decoration.stonetorch |
HasAir、NoShadow |
:43、:52-55 |
ExtraUtilities:magnumTorch |
HasAir、NoShadow |
:44 |
appliedenergistics2:tile.BlockQuartzTorch |
HasAir、NoShadow |
:45 |
chisel:torch1 … chisel:torch10 |
HasAir、NoShadow |
:46-49(for (int i = 1; i <= 10; i++) 循环构造) |
火把集合在构造函数中一次性建好(Miscellaneous.java:39-50),共 13 个 UID(3 个具名 + 10 个 Chisel 循环生成)。
BiomesOPlenty 的植物名单
BiomesOPlenty.java:25 用 Arrays.asList(...) 列出 45 个植物方块名,crops 字段(:26)用 Collections.singletonList("turnip") 列出 1 个作物名。名单包含 duckweed、shortgrass、fern 类草本、spectralmoss、witherwart、wildrice、cattail、reed、root 等。
交互
| 触发 | 行为 |
|---|---|
| 制图任务遇到已注册方块 | 由对应处理者返回着色结果 |
| 遇到未注册方块的第三方 mod | 所有处理者均返回 false,走 VanillaBlockHandler 的通用规则 |
| 安装了 AE2 / TConstruct / Chisel / Thaumcraft | 火把与树叶获得 NoShadow / Foliage 打标,地图上不会被当作实心方块 |
| 未安装上述任何 mod | 相关 UID 永不匹配,零开销 |
死代码
Miscellaneous.OpenBlocksGraveHandler(Miscellaneous.java:82)实现了 IModBlockHandler,用途是"为 OpenBlocks 墓地创建路点"。它未被注册到 ModBlockDelegate 的处理者列表(:30-35 只有 5 项,不含它),且源码注释明确标注 // TODO: Buggy, don't use until fixed(:79-80)。属确认的死代码。
BiomesOPlenty.initialize() 中针对 name.contains("grass") 的分支被整段注释掉(BiomesOPlenty.java:40-44),实际生效的是下方的 plants / crops 名单匹配。