游戏时长 & 最后在线

游戏时长 & 最后在线

# PlayTime — Hytale 游玩时间与最后在线插件

实用

PlayTime — Hytale 的在线时长和最后上线插件

Version Hytale License

轻量级服务器插件,可追踪玩家最后上线时间和总在线时长。采用简单的 JSON 存储,内置三种语言,并暴露两个直观的命令。


快速链接


功能特性

  • 最后上线:/seen <用户名> 显示在线状态或上次断开连接的时间戳。
  • 游戏时长:/playtime <用户名> [--start=日期] [--end=日期] 计算总游戏时长或指定时间范围内的时长。
  • 日期解析:支持 dd/MM/yyyy-HH:mmdd/MM/yyyy 格式。
  • 多语言:内置 en_usen_fren_ru 语言包。
  • 零外部依赖:将每个玩家的 JSON 存储于 plugins/seenPlugin/data/players/ 目录。

命令

  • /seen <用户名> — 显示在线/离线状态及最后上线时间。
  • /playtime <用户名> — 总在线时长。
  • /playtime <用户名> --start=dd/MM/yyyy-HH:mm --end=dd/MM/yyyy-HH:mm
  • /playtime <用户名> --start=dd/MM/yyyy --end=dd/MM/yyyy
  • 可能遇到的错误:
    • Invalid date range: start date must be before end date.
    • Invalid start/end date: use dd/MM/yyyy-HH:mm or dd/MM/yyyy.

安装

  1. 从发布页下载 PlayTime.jar(或在本地构建)。
  2. PlayTime.jar 放入你的 Hytale 服务器插件目录。
  3. 重启服务器。

使用示例

/seen Loocik
/playtime Loocik
/playtime Loocik --start=01/03/2026 --end=09/03/2026
/playtime Loocik --start=01/03/2026-00:00 --end=09/03/2026-23:59

配置

  • 默认语言在代码中设置:Seen 类内的 Lang.init("en_us")
  • 切换语言:修改 Seen.setup() 中的参数,或在 lang/<代码>.json 下添加你自己的 JSON 文件,并将 Lang.init("<代码>") 指向它。
  • 日期/时间使用服务器时区(ZoneId.systemDefault())。

从源码构建

需要安装了 javacjar 的 JDK,并将 HytaleServer.jar 放在 classpath 中。

cd C:\Users\Loocik\Desktop\PlayTime1
if (Test-Path out) { Remove-Item out -Recurse -Force }
mkdir out
javac --release 11 -encoding UTF-8 -cp ".;com\example\plugin\HytaleServer.jar" -d out com\example\plugin\*.java
java -m jdk.jartool --create --file PlayTime.jar --manifest META-INF\MANIFEST.MF -C out . -C . lang -C . manifest.json

数据格式

玩家文件位于 plugins/seenPlugin/data/players/<用户名>.json

{
  "eventList": [
    { "timestamp": 1700000000, "connect": true },
    { "timestamp": 1700003600, "connect": false }
  ]
}
  • 打开的会话(最后一个事件 connect:true)在运行 /playtime 时会计算到当前时间。

限制

  • 如果服务器触发了重复的钩子,可能会出现重复的连续连接/断开事件;游戏时长计算能容忍这一点,但日志可能包含重复项。
  • 删除玩家 JSON 文件会重置其追踪时间。

路线图

  • 无需修改代码即可配置语言。
  • 可选的 SQLite 后端。
  • 按世界或按会话的细分数据。

许可证

MIT — 请参见 LICENSE 文件。

享受模组!如果遇到问题,请附上日志片段和你执行的命令来提交 issue。