Minecraft 基岩版开服指南

此教程仅仅是一个简单的入门教程。更多补充信息可在 Minecraft Wiki在新窗口打开MineBBS在新窗口打开 中寻找答案或者提问。
此文不建议毫无经验的小白用户阅读。
此指南针对的是 基岩版 用户,如果您是 Java 版 用户,请查看 Java 版局域网联机 页面。

目前基岩版服务器有多种核心可用:

  1. Bedrock Dedicated Server (BDS) 由微软官方开发,与所有平台的 Minecraft 基岩版有几乎相同的核心,目前可以全平台联机,适合原版生存
    官方下载在新窗口打开

  2. Nukkit (NK) 由第三方独立开发的开源核心,插件生态优于 BDS。
    由于功能不完整不适合原版生存,适合搭建各类安装插件的服务器 (如小游戏服务器),性能通常优于 PMMP。

    因为 Nukkit 初始项目已经弃坑, Nukkit 有较多分支项目,通常您只需选用最顺眼的那个:

  3. PocketMine-MP (PMMP) 由第三方独立开发的老牌开源核心,用于创建高度自定义的服务器。
    由于功能不完整不适合原版生存,适合搭建各类安装插件的服务器,使用 PHP 实现。

    官方文档在新窗口打开

BDS on Windows

开服之前

  1. 准备一个可用的 Sakura Launcher 或者 frpc
  2. 下载最新版本的 BDS-Windows 核心在新窗口打开
  3. 一台装载着 Windows 10 1703Windows Server 2016 或更高版本的操作系统的电脑 (官方文档建议)
  4. 准备一台 CPU 核心数不低于 2 核,并配有不低于 1GB RAM 的电脑

开服配置

解压 BDS 压缩包后,可以在根目录下看到配置文件 server.properties

我们可以通过更改配置文件来达到初始化世界的目的。

配置文件注释

提示

表中所填数据均为缺省值

server-name = Dedicated Server
# 服务器名称

gamemode = survival
# 为新玩家设置游戏模式
# 允许值: 
#   生存: survival
#   创造: creative
#   冒险: adventure

difficulty = easy
# 设定世界的难度
# 允许值: 
#   和平: peaceful
#   简单: easy
#   普通: normal
#   困难: hard

allow-cheats = false
# 是否允许使用类似命令的作弊手段。
# 允许值: 
#   是: true
#   否: false

max-players = 10
# 服务端上可以同时在线的最大玩家数。
# 允许值: [1, ∞]

online-mode = true
# 是否对所有连接的玩家进行 Xbox Live 身份验证。
# 无论此设置如何,连接到远程 (非本地) 服务端的客户端将始终需要 Xbox Live 身份验证。
# 如果服务端接受来自互联网的连接,则强烈建议启用联机模式。
# 允许值: 
#   是: true
#   否: false

allow-list = false
# 是否启用白名单模式
# 如果值为 true,则必须在 allowlist.json 文件中列出所有连接的玩家。
# 仅对 BDS 1.18.10 及更高版本有效,更低版本请使用下方的 white-list 配置项。
# 当此项不存在时服务端将使用 white-list 项的设置。
# 允许值:
#   是: true
#   否: false

# white-list = false
# 是否启用白名单模式
# 如果值为 true,则必须在 whitelist.json 文件中列出所有连接的玩家。
# 用于 BDS 1.18.10 以下版本,使用时应删除上方的 allow-list 配置项和 white-list 前的 #。
# 允许值:
#   是: true
#   否: false

server-port = 19132
# 服务端应监听哪个IPv4端口。
# 允许值: [1, 65535]

server-portv6 = 19132
# 服务端应监听哪个IPv6端口。
# 允许值: [1, 65535]

enable-lan-visibility = true
# 是否使服务器在局域网 (好友界面) 可见
# 仅在 1.19.50 及更高版本的服务端中生效。
# 允许值:
#   是: true
#   否: false

view-distance = 32
# 允许的最大视距 (以方块数为单位) 。
# 允许值: [1, ∞]

tick-distance = 4
# 停止加载区块的距离
# 允许值 : [4, 12]

player-idle-timeout = 30
# 挂机玩家被踢出的时间
# 允许值: [0, ∞]

max-threads = 8
# 服务端使用的最大线程数,如果设置为0,服务端会尽可能多地使用所有线程。
# 允许值: [0, ∞]

level-name = Bedrock level
# 世界名称以及文件夹名

