
加入队列
异步排队加入队列 适用于 NeoForge 1.21.1/1.21.8。通过在线程安全的队列中暂存玩家,防止大量登录时发生崩溃和 TPS 下降。以稳定速率接纳玩家。具备自定义位置界面。服务器和客户端均需安装。
JoinQueue
版本:NeoForge 1.21.1 & 1.21.8
防止因大量玩家同时加入(例如重启后或活动期间)导致的服务器崩溃和 TPS 下降。此模组在配置阶段将连接的玩家排入等待队列,防止主线程过载。
功能
- 激活: 默认设置下队列始终激活(
queue_activation_threshold = 0)。可设定一个阈值,仅在在线玩家数超过指定值时激活。同时,在服务器重启后的宽限期(默认60秒)内,或当 TPS 低于 8.0 时,队列会强制激活。 - TPS 检测: 仅当服务器稳定(TPS ≥ 8.0)且队列未暂停时,才会释放玩家。在严重卡顿时,释放过程会自动停止。
- 释放速率: 玩家会按定时器依次进入——默认每2秒(普通)和每1秒(VIP),可通过
ticks_between_joins/ticks_between_joins_vip配置。 - 手动控制: 管理员可使用
/joinqueue pause和/joinqueue resume手动停止或开始登录过程,或使用/joinqueue toggle启用/禁用整个模组。 - 优先级与绕过:
- 工作人员完全绕过队列。
- VIP 玩家被移到队列前端,并以更快的定时器释放。
- 服务器已满处理: 当服务器达到原版玩家上限时,普通玩家会被保留在队列中(显示“服务器已满”消息),直到有空位出现,而不会在网络层被拒绝。工作人员可绕过此限制,VIP 也可在满员时加入。
- 异步区块加载: 在玩家加入前,于后台线程加载出生点区块(半径可配置,默认3),以防止主线程冻结。
hold_back_ms安全上限(默认1500ms)确保即使区块加载缓慢,玩家也会被释放。 - 队列界面: 向玩家显示其当前排队位置、队列总人数以及自定义(可配置)消息,包括队列暂停时的单独消息。
- 最低等待时间与上限: 可选的
min_queue_seconds强制每位玩家等待最短时间,max_queue_size可限制队列容纳的玩家数量。
命令
所有命令需要权限等级2(OP)。更改会自动保存并立即生效。
| 命令 | 描述 |
|---|---|
/joinqueue status |
显示总开关、释放状态、服务器就绪状态、TPS、队列大小、阈值以及工作人员/VIP 数量。 |
/joinqueue toggle |
启用或禁用整个模组(总开关)。 |
/joinqueue pause |
暂停队列(玩家会累积但不会被释放)。 |
/joinqueue resume |
恢复释放玩家。 |
/joinqueue reload |
从 config/joinqueue.json 重新加载配置。 |
| `/joinqueue staff <add | remove> ` |
| `/joinqueue vip <add | remove> ` |
| `/joinqueue list <staff | vip>` |
技术细节
- 完全在配置阶段中运行,即在玩家完全加入世界之前。
- 使用
ConcurrentLinkedDeque和AtomicInteger实现线程安全性能。 - TPS 通过基于
nanoTime的滚动40刻环形缓冲区进行测量。 - 通过 Mixin 扩展服务器保活超时时间(15秒 → 2分钟),确保队列中的玩家在等待时不会被踢出。
- 被释放但从未完成加入握手的玩家会在15秒后被移除,以免队列停滞。
- 兼容 Arclight/混合服务器(区块预加载在那里会被安全跳过)。
- 服务器和客户端均需要安装。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。