配置项

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 全部数据表格对所有人开放

相关条目