配置项
Opis 只有一个配置文件,在 preInit 中一次性读写完毕。
基本信息
| 属性 | 值 |
|---|---|
| 读取位置 | modOpis.java:131 new Configuration(event.getSuggestedConfigurationFile()) |
| 保存位置 | modOpis.java:164 config.save(),仅在 preInit 末尾调用一次 |
| 配置分类 | general(Configuration.CATEGORY_GENERAL)、REMOTE_CONSOLE、ACCESS_RIGHTS |
| 配置键总数 | 13 |
| 实际生效的键 | 10 |
| 失效的键 | 3(REMOTE_CONSOLE 整组,见下) |
配置文件路径由 FML 的 FMLPreInitializationEvent.getSuggestedConfigurationFile() 决定,即以 modid 命名的 config/Opis.cfg(modid 大写 O)。本仓 gradle.properties 中没有 configFileName 覆盖项(grep -n 'configFileName' gradle.properties 0 命中),走 FML 默认命名规则。本机没有实际生成的配置文件,本条目只记录代码里写明的默认值。
功能
general 分类
| 键 | 类型 | 默认值 | 取值范围 | 作用 |
|---|---|---|---|---|
profiler.delay |
int | 1 | 无校验 | 两次数据点之间的 tick 间隔 |
profiler.maxpts |
int | 250 | 无校验 | 一次采集的数据点数量 |
laggenerator_id |
int | -1 | 无校验 | 非 -1 时注册两个调试方块 |
display.microseconds |
boolean | true | — | 耗时显示单位为微秒 |
overlay.refresh_ms |
int | 1000 | 250–60000 | 地图覆盖层向服务端拉数据的间隔(毫秒) |
overlay.alpha.timing |
int | 200 | 0–255 | 区块耗时覆盖层的不透明度 |
overlay.alpha.loaded |
int | 80 | 0–255 | 已加载区块覆盖层的不透明度 |
前四个键无 min/max 参数,直接 getInt() / getBoolean()。后三个 overlay 键在 modOpis.java:137-143 用带注释与范围的 get(category, key, default, comment, min, max) 读取,超范围值由 Forge 配置系统夹到边界。
overlay.refresh_ms 的下界 250 与服务端的请求节流配套:ServerMessageHandler.MIN_REQUEST_INTERVAL_MS = 200(ServerMessageHandler.java:68),注释为 Below the map overlay's 250ms floor, leaving headroom for jitter。
ACCESS_RIGHTS 分类
| 键 | 类型 | 默认值 | 作用 |
|---|---|---|---|
privileged |
String[] | {} |
PRIVILEGED 名单的玩家名 |
opis |
String | PRIVILEGED |
打开 Opis 面板所需的最低 accessLevel |
tables |
String | PRIVILEGED |
查看数据表格所需的最低 accessLevel |
opis 与 tables 的取值经 AccessLevel.valueOf(...) 解析,解析失败被空 catch 吞掉(modOpis.java:151-157),非法值静默回退到 PRIVILEGED。合法值只有 NONE、PRIVILEGED、ADMIN 三种(AccessLevel.java:3-7)。
privileged 名单在 preInit 中逐个灌入 PlayerTracker.INSTANCE.addPrivilegedPlayer(s, false)(modOpis.java:162)。/opis_addpriv 与 /opis_rmpriv 的改动只进内存,不写回配置。
tables 的作用范围由 Message.setTablesMinimumLevel 决定,它用 21 条赋值语句改写 20 个不同的 LIST_* 消息的 accessLevel(LIST_TIMING_HANDLERS 被重复赋值一次,Message.java:137-159)。opis 只改写 COMMAND_OPEN_SWING 一个(Message.java:161-163)。
REMOTE_CONSOLE 分类 —— 全部失效
| 键 | 类型 | 默认值 |
|---|---|---|
opisrcon.port |
int | 25566 |
opisrcon.active |
boolean | false |
opisrcon.password |
String | "" |
这三个键被正常读取到 modOpis.rconport / rconactive / rconpass(modOpis.java:144-146),但远程控制服务器永远不会被启动。
证据:grep -rn 'RConServer.instance\|new Thread' --include=*.java src/main/java 中,RConServer.instance 的唯一出现处是 OpisServerEventHandler.java:32,而该行位于一段 /* ... */ 块注释内:
/*
* if (!firstLoad && event.world.provider.dimensionId == 0){ firstLoad = true; Thread rconserver = new
* Thread(RConServer.instance); rconserver.setName("Opis Server"); rconserver.start(); ...
RConServer.run() 开头就是 if (!modOpis.rconactive) return;(RConServer.java:55),而 run() 没有任何调用点。按死代码判定,这三个配置键在当前版本中不产生任何运行时行为。RConHandler 仍在 PacketManager 的封包分发中被引用(PacketManager.java:184-187),但因无连接建立而恒不触发。
数值
| 数值名 | 值 |
|---|---|
modOpis.rconport 默认值 |
25566 |
overlayRefreshInterval 默认值 |
1000 ms |
overlayRefreshInterval 下界 |
250 ms |
overlayAlphaTiming 默认值 |
200 |
overlayAlphaLoaded 默认值 |
80 |
profilerMaxTicks 默认值 |
250 |
profilerDelay 默认值 |
1 |
| 服务端请求节流下限 | 200 ms |
交互
| 触发 | 行为 |
|---|---|
| 服务端启动 | 生成 config/Opis.cfg 并写入全部默认值 |
修改 overlay.alpha.* 后重启 |
地图覆盖层透明度改变 |
游戏内 /opis_ticks 500 |
内存生效,重启后回到配置文件值 |
控制台 /opis_addpriv Steve |
内存生效,重启后丢失 |
ACCESS_RIGHTS:tables 设为 NONE |
全部数据表格对所有人开放 |
相关条目
- access-control - 名单的增删指令及其不落盘行为
- navigator -
overlay.*四个键的实际消费方 - network-protocol -
tables/opis改写的 accessLevel 清单 - debug-blocks -
laggenerator_id控制的一对调试方块