# MacTime
本插件允许追踪玩家的在线时长。
# 特性
- 唯一一个更新到最新 Minecraft 版本的在线时长追踪插件
- 几乎所有信息都可以在 messages.yml 中进行配置
- GUI 展示的玩家各种在线数据(以可配置的间隔实时更新)(v1.21+)
- 单个实例在追踪超过 50 名工作人员 (*通过 spark*) 时,线程占用率低至 0%
- MySQL 支持
- Folia 支持
- 管理员友好的命令、权限节点和错误消息,以便快速定位问题
- Discord Webhook 支持
- 除 /mactime gui 之外的所有命令都可以在控制台中执行
- 可配置信息支持 Hex 颜色
- PlaceholderAPI 支持
- AFK 时间追踪 (与 EssentialsX 联动)
# 命令
### 管理员命令
* `/mactime export
[用户名]`
* 如果启用了 Discord Webhook,则允许你导出所有追踪玩家的在线数据,无论是针对特定玩家
还是所有被追踪的玩家。
* `/mactime gui [分组名:在线:离线:其他]`
* 打开一个 GUI,展示所有玩家及其在线数据。如果你在服务器上安装了 Luckperms,你可以按组权重对玩家在 GUI 中进行排序。
* 你还可以设置 GUI 的实时更新间隔(如果你不想使用此功能,可以在 config.yml 中将 `gui.updateinterval` 设置为 `0`)。
* 如果你想要查看特定组中的玩家的在线时长,你可以指定任何包含分组名称,并运行 `/mactime gui [分组名]`。
* 你还能够通过运行 `/mactime gui [在线:离线]` 来选择查看在线玩家或离线玩家的数据。
* 如果玩家曾经在 `gui.whitelisted-groups` 中指定的分组中,但现在不在了,你可以通过运行 `/mactime gui [其他]` 来查看他们的数据。
(如果你希望他们在下次加入服务器时,如果他们不再拥有 `mactime.track` 权限,自动清空他们的数据,你可以在 config.yml 中启用 `other.remove-if-no-perm`。)
* `/mactime help`
* 显示帮助菜单
* `/mactime reload [config:messages]`
* 重新加载 config.yml 文件或 messages.yml 文件。如果不指定选项,则会同时重新加载两个文件。
* `/mactime reset <玩家:分组> <分组名:用户名>`
* 重置特定玩家或分组(如果你的服务器上安装了 Luckperms)的在线数据。
*如果你希望在运行此命令后永久删除服务器上的用户数据,你可以在 config.yml 中将 `reset.delete-data-on-reset` 设置为 `true`。*
* `/ontime <用户名>`
* 查看特定玩家的在线数据
### 玩家命令
* `/ontime`
* 根据玩家的权限显示在线数据。
# 权限
| 权限 | 描述 |
| ------------- |:-------------:|
|`mactime.*`| 授予所有权限.|
|`ontime.track`| 允许插件追踪玩家的在线时长.|
|`mactime.admin`| 提供访问 /mactime 命令的权限.|
|`mactime.command.*`| 提供访问所有 /mactime 命令及其子命令的权限.|
|`mactime.command.help`| 授予访问 /mactime help 的权限.|
|`mactime.command.reload`| 授予访问 /mactime reload [config:messages] 的权限.|
|`mactime.command.export`| 如果启用了 discord webhooks,则允许你将玩家的在线数据导出到 webhook.|
|`mactime.command.reset`| 授予访问 /mactime reset 命令的权限.|
|`mactime.command.gui`| 授予访问 /mactime gui 命令的权限.|
|`ontime.own`| 允许使用 /ontime 命令。|
|`ontime.own.*`| 提供查看所有在线统计数据的权限。|
|`ontime.own.afk`| 提供查看 AFK 时间的 /ontime 权限。|
|`ontime.own.daily`| 提供查看每日时间的 /ontime 权限。|
|`ontime.own.weekly`| 提供查看每周时间的 /ontime 权限。|
|`ontime.own.monthly`| 提供查看每月时间的 /ontime 权限。|
|`ontime.own.yearly`| 提供查看每年时间的 /ontime 权限。|
|`ontime.own.alltime`| 提供查看总时间的 /ontime 权限。|
|`ontime.others`| 允许使用 /ontime <用户名> 查看其他玩家的在线时长。|
|`ontime.others.*`| 提供查看所有其他玩家的在线统计数据的权限。|
|`ontime.others.afk`| 提供查看其他玩家的 AFK 时间的 /ontime 权限。|
|`ontime.others.daily`| 提供查看其他玩家的每日时间的 /ontime 权限。|
|`ontime.others.weekly`| 提供查看其他玩家的每周时间的 /ontime 权限。|
|`ontime.others.monthly`| 提供查看其他玩家的每月时间的 /ontime 权限。|
|`ontime.others.yearly`| 提供查看其他玩家的每年时间的 /ontime 权限。|
|`ontime.others.alltime`| 提供查看其他玩家的总时间的 /ontime 权限。|
# 占位符
| 权限 | 描述 |
| ------------- |:-------------:|
| `%mactime_current%`| 显示查看占位符的用户当前在线时长|
| `%mactime_daily%`| 显示查看占位符用户的每日在线时长|
| `%mactime_weekly%`| 显示查看占位符用户的每周在线时长|
| `%mactime_monthly%`| 显示查看占位符用户的每月在线时长|
| `%mactime_yearly%`| 显示查看占位符用户的每年在线时长|
| `%mactime_alltime%`| 显示查看占位符用户的总在线时长|
| `%mactime_afktime%`| 显示查看占位符用户的 AFK 时间|
| `%mactime_lastonline%`| 这将始终返回“Player is currently online!”|
对于其他玩家,你可以在占位符末尾添加他们的用户名。
例如,
- `%mactime_daily_notch%`
* 这将返回 "Notch" 的每日在线时长。
*如果指定的玩家没有数据,则占位符将显示“Player has no data.”*
对于 `%mactime_lastonline_notch`,这会返回玩家上次离线的时间。
如果你想要原始秒数值,你可以在任何时间相关占位符末尾添加 `_raw`。
例如,
- `%mactime_daily_raw%`
- 如果我拥有 5 分钟的每日在线时间,这会返回 `300`
# 钩子
此插件与 3 个插件集成,以实现可选功能
- - -
* Luckperms
* MacTime 与 luckperms 集成以启用按权重排序的分组以及在 GUI 中添加玩家的前缀
* EssentialsX
* 用于启用 AFK 时间跟踪
* PlaceholderAPI
* 用于占位符。
# 展示
GUI

