ModSupport 加载器

基本信息

属性 值
抽象基类 org.dynmap.renderer.CustomModSupportLoader(org/dynmap/renderer/CustomModSupportLoader.java)
实现目录 src/main/java/org/dynmap/modsupport/loaders/(10 个)
实例化方式 字符串反射:Class.forName(parts[0]) + cls.newInstance()(hdmap/TexturePack.java:2001-2002)
注册来源 仓库内 src/main/resources/renderdata/*-texture.txt 的 specialModSupportLoader: 行
抽象方法 initializeModSupport(DynmapCore, HashMap<String,Integer>)(CustomModSupportLoader.java:9)

功能

CustomModSupportLoader 允许外部 mod 在运行时把自己的方块/机器渲染规则注入 Dynmap,而无需改 Dynmap 本体。抽象基类提供两个钩子:

方法 源码行 说明
initializeModSupport(core, filetoidx) CustomModSupportLoader.java:9(abstract) 初始化,传入贴图文件索引表
processData(line, data) CustomModSupportLoader.java:11 逐行处理,默认空实现

10 个中有 8 个覆写 processData,仅 ArchitectureCraftModSupportLoader 与 DummyModSupportLoader 不覆写。覆写者按 type 字段分派到 modsupport/ 下各子包的 Support 类。

加载器清单

仓库内 renderdata/ 声明引用的加载器共 10 个,与实际存在的 10 个 .java 完全一一对应,无悬空反射引用,也无孤立加载器:

加载器 宿主 mod(按引用它的 renderdata 文件)
AppliedEnergisticsModSupportLoader Applied Energistics 2(renderdata/appliedenergistics2-texture.txt:313,name=ae2)
ArchitectureCraftModSupportLoader ArchitectureCraft(renderdata/ArchitectureCraft-texture.txt:21)
BinnieModSupportLoader Botany / Forestry / ExtraTrees(renderdata/BinnieCore-texture.txt:517、renderdata/Botany-texture.txt:134,name=botany)
BotaniaModSupportLoader Botania
CropsNHSupportLoader Crops NH(renderdata/cropsnh-texture.txt:878,name=cropsnh)
DummyModSupportLoader 占位实现(renderdata/ForgeMultipart-texture.txt:18、renderdata/CarpentersBlocks-texture.txt:94、renderdata/EnderStorage-texture.txt:16)
ForestryModSupportLoader Forestry(renderdata/Forestry-texture.txt:439,name=for)
ForgeMultiPartSupportLoader ForgeMultipart / ProjectRed(renderdata/ForgeMultipart-texture.txt、renderdata/ProjRed_Core-texture.txt:190,name=fmp)
GregTechModSupportLoader GregTech 5 系(renderdata/gregtech-texture.txt:1498 等 7 处,name=gtmte)
IC2CropsSupportLoader IC2 作物(renderdata/gregtech-texture.txt:771、renderdata/IC2-texture.txt:592,name=ic2crops)

name= 参数是同一加载器在同一 renderdata 文件内的实例名,使一个文件可同时挂载多个不同配置的加载器实例。

DummyModSupportLoader 是空壳:initializeModSupport 内仅调用 GWM_Util.initialize(core)(DummyModSupportLoader.java:12),无任何额外逻辑。其作用是满足 TexturePack 对 specialModSupportLoader 行的语法要求,让这三个 renderdata 文件可以声明"此处有加载器钩子"而不引入实际行为。

数值

数值名 值
加载器实现数(loaders/ 目录) 10
renderdata/ 中被引用的不同加载器 FQCN 数 10
引用总处数 24(renderdata/ 中 specialModSupportLoader 出现 24 次)
加载器覆写 processData 的数量 8(未覆写者:ArchitectureCraftModSupportLoader、DummyModSupportLoader)
悬空反射引用(引用了不存在的类) 0
孤立加载器(存在但未被引用) 0

交互

触发 行为
加载 renderdata/*.txt 遇到 specialModSupportLoader: 行 → Class.forName → newInstance → initializeModSupport
加载器安装完成 ModSupportImpl.complete(datadir) 写盘到 renderdata/modsupport/(ModSupportImpl.java:33)

ModSupportImpl.complete 在开写前会先清空 renderdata/modsupport/ 目录下的所有文件(ModSupportImpl.java:37-42),再逐个 tdi.writeToFile(dynamicrenderdata)(ModSupportImpl.java:54)。

相关条目