level-seed = 
# 为世界定义一个种子
# 缺省值为随机

default-player-permission-level = member
# 新玩家的游戏模式
# 允许值: 
#   游客: visitor
#   会员: member
#   管理员: operator

texturepack-required = false
# 强制客户端加载服务端资源包
# 允许值:
#   是: true
#   否: false

content-log-file-enabled = false
# 启用将会使错误内容记录到日志文件中
# 允许值:
#   是: true
#   否: false

compression-threshold = 1
# 要压缩的原始网络有效负载的最小大小
# 允许值 : [0, 65535]

compression-algorithm = zlib
# 网络连接使用的压缩算法
# 允许值:
#   zlib 算法: zlib
#   Snappy 算法: snappy

server-authoritative-movement = server-auth
# 设置服务端对于玩家移动行为的验证方式
# 允许值:
#   不验证: client-auth
#   验证但不处理冲突: server-auth
#   验证且冲突时以服务端为准: server-auth-with-rewind

player-position-acceptance-threshold = 0.5
# 玩家移动出现差异时允许的差异值上限。高于 1.0 将增加作弊概率。
# 仅在 server-authoritative-movement 选项的值为 server-auth-with-rewind 时生效
# 允许值: [0, ∞]

player-movement-action-direction-threshold = 0.85
# 玩家视角角度值和攻击方向角度值之间允许的差异值
# 设为 1 时不允许出现差异,设为 0 时差异可以高至 90 度。
# 允许值: [0.0, 1.0]

# player-movement-score-threshold = 20
# 报告异常行为之前所需的数据不一致的数量。
# 低版本服务端配置项
# 仅在 server-authoritative-movement 选项开启时生效

# player-movement-distance-threshold = 0.3
# 在检测到异常行为之前,服务端与客户端数值之差。
# 低版本服务端配置项
# 仅在 server-authoritative-movement 选项开启时生效

# player-movement-duration-threshold-in-ms = 500
# 服务端和客户端位置的时间长度可能不同步 (在 server-authoritative-movement 选项为"false"时失效)
# 在异常移动计数增加之前。 此值以毫秒为单位定义。
# 低版本服务端配置项
# 仅在 server-authoritative-movement 选项开启时生效

# correct-player-movement = false
# 是否在移动值超过阈值时,将客户端的玩家位置校正为服务端玩家的位置。
# 低版本服务端配置项
# 允许值:
#   是: true
#   否: false

server-authoritative-block-breaking-pick-range-scalar = 1.5
# 启用服务端权威性挖掘的选取范围
# 服务端与客户端同步计算挖掘,并且更正与服务端计算不符的非法挖掘时的计算范围。
# 允许值: [0, ∞]

# server-authoritative-block-breaking = false
# 启用服务端权威性挖掘
# 低版本服务端配置项
# 如果值为 true ,则服务端将与客户端同步计算挖掘,并且更正与服务端计算不符的非法挖掘
# 允许值:
#   是: true
#   否: false

chat-restriction = None
# 是否限制玩家聊天
# 仅在 1.19.20.02 及更高版本的服务端中生效。
# 允许值:
#   不限制: None
#   部分限制: Dropped
#   完全限制: Disabled

disable-player-interaction = false
# 是否禁用玩家间交互
# 仅在 1.19.20.02 及更高版本的服务端中生效。
# 允许值:
#   是: true
#   否: false

client-side-chunk-generation-enabled = true
# 是否允许客户端自行生成区块
# 仅在 1.19.41 及更高版本的服务端中生效。
# 允许值:
#   是: true
#   否: false

block-network-ids-are-hashes = true
# 是否使服务端发送散列的方块网络 ID,这些 ID 不会被随意更改
# 设为 false 时,将发送从 0 开始递增的 ID。
# 仅在 1.20.10.20 及更高版本的服务端中生效。
# 允许值:
#   是: true
#   否: false

disable-persona = false
# 是否禁用角色
# 原版 server.properties 文件中提到此项配置 "仅供内部使用",且没有更多注释,禁用与否可能对实际游戏没有影响。
# 仅在 1.20.10.20 及更高版本的服务端中生效。
# 允许值:
#   是: true
#   否: false

disable-custom-skins = false
# 是否在服务器范围内禁用指定指定皮肤
# 仅在 1.19.30 及更高版本的服务端中生效。
# 允许值:
#   是: true
#   否: false

