OpenModsLib 配置

OpenModsLib 自身只有 4 个配置属性,全部声明在 LibConfig(src/main/java/openmods/LibConfig.java)中。除此之外它还提供一整套供其它 mod 复用的配置 API(ConfigProcessing + GameConfigProvider),见特性注册 API。

配置文件、指令入口与配置 GUI 见本页;指令细节见指令总览。

基本信息

属性 值
配置类 openmods.LibConfig(静态字段)
属性数 4
配置文件 <游戏目录>/config/OpenMods-<modid>.cfg,由 evt.getSuggestedConfigurationFile() 决定(src/main/java/openmods/OpenMods.java:80)
处理入口 ConfigProcessing.processAnnotations(MODID, config, LibConfig.class)(OpenMods.java:82)
变更监听 ConfigChangeListener 注册到 FML 总线(OpenMods.java:84)
配置 GUI GuiFactory.ConfigScreen(@Mod(guiFactory = "openmods.GuiFactory"),OpenMods.java:49)
coremod 配置 <游戏目录>/config/OpenModsLibCore.json(独立于本文件,见coremod 补丁)

功能

4 个配置属性

全部属性带 @ConfigProperty(category=..., name=..., comment=...) 注解(src/main/java/openmods/config/properties/ConfigProperty.java:11),由 ConfigProcessing 在 preInit 阶段反射读写。

# 分类 属性名 类型 默认值 在线可改 声明行
1 debug fakePlayerCountThreshold int 10 是 LibConfig.java:13
2 debug dropsDebug boolean false 是 LibConfig.java:18
3 feature enableCalculatorCommands boolean true 否 LibConfig.java:23
4 debug tessellatorPoolLimit int 20 否 LibConfig.java:27

前两个带 @OnLineModifiable(LibConfig.java:8,15;注解定义 src/main/java/openmods/config/properties/OnLineModifiable.java),表示可通过 /om_config_s 指令在游戏运行中修改并立即生效;后两个无此注解,改动需重启游戏。

每个属性的实际读取点

四个属性全部有真实的外部读取点,无死配置:

属性 读取位置 读取代码
fakePlayerCountThreshold src/main/java/openmods/fakeplayer/FakePlayerPool.java:50 if (id > LibConfig.fakePlayerThreshold) Log.warn("Maximum number of fake players in use %d reached. Something may leak them!", id);
dropsDebug src/main/java/openmods/block/BlockDropsStore.java:38 this.location = LibConfig.dropsDebug ? new Throwable() : null;
dropsDebug src/main/java/openmods/block/BlockDropsStore.java:93-94 关闭时在报告文本中提示如何开启堆栈追踪
enableCalculatorCommands src/main/java/openmods/proxy/OpenClientProxy.java:98 if (LibConfig.enableCalculatorCommands) { ... 注册 5 条 =* 指令 ... }
tessellatorPoolLimit src/main/java/openmods/renderer/TessellatorPool.java:31 if (id > LibConfig.tessellatorPoolLimit) Log.warn("Maximum number of tessellators in use reached. Something may leak them!");

注意两个 *Limit 属性的语义是告警阈值而非硬上限 —— 超过后只打 WARN 日志,对象仍照常创建(FakePlayerPool.java:51 紧接着 new OpenModsFakePlayer(world, id)),不构成资源限制。

enableCalculatorCommands 是唯一在 preInit 早期被读取的开关(OpenClientProxy.preInit),因为指令注册必须在客户端命令系统初始化时完成;即便它带在线修改能力也无法在运行中生效,故源码未加 @OnLineModifiable。

dropsDebug 的实现机制

dropsDebug 控制 BlockDropsStore 是否在捕获方块掉落时保留一份 Throwable 作为调用点快照(BlockDropsStore.java:38)。开启后当掉落物被正确收集时,这份堆栈会被追加进调试报告;关闭时报告文本会提示玩家"设置 debug.dropsDebug 为 true 以启用堆栈日志"(BlockDropsStore.java:93-94)。这是一个为排查"掉落物丢失"问题设计的诊断开关。

配置 GUI

GuiFactory(src/main/java/openmods/GuiFactory.java:14)实现 IModGuiFactory,mainConfigGuiClass() 返回内部类 ConfigScreen,后者继承 OpenModsConfigScreen 并传入标题 "OpenModsLib"(GuiFactory.java:18-20)。

OpenModsConfigScreen(src/main/java/openmods/config/gui/OpenModsConfigScreen.java:29)继承 Forge 的 GuiConfig,构造时 allRequireMcRestart = true(.java:69,77),即在 GUI 中改任何配置都要求重启游戏。其内部类 EntryWithWarning(.java:47)在进入子界面时附加一行提示,建议玩家改用 /om_config_s 或 /om_config_m 指令以获得运行时生效能力。

GUI 分两类页签(对应 en_US.lang:75-78 的语言键):

页签 语言键 内容
features / blocks / items openmodslib.config.features / .blocks / .items 由 FeatureRegistry 汇总的各 mod 方块/物品启用开关
config openmodslib.config.config 各 mod 自己的 @ConfigProperty 属性

配置文件持久化

ConfigChangeListener(src/main/java/openmods/config/ConfigChangeListener.java:8)订阅 ConfigChangedEvent.OnConfigChangedEvent,当事件的 modID 等于 "OpenMods" 时调用 config.save()(.java:20-22)。这使得通过指令或 GUI 改动的值在 FML 发出配置变更事件时立即落盘。

数值

数值名 值
LibConfig 属性数 4(LibConfig.java:13,18,23,27)
debug 分类属性数 3
feature 分类属性数 1
标注 @OnLineModifiable 的属性数 2(LibConfig.java:8,15)
有真实读取点的属性数 4(4/4,无死配置)
默认值总和(fakePlayerCountThreshold + tessellatorPoolLimit) 10 + 20 = 30

交互

触发 行为
/om_config_s get OpenMods debug fakePlayerCountThreshold 服务端读取当前值
/om_config_s set OpenMods debug dropsDebug true 在线修改(该属性带 @OnLineModifiable)
/om_config_c set OpenMods feature enableCalculatorCommands false 客户端修改,但因读取发生在 preInit,实际需重启生效
/om_config_s save 写回配置文件
选项 → 模组 → OpenModsLib 打开配置 GUI(全部改动需重启)
配置文件被外部编辑 下次 preInit 重新读取

相关条目