白名单、封禁与 OP:那些行为和你想象中不一样的服务端命令
开启白名单并不会踢掉已在线的玩家,除非启用 enforce-whitelist;/ban 不带理由就没什么用,/ban-ip 写入的是另一份名单;而 OP 等级比 OP 名单更重要,/op 默认给的是 4 级。这些细节专坑服主。
管理命令看起来很简单,大多数情况下确实如此。出问题的地方来自三种从语法上看不出来的行为。
白名单不会移除已在线的玩家——除非你明确要求
/whitelist on 只是对新登录开始执行名单。已连接的玩家是否会被踢出,取决于 server.properties 中的一行配置:
enforce-whitelist=true
它默认为 false,在此期间,未列入名单的玩家通过 /whitelist on 和 /whitelist reload 都能保持连接。把它设为 true 后,on、reload 和 remove 都会踢出已连接但不在名单上的玩家。开启白名单却不开启强制执行,然后就不管了,这是最经典的错误。
还有两个细节:
- 在正版验证(online-mode)服务器上,
/whitelist add <name>会通过 Mojang 的 API 解析名称。在离线模式(offline-mode)服务器上,它改为将名称的离线 UUID 加入白名单,因此无需手动编辑whitelist.json。 - 管理员默认绕过白名单,这就是为什么用你自己的账号永远验证不了白名单是否生效。请用第二个账号测试。
/ban 需要理由,而 /ban-ip 是另一份名单
/ban <player> [reason]
/ban-ip <address|player> [reason]
理由是可选参数,但省略它就是个错误——它是被封禁玩家看到的内容,也是未来的你在 /banlist 里试图回忆原因时读到的东西。没有理由的话,条目只会显示“Banned by an operator”。
/ban 和 /ban-ip 写入的是不同的文件(banned-players.json、banned-ips.json)。赦免其中一个并不会清除另一个,这就是“已被赦免”的玩家仍然无法连接的常见原因。请同时使用 /pardon 和 /pardon-ip。
OP 等级,而不只是 OP 名单
/op 默认授予 4 级,即完全访问权限,包括 /stop。这四个等级是真实存在的,可在 server.properties 中通过 op-permission-level 设置:
| 等级 | 授予权限 |
|---|---|
| 1 | 绕过出生点保护 |
| 2 | 大多数作弊命令、命令方块 |
| 3 | 玩家管理——kick、ban、op |
| 4 | 一切权限,包括 /stop |
只需要 /kick 和 /ban 的协管员应该给 3 级,而不是 4 级。给每个帮忙管理的人都发 4 级,账号一旦被盗,服务器就会被清空。
function-permission-level 是独立的,控制哪些数据包(datapack)函数可以运行——OP 等级为 4 而它却停留在 2,是“我的函数没反应”的常见原因。
名单类命令
/banlist players、/banlist ips 和单独的 /banlist 都存在;如果从服务器终端运行,它们会输出到控制台而不是聊天栏。/whitelist list 只显示名称,不显示 UUID——需要核对身份时请查看 whitelist.json。
在服务端管理命令生成器中按正确顺序填入参数即可生成上述任意命令,它在一个表单里涵盖了 ban、ban-ip、pardon、kick、op、deop 和 whitelist。