数据驱动模块

基本信息

属性 值
模块数 3(CustomDrops、CustomFuels、CustomToolTips)
共性 全部由 config/GTNewHorizons/*.xml 驱动,全部用 JAXB 序列化,全部默认关闭
序列化 javax.xml.bind.JAXBContext / Marshaller / Unmarshaller
重载方式 各自一条 /xxx reload 指令
兄弟模块 危险物品模块(第 4 个,但走独立路径)

三个模块对照

模块 包 处理器 配置文件 指令 开关默认值
CustomDrops modcustomdrops(3 文件) CustomDropsHandler implements IMobExtraInfoProvider(接口来自 Mobs Info mod,com.kuba6000.mobsinfo.api,CustomDropsHandler.java:35 导入、:48 实现;对应 Gradle 依赖 compileOnlyApi("com.github.GTNewHorizons:Mobs-Info:0.5.21-GTNH:dev"),dependencies.gradle:33) config/GTNewHorizons/CustomDrops.xml(CustomDropsHandler.java:57) /customdrops false
CustomFuels modcustomfuels(3 文件) CustomFuelsHandler implements IFuelHandler config/GTNewHorizons/CustomFuels.xml(CustomFuelsHandler.java:28) /customfuels false
CustomToolTips modctt(2 文件) CustomToolTipsHandler config/GTNewHorizons/CustomToolTips[_<locale>].xml(CustomToolTipsHandler.java:41、:45) /customtooltips false

配置路径统一由 String.format("config/%s/<Name>.xml", Refstrings.COLLECTIONID) 拼出,COLLECTIONID = GTNewHorizons(Refstrings.java:11)。

CustomDrops 自定义掉落

CustomDropsHandler 实现 Mobs Info mod 的 IMobExtraInfoProvider(com.kuba6000.mobsinfo.api,导入于 CustomDropsHandler.java:35,实现于 :48),让服务端能向客户端推送生物的额外信息。该接口来自 Gradle 的 compileOnlyApi 依赖 com.github.GTNewHorizons:Mobs-Info:0.5.21-GTNH:dev(dependencies.gradle:33),不是 Forge 自带接口。

方法 作用 位置
CustomDropsHandler(File pConfigBaseDir) 构造器。接收配置目录参数但未使用它 —— 路径仍由 COLLECTIONID 硬拼(:56-58) :56-58
InitSampleConfig() 写示例配置 :61
SaveCustomDrops() 覆盖写回 XML :84-94
LoadConfig() 载入;损坏时降级为「不做任何事」的默认配置并告警 :100-114
ReloadCustomDrops() 卸载旧配置 + 载入新配置 :146-154
toggleDeathInfoForPlayer(player) 切换某玩家的死亡信息显示 由 /customdrops toggleinfo 调用

LoadConfig 的损坏处理值得注意(CustomDropsHandler.java:114):损坏时载入「does-nothing-evil」默认配置并提示玩家自行修复,而不是抛异常中断 —— 属良性降级。

CustomFuels 自定义燃料

CustomFuelsHandler implements IFuelHandler(CustomFuelsHandler.java:19),即本 mod 自己就是 Forge 燃料系统的一个燃料处理器。

方法 作用 位置
CustomFuelsHandler() 构造器,拼出 config/GTNewHorizons/CustomFuels.xml :27-28
registerCustomFuelValue(ItemStack fuel, short value) 运行时登记燃烧值 :31
InitSampleConfig() 写示例配置 :35
SaveCustomFuels() 覆盖写回,失败记 error 日志 :40-50(失败分支 :50)
LoadConfig() 载入 :56

另有 ScriptCreosoteBucketFuelValue 脚本(scripts/ 包内),是它唯一的配方侧消费者之一 —— 该脚本在 MainRegistry 中被引用 2 次。

CustomToolTips 自定义提示

CustomToolTipsHandler(modctt 包,2 文件)是三者中唯一按语言分文件的:

String localeAwareFileName = String.format("config/%s/CustomToolTips_%s.xml", Refstrings.COLLECTIONID, locale);
if (new File(localeAwareFileName).isFile()) {
    _mConfigFileName = localeAwareFileName;
} else {
    _mConfigFileName = String.format("config/%s/CustomToolTips.xml", Refstrings.COLLECTIONID);
}

(CustomToolTipsHandler.java:41-45)即:优先找带语言后缀的文件,找不到回退到通用文件。

方法 作用 位置
createCustomItemToolTip(String, String) 静态工厂,创建一条自定义提示 :25
setConfigFileLocation() 按当前 locale 选定配置文件 :39-45
reload() 重载(方法名是 reload,另两个模块是 ReloadXxx) 由 /customtooltips reload 调用(CustomToolTipsCommand.java:40)

启用时 PreLoad 还会额外调 proxy.registerResourceReload() 让客户端重载资源(MainRegistry.java:208)。

数值

数值名 值
模块数 3
默认启用数 0
每个模块的配置文件数 1(CustomToolTips 可为 2,含语言变体)
序列化方式 全部 JAXB
重载指令数 3
方法命名一致性 不一致 —— ReloadCustomDrops() / ReloadCustomFuels() / reload()

交互

模块 玩家侧效果
CustomDrops 生物死亡掉落表可由配置改写;/customdrops toggleinfo 开关死亡信息显示
CustomFuels 任意物品可被赋予燃烧时间;/customfuels reload 重载
CustomToolTips 物品悬浮提示可由配置改写;/customtooltips reload 重载

三者全部默认关闭,须在 config/GTNewHorizons/dreamcraft.cfg 中开启,且改动需重启客户端(CoreModConfig.java:10 带 @Config.RequiresMcRestart)。

相关条目