第三方 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 名单匹配。

相关条目