服务端配置
config/TaskNHConfig.java,Forge Configuration,在 preInit 阶段加载。客户端配置是另一个文件,见 客户端图钉配置。
加载方式
TaskNHConfig.load(FMLPreInitializationEvent) 由 CommonProxy.preInit() 调用(客户端也会走,因为 ClientProxy.preInit 只调 super.preInit):
new Configuration(event.getSuggestedConfigurationFile());
config.load();
if (config.hasChanged()) config.save();
文件为标准 <mcDataDir>/config/tasknh.cfg。类的 Javadoc 写明是 “Server-side config for item tracking and reminders.”,但因为客户端代理也执行 preInit,客户端同样会生成这个配置文件。
全部 3 个选项
| 配置键 | 分类 | 类型 | 默认值 | 范围 | 对应静态字段 | 说明 |
|---|---|---|---|---|---|---|
item_tracking.enabled |
item_tracking |
boolean | true |
— | itemTrackingEnabled |
任务的追踪物品出现在队员物品栏时自动完成任务 |
item_tracking.announce |
item_tracking |
boolean | true |
— | announceAutoComplete |
任务自动完成时向队伍聊天广播 |
reminders.cooldown |
reminders |
int | 60 |
0–3600 | remindCooldownSeconds |
同一玩家对同一任务重复提醒的冷却秒数,0 关闭冷却 |
两个 CATEGORY 常量分别是 "item_tracking" 与 "reminders"。注意 reminders.cooldown 是唯一带范围限制的项(config.getInt(name, cat, 60, 0, 3600, comment))。
各选项的作用点
item_tracking.enabled——ItemTrackHandler.onServerTick开头if (!itemTrackingEnabled) return;,关掉后整个自动完成停摆,详见 物品完成追踪item_tracking.announce—— 同时控制两处播报:清单项自动勾选的tasknh.chat.auto_check,以及任务自动完成的tasknh.chat.auto_complete。关闭后仍正常完成,只是不发消息reminders.cooldown——RemindTaskPacket.executeServer里判冷却。冷却键是"taskId:targetPlayerId",值存在CommonProxy.remindCooldowns这个纯内存LinkedHashMap,源码注释「Resets on server restart」,即重启即清空;冷却未过时给发送者回tasknh.chat.remind.cooldown
提醒冷却的边界
关卡检查是 now - lastRemind < remindCooldownSeconds * 1000L。冷却为 0 时 0L 不大于任何非负差值,所以 0 确实等于「不限制」。
另外还有一条与配置无关的失败分支:目标玩家不在线时不会写入冷却键,直接回 tasknh.chat.remind.offline——所以可以对同一个离线玩家反复点提醒,都不会触发冷却。