Skip to content

在线时间

用计分板配合重复命令方块追踪并显示每位玩家的在线时长

社区
官方•Dingding OvO · 2026-08-12

这套系统用计分板持续累加每位玩家的在线分钟数,并把数值实时显示在玩家头顶的名牌下方。它只需要一个重复命令方块即可运行,适合作为服务器的常驻信息展示工具。计分板的详细用法见 /scoreboard 命令文档。

原理

计分板在底层是一张「目标(objective)→ 分数」的映射表。每个目标都是独立的一列数据,拥有自己的准则(criteria)、显示名称和一组「玩家 → 整数分数」的键值对。本系统用 dummy 准则创建目标:dummy 不挂钩任何游戏事件,分数只能由命令手动增减,这正好匹配「每隔一分钟手动 +1」的计时需求。这些数据随世界一起写入存档(level 数据库),玩家离线甚至服务器重启都不会被清空,因此分数天然具备「累计在线时长」所需要的持久性。

计时靠的是重复命令方块内置的「延迟(Delay)」字段。重复命令方块每个游戏刻都会尝试执行,但延迟字段会让它先倒数指定数量的游戏刻,倒数归零时才真正运行一次命令,然后重新开始倒数。基岩版每秒固定 20 个游戏刻,把延迟设为 1200,就意味着每 1200 ÷ 20 = 60 秒才执行一次 scoreboard players add @a online_time 1,分数每分钟加 1,直接对应在线分钟数。这里的 @a 会在执行瞬间展开为当前所有在线的玩家,因此每轮累加都同时作用于全体在线玩家。

显示部分由 setdisplay belowname 完成。belowname 是基岩版专属的显示栏位,它本身不存储任何数据,只是告诉渲染引擎「在玩家的名牌下方绘制哪个目标的分数」。引擎渲染名牌时会实时读取该玩家在这个目标上的分数并画出来,所以名牌下方显示的数字始终与计分板里的值同步。你通常看不到自己头顶的名牌,因此也看不到自己的在线时长,只能看到其他玩家的。

这套设计刻意保持「无状态」:分数是唯一的事实来源,系统里没有任何额外的计时器或触发器。它也因此带来两个值得注意的边界行为。第一,只有玩家在线且命令方块所在区块处于加载状态时分数才会增长,玩家离线期间 @a 匹配不到他,分数自然停滞。第二,命令方块一旦离开加载范围就会完全停止运行,并非「暂停后补算」,所以务必把它放在常加载区域内,可用 /tickingarea 命令划定。

前置指令

在聊天栏中依次执行下面两条命令,创建用于记录的计分板目标,并把它挂到玩家名牌下方。执行前需要开启作弊,或具备 OP 等级 1。

/scoreboard objectives add online_time dummy §e在线时间§6(§b分§6)

创建名为 online_time 的 dummy 目标。显示名称中的颜色代码仅影响视觉效果:§e 为黄色、§6 为金色、§b 为青色,最终显示为黄色「在线时间」加金色括号与青色单位「分」,不影响分数本身。

/scoreboard objectives setdisplay belowname online_time

把 online_time 目标挂到 belowname 显示栏位。所有在线玩家的分数会实时出现在各自头顶的名牌下方,此后分数每变一次,显示就同步刷新一次。

搭建步骤

第 1 步:放置计时命令方块(重复命令方块)

放一个重复命令方块,模式选「无条件」,激活方式选「保持开启」,延迟设为 1200 游戏刻,写入以下命令:

/scoreboard players add @a online_time 1

延迟 1200 游戏刻等于 60 秒,因此这条命令每分钟为所有在线玩家各加 1 分,直接对应在线分钟数。若想按秒计时,把延迟改为 20 即可,但分数增长很快,显示较长数字时不够美观。

第 2 步(可选):静默命令输出

如果不想让命令方块的消息出现在聊天栏,可以在聊天栏执行下面的命令,关闭命令方块的输出提示。它不影响计分板的正常工作。

/gamerule commandblockoutput false

常见问题

为什么看不到自己的在线时间?

这是基岩版 belowname 栏位的特性:分数画在玩家头顶的名牌下方,而你通常看不到自己头顶的名牌。其他玩家能看到你的在线时长,你也只能看到别人的。这是正常行为,不是命令写错。

离线后再次上线,时间会继续累加吗?

会。计分板数据保存在世界存档中,玩家离线时分数不会被清空,下次上线会从上次的分数继续累加。需要注意,只有玩家在线且命令方块所在区块处于加载状态时,分数才会继续增长,离线期间的时间不会被事后补算。

分数一直不变,命令方块没有工作?

依次检查这几点:命令方块是否位于常加载区域内;是否设置为「保持开启」而非「需要红石」;延迟值是否误填成其他数字。确认无误后,命令方块会在加载状态下按延迟周期持续执行。常加载区域可用 /tickingarea 命令划定。

想把分数显示成「时:分」格式怎么办?

仅靠 belowname 无法把纯数字格式化为「时:分」。可以在这块重复命令方块后串联连锁命令方块,用 /execute 读取分数、换算小时和分钟,再用 /title 在 actionbar 位置显示格式化文本,但实现起来较复杂。

如何重置某位玩家的在线时长?

在聊天栏执行 scoreboard players set,把该玩家在目标上的分数写回 0。例如把玩家 Steve 的时长清零:

/scoreboard players set Steve online_time 0

基岩版注意

  • 需要 OP 等级 1 才能执行 /scoreboard 命令
  • belowname 是基岩版专属的显示栏位(全小写),Java 版对应拼写为 belowName(驼峰式)
  • 重复命令方块的「延迟」字段是基岩版特性,Java 版的重复命令方块没有该设置(每个游戏刻执行一次,计时需改用计分板或红石)
  • 基岩版的计分板准则比 Java 版少,dummy 是最常用的自定义准则,Java 版还提供 deathCount、health 等自动追踪准则
  • 颜色代码(§e、§b、§6)在显示名称中有效,但在部分网易版客户端可能显示异常(待验证),本文档基于国际版编写
  • 计分板数据保存在世界存档中,重置世界或删除存档会丢失所有在线时长数据
  • 重复命令方块必须放在常加载区域内,否则玩家远离后命令方块停止运行,期间的时长不会被补算