- 版权类型
- 原创
- Wiki/文档
- https://ik-series.netlify.app/
- 语言支持
- 中文(简体)
- 前置组件
- lse
ll
可选 IK_Spark_Bridge
OnlineTimerEX数据迁移
- 适配版本(基岩)
- 最新版本
没有金粒?加入IK系列插件QQ交流群免费获取:318569582
- 作者:I IKUN2004
- QQ:2895552468
简介
IK_OnlineTimer 是“星辰系列”中的一款在线时长统计插件,基于 LeviLamina(LiteLoaderBDS)开发。它能精确记录每位玩家的总在线时长、今日/本周/本月在线时长,支持挂机检测、里程碑庆祝、排行榜展示、计分板与 ActionBar 显示,并可对接 BEPlaceholderAPI、QQ 群机器人,是生存服、 RPG 服激励玩家活跃度的利器。特性
- 精准计时:每秒检测玩家活跃状态,只统计非挂机时间,避免挂机刷时长。
- 多维度统计:同时记录总时长、今日、本周、本月时长,自动按自然周期重置。
- 智能挂机检测:通过移动、视角变化等多重事件判定挂机状态,挂机期间暂停计时。
- 里程碑系统:可配置达标小时数(如每 100 小时)或固定节点,触发全服广播、Toast 提示、音效、QQ 消息及自定义命令。
- 双榜单系统:支持游戏内 GUI 排行榜(总榜 / 日榜 / 周榜 / 月榜)及控制台输出。
- 计分板与 ActionBar:可选将总时长同步到计分板(玩家列表/名字下方),并定时在屏幕上方滚动显示个人时长。
- 进服欢迎提示:新玩家首次登录可记录,可配置进服 Title、广播及音效。
- 隐私设置:每位玩家可自由开关“进服广播”、“参与排行榜”、“头顶时长显示”三项。
- PAPI 对接:注册
%ik_onlinetime%、%ik_online_minutes%等 10 个变量,方便其他插件调用。 - QQ 桥接:里程碑消息可自动推送至 QQ 群(需配合 IK_Spark_Bridge 或 SparkAPI)。
- 数据迁移:支持从
OnlineTimerEX的TimeData.json自动迁移历史数据。 - 管理员命令:提供
/iktime管理命令,可查询、增加、减少、重置玩家时长,支持热重载配置。
安装要求
- LeviLamina 1.0.0 或更高版本(内置 LLSE 脚本引擎)
- nickname 插件(显示昵称)
- BEPlaceholderAPI(提供 PAPI 变量)
- IK_Spark_Bridge 或 SparkAPI(QQ 群消息推送)
安装步骤
- 将
IK_OnlineTimer.js放入plugins/文件夹。 - 启动服务器,插件会自动生成
plugins/IK_OnlineTimer/目录及配置文件config.json、数据文件time_data.json、隐私文件privacy.json。 - 根据需要修改
config.json,然后执行/iktime reload热重载配置(也可重启服务器)。 - (可选)若存在旧版
./plugins/Ctrini/OnlineTimerEX/TimeData.json,插件启动时会自动迁移并备份原文件。
配置文件
路径:plugins/IK_OnlineTimer/config.jsonjson
JavaScript:
{
"tabDisplay": false,
"joinWelcome": true,
"welcomeTitle": "§l§d✦ 星辰 ✦",
"welcomeSubtitle": "§b欢迎来到本服~",
"actionBar": {
"enabled": true,
"interval": 300,
"format": "§b累计镇守: §e{time}"
},
"saveIntervalMinutes": 5,
"enableAntiAFK": true,
"afkTimeoutMinutes": 5,
"enablePAPI": true,
"rankCacheSeconds": 30,
"milestones": {
"enabled": true,
"intervalHours": 100,
"hours": [],
"broadcast": true,
"sendQQ": true,
"toast": true,
"sound": "random.totem",
"commands": []
}
}
配置项详解
tabDisplay:是否在 Tab 玩家列表计分板显示在线时长。joinWelcome:是否启用进服欢迎。welcomeTitle/welcomeSubtitle:进服时屏幕中央的标题和副标题(支持 § 颜色代码)。actionBar.enabled:是否在屏幕下方循环显示 ActionBar。actionBar.interval:ActionBar 刷新间隔(秒)。actionBar.format:显示格式,{time}会被替换为玩家在线时长。saveIntervalMinutes:自动保存数据到磁盘的间隔(分钟)。enableAntiAFK:是否启用挂机检测。afkTimeoutMinutes:挂机判定超时时间(分钟),期间无操作即视为挂机。enablePAPI:是否向 BEPlaceholderAPI 注册变量。rankCacheSeconds:排行榜缓存时间(秒),减少性能开销。milestones.enabled:是否启用里程碑功能。milestones.intervalHours:若未指定hours列表,则按此间隔自动触发里程碑(小时)。milestones.hours:固定的里程碑小时数数组(如[50, 100, 200]),优先级高于intervalHours。milestones.broadcast:是否全服广播。milestones.sendQQ:是否推送至 QQ 群。milestones.toast:是否给该玩家弹出顶部 Toast 提示。milestones.sound:庆祝音效(如random.totem)。milestones.commands:达成里程碑时以控制台身份执行的自定义命令数组,支持{player}和{hours}占位符。
游戏指令说明
玩家指令
指令 说明 权限 /mytime打开个人在线时长与排行榜查询 GUI 主菜单 所有玩家 /mytime <玩家名>快捷查询指定玩家的详细在线时长数据 所有玩家
| 指令 | 说明 | 权限 |
|---|---|---|
/mytime | 打开个人在线时长与排行榜查询 GUI 主菜单 | 所有玩家 |
/mytime <玩家名> | 快捷查询指定玩家的详细在线时长数据 | 所有玩家 |
管理员指令
指令 说明 权限 /iktime help查看管理员帮助菜单 OP / 控制台 /iktime reload热重载配置文件与外部接口 OP / 控制台 /iktime save立即将缓存的时长数据强制写入本地文件 OP / 控制台 /iktime query <玩家>后台查询玩家各项时长数据 OP / 控制台 /iktime set <玩家> <分钟>覆写玩家的总在线时长 OP / 控制台 /iktime add <玩家> <分钟>增加指定玩家的在线时长(触发里程碑) OP / 控制台 /iktime reduce <玩家> <分钟>扣除指定玩家的在线时长 OP / 控制台 /iktime reset <玩家>将玩家的所有时长数据(含日/周/月)清零 OP / 控制台 /iktime qqtest测试 QQ 桥接功能是否正常工作 OP / 控制台 /iktime top [分类]在控制台输出前十名榜单 (total/daily/weekly/monthly) OP / 控制台
| 指令 | 说明 | 权限 |
|---|---|---|
/iktime help | 查看管理员帮助菜单 | OP / 控制台 |
/iktime reload | 热重载配置文件与外部接口 | OP / 控制台 |
/iktime save | 立即将缓存的时长数据强制写入本地文件 | OP / 控制台 |
/iktime query <玩家> | 后台查询玩家各项时长数据 | OP / 控制台 |
/iktime set <玩家> <分钟> | 覆写玩家的总在线时长 | OP / 控制台 |
/iktime add <玩家> <分钟> | 增加指定玩家的在线时长(触发里程碑) | OP / 控制台 |
/iktime reduce <玩家> <分钟> | 扣除指定玩家的在线时长 | OP / 控制台 |
/iktime reset <玩家> | 将玩家的所有时长数据(含日/周/月)清零 | OP / 控制台 |
/iktime qqtest | 测试 QQ 桥接功能是否正常工作 | OP / 控制台 |
/iktime top [分类] | 在控制台输出前十名榜单 (total/daily/weekly/monthly) | OP / 控制台 |
扩展变量 (PlaceholderAPI)
本插件已全面接入 BEPlaceholderAPI,可用于悬浮字、计分板或其他支持 PAPI 的插件中:
变量名 含义说明 示例输出 %ik_onlinetime%获取格式化时长(含颜色) §a2§7小时 §a30§7分钟§r (或显示“挂机中”)%ik_online_minutes%纯数字:玩家总累计在线(分钟) 150%ik_online_hours%纯数字:玩家总累计在线(小时) 2%ik_online_rank%玩家的全服总时长排名 1 或 未上榜%ik_online_status%玩家当前的活跃判定状态 活跃中 或 挂机中 或 离线%ik_online_daily%纯数字:今日在线(分钟) 60%ik_online_weekly%纯数字:本周在线(分钟) 300%ik_online_monthly%纯数字:本月在线(分钟) 1200%ik_first_login%玩家首次登录本服的时间 2024-04-26 14:30:00%ik_last_login%玩家最后一次下线/记录的时间 2024-07-24 18:00:00
| 变量名 | 含义说明 | 示例输出 |
|---|---|---|
%ik_onlinetime% | 获取格式化时长(含颜色) | §a2§7小时 §a30§7分钟§r (或显示“挂机中”) |
%ik_online_minutes% | 纯数字:玩家总累计在线(分钟) | 150 |
%ik_online_hours% | 纯数字:玩家总累计在线(小时) | 2 |
%ik_online_rank% | 玩家的全服总时长排名 | 1 或 未上榜 |
%ik_online_status% | 玩家当前的活跃判定状态 | 活跃中 或 挂机中 或 离线 |
%ik_online_daily% | 纯数字:今日在线(分钟) | 60 |
%ik_online_weekly% | 纯数字:本周在线(分钟) | 300 |
%ik_online_monthly% | 纯数字:本月在线(分钟) | 1200 |
%ik_first_login% | 玩家首次登录本服的时间 | 2024-04-26 14:30:00 |
%ik_last_login% | 玩家最后一次下线/记录的时间 | 2024-07-24 18:00:00 |
开发者 API (导出函数)
其他 LSE 插件可通过 ll.import 调用本插件的数据:
导出名称 描述说明 getPlayerMinutes(uuid)获取指定 UUID 玩家的总在线分钟数 getPlayerPeriodMinutes(uuid, type)获取周期分钟数 (type: "daily", "weekly", "monthly", "total") getPlayerStateStr(xuid, uuid)获取玩家状态字符串 (格式化时间 或 "§c挂机中") isPlayerAFK(xuid)检查目标玩家当前是否处于挂机状态 (返回 boolean) getPlayerRank(uuid, type)获取玩家在指定榜单的排名数字 canShowHeadTime(xuid, uuid)获取玩家是否开启了“允许头顶显示时长”的隐私设置 checkPrivacy(xuid)(同上) 获取头顶计分板隐私开关状态
| 导出名称 | 描述说明 |
|---|---|
getPlayerMinutes(uuid) | 获取指定 UUID 玩家的总在线分钟数 |
getPlayerPeriodMinutes(uuid, type) | 获取周期分钟数 (type: "daily", "weekly", "monthly", "total") |
getPlayerStateStr(xuid, uuid) | 获取玩家状态字符串 (格式化时间 或 "§c挂机中") |
isPlayerAFK(xuid) | 检查目标玩家当前是否处于挂机状态 (返回 boolean) |
getPlayerRank(uuid, type) | 获取玩家在指定榜单的排名数字 |
canShowHeadTime(xuid, uuid) | 获取玩家是否开启了“允许头顶显示时长”的隐私设置 |
checkPrivacy(xuid) | (同上) 获取头顶计分板隐私开关状态 |
数据文件
time_data.json:存储所有玩家的时长数据(结构见代码注释)。privacy.json:存储每个玩家的隐私开关(joinBroadcast、rankVisible、headDisplay)。- 插件自动备份数据(
OnlineTimerEX)到.bak文件。
常见问题
Q:如何屏蔽某玩家的排行榜显示?A:该玩家可使用
/mytime → 隐私设置,关闭“参与在线排行榜”。Q:里程碑的 QQ 通知没收到?
A:确保配置中
sendQQ 为 true,且服务器已安装 IK_Spark_Bridge 或 SparkAPI,群号配置正确。可使用 /iktime qqtest 测试。Q:能不能只统计纯在线时间,排除挂机?
A:默认启用挂机检测(
enableAntiAFK: true),挂机期间不计时。afkTimeoutMinutes 可调整判定时间。Q:排行榜数据不是实时的?
A:为优化性能,排行榜缓存
rankCacheSeconds 秒后更新,可在配置中调小该值。Q:如何重置某玩家的今日时长?
A:每日时长与系统日期绑定,会自动归零。如需强制重置所有数据,用
/iktime reset <玩家>。Q:如何自定义进服欢迎?
A:修改配置中的
welcomeTitle 和 welcomeSubtitle,支持 Minecraft 颜色代码。若只不想显示广播,可关闭 joinWelcome 或玩家在隐私设置中关闭“进服欢迎广播”。