Ontime 命令

Discord Webhook

占位符

默认 config.yml
```yml
# MacTime, by AjMaacc
# 存储选项
# 数据存储在 plugins/MacTime/playerdata/mactime.db
# 默认存储类型为 SQLite
sql:
# 要使用 MySQL,请将以下内容设置为 true
# 默认: false
enabled: false
# 数据库服务器地址
address: '127.0.0.1:3306'
# 数据库名称、用户名和密码
database: ""
username: ""
password: ""
# 选项
usessl: false
# 每周末,可以将玩家的在线时长保存到文件中,以排行榜的形式
ontime-saving:
# 启用此功能
# 默认: true
enabled: true
# 每周的哪一天将保存在线时长
# 选项: 星期一, 星期二, 星期三, 星期四, 星期五, 星期六, 星期日
# 默认: 星期一
dayofweek: 'Monday'
# 按什么次序排序
# 选项: Alphabetical, Ascending, Descending, Group.
# Group 将按 Luckperms 组排序,需要安装 Luckperms!
# 默认: "Descending"
order: "Descending"
# MacTime 管理员命令配置
# 重置
# /mactime reset 命令的选项
reset:
# 在任何未确认的 /mactime 重置查询被取消之前的延迟,以秒为单位
# 默认: 10
delay: 10
# 永久删除数据还是在重置后重启计数
# 默认: false
delete-data-on-reset: false
# 谁可以执行 /mactime 重置命令 *(重置所有人的在线时长)*
# 选项: "None", "Console", "Player", "All"
# 默认: None
wildcard-reset: 'None'
# AFK 检查器
# 玩家的 AFK 状态由 MacTime 与 Essentials 集成确定
# 要使此功能正常工作,需要在服务器上安装 Essentials。
afk-checker:
# 启用 AFK 时间追踪
# 默认: false
enabled: false
luckperms:
# 用于按组排序的 Luckperm 组
# 要使此功能起作用,需要在服务器上安装 Luckperms
# 默认:
# - owner
# - manager
# - admin
# - jradmin
# - dev
# - srmod
# - mod
# - jrmod
# - helper
whitelisted-groups:
- owner
- manager
- admin
- jradmin
- dev
- srmod
- mod
- jrmod
- helper
# GUI
# /mactime gui 命令的选项
gui:
# 通过 Luckperm 组排序 /mactime gui
# 你的服务器上需要安装 Luckperms 才能使其起作用!
# 默认: false
sort-by-luckperm-group: false
# 更新 GUI 的时长(秒)
# 将此设置为 0 以禁用此功能
# 默认: 10
update-interval: 10
# Discord Webhook
webhook:
# 启用此功能
# 默认: false
enabled: false
# Webhook url
url: ''
# Webhook 的用户名。如果未设置 (或为空),则默认为“MacTime”
username: ''
join:
# 发送玩家加入 webhook
# 默认: true
enabled: true
# 如果你希望此特定嵌入发送到单独的 webhook,
# 在此处添加辅助 webhook 的 url
# 如果为空,则默认为使用主 webhook url (定义在 "webhook.url" 下)
url: ''
# 如果你希望 webhook 的用户名与原始用户名(webhook.username)不同,
# 留下此项为空则默认为 webhook.username
username: ''
leave:
# 发送玩家离开 webhook
# 默认: true
enabled: true
url: ''
username: ''
afkstart:
# 发送玩家进入 afk 的 webhook
# 默认: true
enabled: true
url: ''
username: ''
afkend:
# 发送玩家退出 afk 的 webhook
# 默认: true
enabled: true
url: ''
username: ''
print:
# 启用 "/mactime export" 命令并允许将玩家数据发送到 webhook
# 默认: true
enabled: true
url: ''
username: ''
saving:
# 在 ontime-saving 部分保存每周数据时发送 webhook
# 默认: true
enabled: true
url: ''
username: ''
other:
# 启用启动时 MacTime 在控制台中漂亮的签名
# 如果你不想看到这个,将以下内容设置为 false
# 默认: true
signature: true
# 如果玩家不再拥有 `ontime.track` 权限,则删除玩家的在线数据
# 玩家下次加入服务器时,会清除他们的数据
# 默认: false
remove-if-no-perm: false
# 你的时区
# 使用 https://pastebin.com/mfdYhnu7 来查找适合你时区的形式
timezone: "America/New_York"
# ontime 首次开始记录的时间
# 当你执行 /mactime reset 时,将重置此时间
# 请不要修改
#
start: ''
# 配置版本(不要修改,否则你会得疟疾)
version: '1.0.4'
```
默认 messages.yml
```yml
version: '1.0.3'
prefix: '&e☀ &e&lMacTime &8&l» '
online: '&a●'
offline: '&c●'
afk: '&8[&7&lAFK&8]'
no-permission: '&cNo Permission'
# %player_name% = 玩家用户名
command:
ontime:
player:
# /ontime 的标题
self-header: '&7&m &r &a%player_name%''s Ontime &7&m &r'
# /ontime <用户名> 的标题
other-header: '&a%player_name%''s Ontime'
no-ontime-data: '&c %player_name% &c没有在线数据!'
divider: '&7&l&m '
console:
invalid: '此命令不能在控制台中执行。'
player-does-not-have-data: '此玩家没有在线数据!'
# %player_name% = 玩家用户名
# {0} = Luckperm 前缀
# {1} = 总玩家数
reset:
expired:
player: '&c%player_name% 的在线数据重置请求已过期!'
group: '&c{0} 组的在线数据重置请求已过期!'
wild: '&c所有玩家的在线数据重置请求已过期!'
confirm:
player: '&7你确定要重置 &f%player_name%&7 的在线数据吗? &7[点击确认]'
group: '&7你确定要重置 &f{0}&7 组的玩家的在线数据吗? &7[点击确认]'
wild: '&c你确定要重置所有在线统计数据吗? &7[点击确认]'
success:
player: '&7已重置 &f%player_name%&7 的在线数据!'
group: '&7已重置 &f{1}&7 位玩家在 &f{0}&7 组的在线数据!'
wild: '&7已重置 &f{1}&7 位玩家的在线统计数据!'
invalid:
player: '&c你输入了无效的用户名!'
group: '&c你输入了无效的组名!'
wild: '&c此操作当前已禁用!'
player-does-not-have-data: ' &c%player_name% 没有在线数据!'
# %command% - 重置命令,例如 "/mactime reset player Notch"
hover-msg: '&a&l点击我&r'
#
# /ontime 命令 (/ontime)
#
ontime:
player:
current-ontime: '&f当前在线时长 &8➡ &e%mactime_current%'
daily-ontime: '&f每日在线时长 &8➡ &e%mactime_daily%'
weekly-ontime: '&f每周在线时长 &8➡ &e%mactime_weekly%'
monthly-ontime: '&f每月在线时长 &8➡ &e%mactime_monthly%'
yearly-ontime: '&f每年在线时长 &8➡ &e%mactime_yearly%'
alltime-ontime: '&f总在线时长 &8➡ &e%mactime_alltime%'
afk-time: '&f总 AFK 时间 &8➡ &e%mactime_afktime%'
last-online: '&f上次在线 &8➡ &e%mactime_lastonline% &f前'
console:
current-ontime: '* 当前在线时长 ➡ %mactime_current%'
daily-ontime: '* 每日在线时长 ➡ %mactime_daily%'
weekly-ontime: '* 每周在线时长 ➡ %mactime_weekly%'
monthly-ontime: '* 每月在线时长 ➡ %mactime_monthly%'
yearly-ontime: '* 每年在线时长 ➡ %mactime_yearly%'
alltime-ontime: '* 总在线时长 ➡ %mactime_alltime%'
afk-time: '* AFK 时间 ➡ %mactime_afktime%'
last-online: '* 上次在线 ➡ %mactime_lastonline%'
#
# GUI 信息配置 (/mactime gui)
#
gui:
# 玩家在线时长
# {0} = 总玩家数
po:
title: '工作人员在线时长 ({0})'
online: '&a&l在线'
offline: '&c&l离线'
current-ontime: '&e| &f当前在线时长 &8➡ &e%mactime_current%'
daily-ontime: '&e| &f每日在线时长 &8➡ &e%mactime_daily%'
weekly-ontime: '&e| &f每周在线时长 &8➡ &e%mactime_weekly%'
monthly-ontime: '&e| &f每月在线时长 &8➡ &e%mactime_monthly%'
yearly-ontime: '&e| &f每年在线时长 &8➡ &e%mactime_yearly%'
alltime-ontime: '&e| &f总在线时长 &8➡ &e%mactime_alltime%'
afk-time: '&e| &f总 AFK 时间 &8➡ &e%mactime_afktime%'
last-online: '&e| &f上次在线 &8➡ &e%mactime_lastonline% &f前'
# 排序后的玩家在线时长 (GUI 没有 luckperms 排序)
# {0} = 总玩家数
spo:
title: '工作人员在线时长 ({0})'
# 单个分组的在线时长 (/mactime gui [分组名])
# {0} = Luckperms 分组前缀
# {1} = 总玩家数
igo:
titles:
main: '{0}&8在线时长 ({1})'
other: '其他成员的在线时长 ({1})'
error:
invalid-group: '&c无效的分组'
group-does-not-exist: '&c该分组在 luckperms 中不存在!'
# 单个玩家的在线数据菜单
# 这是当您点击 /mactime gui 中玩家头像时显示的菜单
io:
title: '玩家 %player_name% 的数据'
# 排序后的在线时长
# {0} = Luckperms 分组前缀
# {1} = 总玩家数
so:
title: '{0} &8玩家在线时长 ({1})'
# {0} = 日期(例如:1/20,3/10)
# {1} = 时间
history-item:
title: '过去 7 天的在线时长'
entry: '&3{0} &8➡ &3{1}'
empty: '&c玩家在过去 7 天内没有登录!'
# AFK 通知记录到控制台
# {0} = AFK 总时长 (格式为 hh:mm:ss)
AFK-Detection:
afk: '现在为 afk'
not-afk: '不再为 afk'
afk-time: 'afk 了 {0}'
#
# Webhook 嵌入
#
webhook:
join:
title: $username 已加入
color: 0x00ff00
# 可用占位符
# $time - 玩家加入服务器的时间戳
content:
- "• 加入时间: `$time`"
leave:
title: $username 已离开
color: 0xff0000
# 可用占位符
# $time_joined - 玩家加入服务器的时间戳
# $time_left - 玩家离开服务器的时间戳
# $time_online - 玩家在服务器上的总时长
content:
- "• 加入时间: `$time_joined`"
- "• 离开时间: `$time_left`"
- "• 总在线时间: `$time_online`"
afk-start:
title: $username 现在为 afk
color: 0xff9a00
# 可用占位符
# $time - 玩家开始 afk 的时间戳
# $afk_time - 玩家在服务器上总共 afk 的时间
content:
- "• Afk 开始时间: `$time`"
- "• 总 AFK 时间: `$afk_time`"
afk-end:
# 可用占位符 ($username)
title: $username 不再为 afk
color: 0xff9a00
# 可用占位符
# $time - 玩家 afk 的时间
# $afk_time - 玩家 afk 的时间
# $total_afk_time - 玩家总共 afk 的时间
content:
- "• Afk 自: `$time`"
- "• Afk 时间: `$afk_time`"
- "• 总 AFK 时间: `$total_afk_time`"
print:
title: $username 的在线统计信息
color: 0xffffff
# 可用占位符
# $date
# $uuid
# $daily_ontime
# $weekly_ontime
# $monthly_ontime
# $yearly_ontime
# $alltime_ontime
# $afk_time
# $last_online
content:
- "• 日期: `$date`"
- "• UUID: `$uuid`"
- "• 每日在线时长: `$daily_ontime`"
- "• 每周在线时长: `$weekly_ontime`"
- "• 每月在线时长: `$monthly_ontime`"
- "• 每年在线时长: `$yearly_ontime`"
- "• 总在线时长: `$alltime_ontime`"
- "• Afk 时间: `$afk_time`"
- "• 上次登录: `$last_online`"
saving:
# 可用占位符 ($range)
title: $range 的每周在线时长
color: 0xffffff
```
# 支持与联系
要报告错误、建议功能或任何其他内容,请通过 Discord 联系我。
- 直接联系
* -> [ajmac](http://discord.com/users/643604666634076179)
# bStats
