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 重新读取 |
相关条目
- 指令总览 —
/om_config_s与/om_config_c的 8 个子命令 - 特性注册 API — 供其它 mod 使用的方块/物品开关注册机制
- coremod 补丁 — 独立的
OpenModsLibCore.json开关