server-build-radius-ratio = Disabled
# 是否根据覆盖比率的多少来生成玩家的视距,不考虑客户端的硬件功能
# 设为 false 时,将由服务器动态计算玩家的视距多少。
# 仅在 client-side-chunk-generation-enabled 配置项启用时生效
# 仅在 1.20.10.20 及更高版本的服务端中生效。
# 允许值:
#   启用: [0.0, 1.0]
#   禁用: Disabled

allow-outbound-script-debugging = false
# 是否启用用于 Script 相关功能的 connect 命令
# 只有设为 true 时,script-debugger-auto-attach 配置项的 connect 值才能生效。
# 允许值:
#   是: true
#   否: false

allow-inbound-script-debugging = false
# Allows script debugger 'listen' command and script-debugger-auto-attach=listen mode.
# 是否启用用于 Script 相关功能的 listen 命令
# 只有设为 true 时,script-debugger-auto-attach 配置项的 listen 值才能生效。
# 允许值:
#   是: true
#   否: false

script-debugger-auto-attach = disabled
# 是否尝试启用并适配加载世界时的 Script 调试器
# Attempt to attach script debugger at level load, requires that either inbound port or connect address is set and that inbound or outbound connections are enabled.
# 允许值
#   禁用: disabled
#   启用连接模式: connect
#   启用监听模式: listen

注意

数据压缩如果阈值过低,压缩会占用 CPU ,而开太高会导致流量消耗过快,请自行权衡

可选配置

level-type = DEFAULT
# 世界的类型
# 允许值: 
#   DEFAULT 无限
#   LEGACY 有限 (仅在 1.18 前可用)
#   FLAT 超平坦

world-type = 
# 是否开启教育版,实验性玩法
# 可用值: 未知

trusted-key =
# 服务端所信任的公钥,拥有该公钥的玩家不进行Xbox身份验证,但其昵称必须在白名单内
# 可出现多行

emit-server-telemetry = true
# 是否启用服务器遥测功能
# 启用后,将把服务端部分数据发送至 Mojang,以帮助其改善游戏。效果与各平台常见的 "用户体验改进计划" 相似。
# 仅在 1.19.1.01 及更高版本的服务端中生效。
# 允许值:
#   是: true
#   否: false

隧道配置

协议本地端口(默认)远程端口
UDP19132任意

请根据 server.propertiesserver-port 项的值设置本地端口。

注意事项

隧道相关

  1. 使用 frpc 时,除非配置本地端口与远程端口一致,否则 MOTD 信息将无法正常显示。
  2. 基岩版服务端客户端使用的 UDP 通信协议不支持 SRV 解析。
  3. BDS 服务端不支持 UDP 隧道的 Proxy Protocol,但启用它 (v2) 不影响正常进入服务器。

解除本地回环的连接限制

如果您想同时在一台电脑上运行服务端和客户端,并且想通过客户端直接连接本地的话,可能会遇到一些问题:某些 Windows 版本默认不允许 UWP 应用形成本地回环,需要手动解除限制。

请使用管理员权限在 PowerShell 中执行以下命令并重启电脑:

CheckNetIsolation.exe LoopbackExempt –a –p=S-1-15-2-1958404141-86561845-1752920682-3514627264-368642714-62675701-733520436

BDS on Linux

开服之前

  1. 一个可用的 frpc
  2. 最新版本的 BDS-Linux 核心在新窗口打开
  3. 一台装载着 Ubuntu 18.04 或更高版本的操作系统的电脑
  4. CPU 核心数大于等于 2 核,1GB RAM

开服配置

请参考 BDS on Windows 章节中的 开服配置

注意事项

注意

Linux下无法同时运行多个服务端

RHEL 8 可能缺少 libnsl 包,此时服务端将无法正常启动

请使用以下命令进行安装:

sudo dnf install -y libnsl

NUKKIT on Linux

开服之前

  1. 准备一个可用的 frpc
  2. 准备最新版本的 NUKKIT bedrock 核心(请自行上网下载)
  3. 准备一台安装好 Java 环境的 Linux 主机

开服配置

配置文件注释

请参考 BDS on Windows 章节中的 配置文件注释

安装 JAVA

Ubuntu / Debian
sudo apt update
sudo apt install openjdk-8-jre-headless -y
Fedora / RHEL
sudo yum update
sudo yum install java -y

BDS 核心进阶教程

白名单

可以直接在服务端控制台用如下指令编辑白名单:

在 1.18.10 及更高版本,使用:

指令作用说明
allowlist add "Example Name"根据昵称添加白名单无法使用实体选择器的 '@a' 选项
allowlist remove "Example Name"根据昵称移除白名单无法使用实体选择器的 '@a' 选项
allowlist list输出 allowlist.json 的内容

在 1.18.2 及更低版本,使用:

指令作用说明
whitelist add "Example Name"根据昵称添加白名单无法使用实体选择器的 '@a' 选项
whitelist remove "Example Name"根据昵称移除白名单无法使用实体选择器的 '@a' 选项
whitelist list输出 whitelist.json 的内容

您可以直接在 allowlist.jsonwhitelist.json 里编辑白名单:

[
    {
        "ignoresPlayerLimit": false, // 是否无视玩家上限 (即使服务器满员该玩家也可进入)
        "name": "MyPlayer"
    },
    {
        "ignoresPlayerLimit": false,
        "name": "AnotherPlayer",
        "xuid": "123456789"          // 其中 xuid 和昵称有一个就可以,该玩家第一次登入的时候会自动补全
    }
]

规则管理

配置文件热更改

如果想在服务器正常运行的情况下修改配置文件的内容,可以通过以下指令管理规则:

指令作用
changesetting allow-cheats true允许作弊
changesetting allow-cheats false禁止作弊
changesetting difficulty peaceful游戏难度设为和平
changesetting difficulty easy游戏难度设为简单
changesetting difficulty normal游戏难度设为普通
changesetting difficulty hard游戏难度设为困难

peaceful easy normal hard 分别可用 0 1 2 3 代替。

白名单热更改

指令作用
allowlist on开启白名单
allowlist off关闭白名单
allowlist list打印 allowlist.json 内容
allowlist reloadallowlist.json 内容重新加载到内存

管理 OP

如果 OP 想在游戏内使用指令,则必须开启允许作弊的选项 (allow-cheats = true)

可以通过以下指令编辑权限:

指令作用说明
op "example players"添加权限无法使用实体选择器的 '@a' 选项
deop "example players"剥夺权限无法使用实体选择器的 '@a' 选项
permission list打印 permission.json 内容
permission reloadpermission.json 内容重新加载到内存

踢出用户

指令作用说明
kick "example players"踢出用户无法使用实体选择器的 '@a' 选项

关闭服务器

指令作用说明
stop软关闭服务器如果服务器存档较大,可能需要几分钟

备份服务器

指令作用说明
save hold服务器做备份准备它是异步的,并将立即返回。
save query查询备份准备进度返回准备进度,它将返回需要复制的文件的文件列表。
save resume删除旧文件当您完成文件的复制时,您可调用这个函数来告诉服务器删除旧文件。

游戏参数修改

在根目录下会有一个行为包目录 behavior_packs,可以通过修改这个文件来达成修改游戏数据的目的。

其中有多个小文件,名称上带有 experience 或者 developing 的是实验性行为包,如果没有开启实验性玩法的话是不用修改这个文件夹里的内容的。

资源包与行为包装载

注意

基岩版的资源包与行为包的对应关系是具体到某个世界的。如果想让玩家使用资源包与行为包,需要以下工序。

  1. 使用客户端创建一个世界,创建时勾选想用的资源包、行为包。

  2. 创建并进入世界后退出,找到这个世界的文件夹目录。对于 Android 外部存储,该目录通常为 'storage/emulated/0/Android/data/com.mojang.minecraftpe/files/games/com.mojang/minecraftWorlds'

  3. 将以下文件与文件夹拷贝到服务器所用存档的根目录,即 /worlds/Bedrock level/

    • behavior_packs/
    • resource_packs/
    • world_behavior_pack_history.json
    • world_behavior_packs.json
    • world_resource_pack_history.json
    • world_resource_packs.json
  4. 行为包 会强制玩家使用。如要强制所有人使用资源包,则需在 'server.properties' 中开启相应选项: texturepack-required = true

  5. 玩家进入服务器时,会自动对比 服务器所用资源包的 UUID 列表本地拥有的资源包的 UUID 列表。如果不匹配,将会通过游戏端口下载对应缺失包。为节省流量并避免服务器性能受影响,建议将所用资源包与行为包提前下发给玩家。

BDS 系基岩版服务端/拓展工具

注意

其中部分是通过反编译以达成修改的目的, 并不符合 EULA, 请慎用。