1. 为什么自建 Minecraft 服务器:从“文域”说起
1.1 一个真实的痛点
和朋友一起玩《我的世界》,最头疼的问题往往不是游戏本身,而是“怎么稳定地联机”。
官方领域服(Realms)虽然省心,但人数上限低、玩法受限,想要开放给更多人一起玩并不方便。自己用手机和电脑跨端联机更麻烦:Java 版走的是 Java 协议,基岩版走的是基岩协议,两个版本默认不相通。很多第三方服务器虽然能进,但玩法臃肿,加进一个服务器之后满屏都是氪金项目、圈地插件和花里胡哨的 RPG 系统,反而找不到最初“几个人一起创造世界”的感觉。
于是,越来越多玩家开始尝试自己搭建 Minecraft 服务器。本文介绍的「文域服务器」就是这样一类社区项目:主打纯净生存与创造两种模式,同时支持 Java 版和基岩版玩家进入,让不同设备上的伙伴可以在同一个世界里协作、建设、分享资源。
1.2 “文域”的共享理念
“文域”这个名字更像一种服务器规则的概括,而不是某个具体插件或商业产品。它的核心理念是:所有人共建共享,公共设施归集体所有,资源按需求分配,禁止破坏他人劳动成果。这种模式在很多 Minecraft 社区里也被称为“共享生存服”或“公共建设服”。
从技术角度看,要实现这样一座服务器,并不需要懂多高深的编程。核心需要解决三件事:
- 跨平台互通,让 Java 版电脑玩家和基岩版手机玩家能进同一个世界;
- 生存世界与创造世界隔离,保证不同玩法的玩家互不干扰;
- 资源分享与权限管理,让共享机制有章可循,不靠自觉硬撑。
这三件事都有成熟的开源方案,下面会逐步拆解。
1.3 本文你可以掌握什么
这是一篇完整的 Minecraft 服务器搭建教程,整个流程基于 Java 生态展开,适合有一定电脑操作基础、想运营小规模社区服务器的玩家阅读。读完本文,你将能够:
- 搭建 Paper 服务端,跑起一个纯净生存服务器;
- 安装 Geyser 与 Floodgate,让基岩版手机玩家无缝接入;
- 使用 Multiverse-Core 划分生存世界和创造世界;
- 使用 LuckPerms 管理玩家权限;
- 配置自动备份、后台运行和常见故障排查方法。
整个内容会从环境准备一直讲到运维落地,代码和命令均可直接复制修改后使用。
2. 总体架构与核心组件
2.1 服务端架构速览
先来看一眼整体架构,理解各个组件之间的关系:
Java 版玩家(电脑) ──TCP 25565──► Paper 服务端(Minecraft Java 服务端) │ 基岩版玩家(手机) ──UDP 19132──► Geyser 插件 ──► Paper 服务端- Paper是 Java 版服务端核心,负责世界生成、实体逻辑、方块变化,监听 TCP 25565 端口。
- Geyser是一个协议桥接插件,监听 UDP 19132 端口,把基岩版客户端的数据转换成 Java 版协议,再转发给 Paper。
- Floodgate是 Geyser 的配套插件,负责处理基岩版玩家的 UUID 和登录名,解决基岩版玩家没有 Java 正版账号的问题。
简而言之,Geyser 解决“协议不通”,Floodgate 解决“账号不通”。
2.2 为什么选择 Paper
搭建 Java 版服务器,服务端核心有很多选择:
- Vanilla:官方原版服务端,最纯净,但性能一般,插件支持有限;
- Spigot / Bukkit:老牌插件服务端,生态成熟,但性能和稳定性弱于 Paper;
- Paper:基于 Spigot 的分支,优化了大量性能问题,是目前社区最主流的服务端之一;
- Fabric / Forge:偏向模组玩法,不适合本文这种“纯净生存 + 插件管理”的需求。
选择 Paper 的理由很直接:性能好、插件生态丰富、兼容原版玩法,而且安装非常简单,适合新手。如果你的目标只是完全原版体验,也可以直接用 Vanilla,但不推荐,因为后续接基岩版和管理权限会麻烦很多。
2.3 核心组件清单
| 组件 | 作用 | 备注 |
|---|---|---|
| Paper | Java 版服务端核心 | 服务器的基础 |
| Geyser-Spigot | 基岩版协议桥接 | 让手机玩家能连上 Java 服 |
| Floodgate | 基岩版账号映射 | 配合 Geyser 使用 |
| Multiverse-Core | 多世界管理 | 生存/创造世界分离 |
| LuckPerms | 权限管理 | 分组、权限控制 |
| EssentialsX | 基础管理指令 | 传送、家、warp、聊天格式 |
| CoreProtect | 方块日志与回滚 | 防止破坏和纠纷 |
这些插件不会改变原版合成表、掉落物和数值,只会增强服务端的管理能力,仍然符合“纯净”的定位。
2.4 生存与创造如何共存
“纯净生存”和“创造模式”并不是互斥的。通过 Multiverse 创建多个世界,并给每个世界设置独立的游戏模式,就可以在一台服务器里同时提供两种体验:
- 生存世界:默认游戏模式为
survival,玩家正常收集资源、打怪、生存; - 创造世界:默认游戏模式为
creative,玩家可以飞行、使用无限方块建造; - 两个世界通过传送指令或传送门切换。
这种设计也很贴合“文域服务器”的目标:生存世界负责积累资源和协作生产,创造世界集中展示建筑成果。
3. 环境准备与版本选择
3.1 操作系统与硬件要求
服务器可以跑在很多环境上:
- 云服务器:推荐,有公网 IP,稳定在线;
- 家里的 Linux 主机或老电脑:适合小圈子联机;
- 本地 Windows / macOS 电脑:仅限内网测试。
如果面向公网开放,建议配置不低于 2 核 CPU、4G 内存、3Mbps 以上带宽。如果只是本机或内网几个人测试,1 核 2G 也能带动,但在线人数超过 5 人时会出现明显卡顿。
操作系统方面,本文示例以 Linux(Ubuntu / Debian / CentOS)为主,Windows 的操作逻辑类似,只是命令不同。
3.2 Java 版本选择与安装
Minecraft Java 版服务端就是一个 Java 程序,所以必须安装 JDK 或 JRE。
版本对应关系如下:
- Minecraft 1.18 及以下:Java 17 即可;
- Minecraft 1.20.x 系列:通常要求 Java 17 或更高;
- Minecraft 1.21 系列:推荐 Java 21。
先检查系统当前 Java 版本:
java -version如果未安装或版本过低,以 Ubuntu/Debian 为例安装 OpenJDK 17:
sudo apt update sudo apt install openjdk-17-jre-headlessCentOS/RHEL 使用 yum:
sudo yum install java-17-openjdk安装完成后再次执行java -version确认版本。
3.3 服务端核心下载
Paper 的下载页面会提供不同 Minecraft 版本对应的构建文件。本文以 Paper 1.20.x 为例演示,实际版本请根据你的需求选择。
在服务器上创建目录并下载:
mkdir -p /opt/mc-server cd /opt/mc-server # 这里的下载地址以你从 Paper 官网构建页获取的实际地址为准 wget https://example.com/paper-1.20.4.jar注意:Paper 小版本迭代很快,下载时认准官方构建页即可,文件名中的版本号以实际文件为准。
3.4 目录规划
建议创建独立系统用户来运行 Minecraft 服务端,避免权限过大:
sudo useradd -r -s /bin/false minecraft sudo mkdir /opt/mc-server sudo chown minecraft:minecraft /opt/mc-server后续所有操作都在/opt/mc-server目录下进行,这样备份、迁移、权限管理都方便。不要直接用 root 运行服务端,服务器一旦被入侵,root 权限会造成很大风险。
4. 搭建纯净生存服务器:从启动到首次连接
4.1 初始化 eula.txt
Minecraft 服务端首次运行前需要接受 EULA 协议。在/opt/mc-server目录下手动创建eula.txt:
eula=true如果不创建,启动一次后服务端也会自动生成一个eula.txt文件,只是默认值是eula=false,需要手动改成true才能继续。
4.2 server.properties 核心配置
server.properties是服务器最关键的配置文件,决定了端口、游戏模式、玩家上限等。以下是一个适合“纯净生存”的配置示例:
# Java 版连接端口,默认 25565 server-port=25565 # 服务器 MOTD,显示在多人游戏列表 motd=文域服务器 - 纯净生存与创造 # 默认游戏模式:survival=生存,creative=创造,adventure=冒险 gamemode=survival # 难度:peaceful/easy/normal/hard difficulty=normal # 最大在线玩家数 max-players=20 # 是否开启正版验证,建议 true online-mode=true # 出生点保护半径,防止新人进入时被破坏 spawn-protection=16 # 允许飞行 allow-flight=true # 是否启用下界/末地 allow-nether=true # 视距 view-distance=8 # 是否开启白名单,后续可按需开启 white-list=false这里需要重点说明online-mode:正版服开启true,能有效防止盗版账号冒名顶替。不过开启正版验证后,基岩版玩家接入需要配合 Floodgate 才能正常进入,后面第 5 节会详细讲。
4.3 编写启动脚本
为了避免每次输入一长串 Java 命令,建议写一个start.sh:
#!/bin/bash cd /opt/mc-server java -Xms1G -Xmx2G -jar paper-1.20.4.jar nogui给脚本加执行权限并启动:
chmod +x start.sh ./start.sh第一次启动会生成世界,等待控制台输出Done即为成功。类似日志如下:
[Server thread/INFO]: Done (5.231s)! For help, type "help"4.4 连接与基础验证
Java 版玩家打开游戏,进入多人游戏,添加服务器地址:
你的服务器IP:25565就能在服务器列表看到 MOTD。进入游戏后,在控制台输入以下命令验证:
list会返回当前在线玩家数量。输入:
say 欢迎来到文域服务器可以发送一条全服公告。
4.5 保持纯净:插件选择原则
“纯净”不代表不能装任何插件,而是不能改变原版玩法和数值。建议安装以下基础管理插件:
- EssentialsX:传送、家、warp、聊天格式;
- LuckPerms:权限管理;
- CoreProtect:方块日志和防破坏回滚。
这些插件不会影响原版体验,但能显著提升管理效率,也是后面实现资源共享和权限隔离的基础。
5. 基岩版接入:让手机玩家加入文域
5.1 Geyser 与 Floodgate 原理
许多玩家使用手机上的《我的世界》基岩版,但基岩版客户端无法直接连接 Java 版服务器,因为端口和通信协议完全不同。Geyser 相当于一个“协议翻译层”:
- 它监听 UDP 19132 端口;
- 收到基岩版客户端的连接后,把数据转换成 Java 版协议;
- 再交给 Paper 服务端处理。
Floodgate 则解决账号问题:当服务器开启正版验证时,基岩版玩家没有 Java 正版账号,默认会被拒绝。Floodgate 允许基岩版玩家使用自己的基岩版账号自动通过校验,并生成一套稳定的 UUID。
5.2 安装插件
将下载好的Geyser-Spigot.jar和floodgate-spigot.jar放入/opt/mc-server/plugins/目录,然后重启服务器。
cd /opt/mc-server/plugins # 将下载的文件放到这里 ls # Geyser-Spigot.jar floodgate-spigot.jar ./../start.sh重启后,插件目录下会生成:
plugins/Geyser-Spigot/config.yml:Geyser 配置文件;plugins/floodgate/key.pem:Floodgate 密钥文件。
Geyser 与 Floodgate 必须共用同一份密钥,官方插件默认会自动配置好,不需要手动干预。
5.3 Geyser 配置要点
打开plugins/Geyser-Spigot/config.yml,核心配置如下:
bedrock: # 基岩版监听端口 port: 19132 # 是否启用代理协议,单机部署一般不需要 enable-proxy-protocol: false remote: # 上游 Java 版服务端地址,本机部署就是 127.0.0.1 address: 127.0.0.1 port: 25565 # 认证方式:使用 floodgate 表示基岩版玩家由 Floodgate 处理 auth-type: floodgate如果 Paper 和 Geyser 部署在同一台机器上,remote.address保持127.0.0.1即可。如果分开部署,改为 Paper 服务端的内网 IP。
5.4 Floodgate 配置注意
Floodgate 安装后无需过多配置,但有两个注意点:
- 确保
server.properties中online-mode=true,Floodgate 才能正常发挥账号映射作用; - 基岩版玩家进入游戏后,默认名字会带一个点前缀(例如
.Steve),表示来自基岩版。这是 Floodgate 的默认行为,可以在配置中调整前缀显示,但本文不做展开。
5.5 手机端连接方法
手机打开《我的世界》基岩版,选择“服务器” -> “添加服务器”,填写:
- 服务器地址:你的服务器公网 IP
- 端口:19132
注意:基岩版连接必须使用 UDP 19132 端口,不要填 25565。如果无法连接,优先检查云服务器安全组是否放行 UDP 19132。
6. 生存与创造世界共存:多世界与权限管理
6.1 为什么要分世界
如果生存玩家可以在建筑区域随意破坏,服务器很快会乱套。把生存和创造分成两个世界,是公共服务器的常见做法:
- 生存世界:普通玩家活动区,保留原版生存体验;
- 创造世界:建筑师和创作者使用,拥有无限方块;
- 两者之间通过传送指令连接,互不干扰。
这样既保证生存玩家的游戏乐趣,又让创造玩家有发挥空间。
6.2 安装 Multiverse-Core 并创建世界
将Multiverse-Core.jar放入plugins目录并重启服务器,然后在控制台创建两个世界:
mv create world_survival normal mv create world_build normal第一条命令创建普通世界world_survival,第二条创建创造世界world_build。normal表示普通主世界环境,不含下界和末地。创建完成后设置主世界:
mv set spawn world_survival再单独把world_build设置为创造模式:
mv modify set gamemode creative world_build这样无论玩家从哪个入口进入,world_build世界都会强制使用创造模式。
6.3 分配生存与创造权限
这里使用 LuckPerms 来管理权限分组。先创建两个组:
lp creategroup survival lp creategroup builder给builder组配置进入创造世界的权限:
lp group builder permission set multiverse.world.world_build true lp group builder permission set essentials.fly true然后把玩家加入对应分组:
lp user Steve parent add survival lp user Alex parent add builder玩家在游戏内可以使用指令切换世界:
/mv tp world_build /mv tp world_survival如果希望普通玩家默认只能去生存世界,可以不给survival组分配multiverse.world.world_build权限,这样他们在指令进入创造世界时会被拒绝。
6.4 公共设施与资源共享实践
“文域”理念要落地,除了权限控制,还需要几个公共设施:
- 公共箱子仓库:在主城附近放置一批箱子,标注“公共资源池”,所有玩家可以存入多余物资,也可以按需领取;
- 公共农田和养殖场:所有玩家共享产物,避免重复开垦;
- 传送牌:使用 EssentialsX 的
/setwarp和/warp设置公共传送点。
公共设施最容易遇到的破坏问题是恶意玩家。建议安装 CoreProtect,它能把每个方块的放置、破坏记录写到日志里。发现破坏时,管理员可以回滚:
co rollback Steve t:24h这条命令会回滚玩家 Steve 最近 24 小时内的方块改动。公共服务器有这套日志,破坏成本会高很多。
7. 服务器运维与自动备份
7.1 后台运行:screen 或 systemd
直接运行./start.sh时,SSH 断开服务器就会停止。推荐使用 screen 保持后台运行:
sudo apt install screen screen -S mc cd /opt/mc-server && ./start.sh # 按 Ctrl+A 然后按 D 脱离会话,服务器继续运行重新进入控制台:
screen -r mc更规范的做法是使用 systemd 托管。创建/etc/systemd/system/minecraft.service:
[Unit] Description=Minecraft Server After=network.target [Service] User=minecraft WorkingDirectory=/opt/mc-server ExecStart=/usr/bin/java -Xms1G -Xmx2G -jar paper-1.20.4.jar nogui Restart=on-failure [Install] WantedBy=multi-user.target启用服务:
sudo systemctl daemon-reload sudo systemctl enable --now minecraft sudo systemctl status minecraft这样服务器崩溃后会自动重启,开机也会自动启动。
7.2 内存与 JVM 参数
内存分配主要取决于物理内存。-Xms是初始堆大小,-Xmx是最大堆大小。示例-Xms1G -Xmx2G适合 4G 内存机器。如果是 8G 内存且计划 20 人在线,建议:
java -Xms4G -Xmx4G -jar paper-1.20.4.jar noguiJVM 的更多调优参数(如垃圾回收器选择)可以查阅 Paper 官方文档,日常使用中优先保证稳定即可,不要在低配机器上盲目调大内存。
7.3 自动备份脚本
备份是数据安全的第一步。下面是一个简单的定时备份脚本backup.sh:
#!/bin/bash BACKUP_DIR=/opt/mc-backup WORLD_DIR=/opt/mc-server/world WORLD_NETHER=/opt/mc-server/world_nether WORLD_END=/opt/mc-server/world_the_end TIMESTAMP=$(date +%Y%m%d%H%M%S) mkdir -p "$BACKUP_DIR" # 打包世界数据,按你的实际世界目录调整 tar -czf "$BACKUP_DIR/mc-backup-$TIMESTAMP.tar.gz" \ -C /opt/mc-server \ world world_nether world_the_end # 保留最近 7 份备份,删除更早的 find "$BACKUP_DIR" -name "mc-backup-*.tar.gz" -mtime +7 -delete echo "[备份完成] $BACKUP_DIR/mc-backup-$TIMESTAMP.tar.gz"加入 crontab 定时执行:
crontab -e添加一行:
0 3 * * * /opt/mc-server/backup.sh每天凌晨 3 点备份一次,保留 7 天,足以应对大多数误操作和崩溃场景。
7.4 运维常用命令
控制台和游戏内常用的管理命令如下:
| 命令 | 作用 |
|---|---|
list | 查看在线玩家 |
say 文本 | 全服广播 |
save-all | 强制保存世界 |
stop | 安全关闭服务器 |
op 玩家名 | 设为管理员 |
deop 玩家名 | 取消管理员 |
whitelist add 玩家名 | 添加白名单 |
whitelist on | 开启白名单模式 |
建议每周执行一次save-all再备份,确保所有数据已经落盘。
8. 常见问题排查与处理思路
8.1 高频问题速查表
| 问题现象 | 常见原因 | 处理思路 |
|---|---|---|
| 服务端启动后秒退 | 未同意 EULA 或 Java 版本不匹配 | 检查 eula.txt 和 java -version |
| 提示内存不足或 OOM | Xmx 设置过小或物理内存不够 | 调大 Xmx,关闭其他进程 |
| Java 版无法连接 | 安全组未开放 TCP 25565 | 检查云平台安全组规则 |
| 基岩版无法连接 | UDP 19132 未放行或 Geyser 未启动 | 检查插件日志和安全组 |
| 基岩版玩家提示无法验证 | Floodgate 缺失或版本不匹配 | 确认 Floodgate 已安装并重启 |
| 创造世界无法飞行 | 未开启 allow-flight 或权限不足 | 设置 allow-flight=true,配置 essentials.fly |
| 玩家进服出生点被破坏 | spawn-protection 过小 | 合理设置出生点保护,安装 CoreProtect |
| 白名单玩家无法进入 | 白名单未添加 | 执行 whitelist add 玩家名 |
8.2 重点排查:基岩版连接不上
基岩版连不上是最常见问题,按以下顺序排查:
- 查看 Geyser 日志:
/opt/mc-server/logs/下是否有 geyser 相关输出; - 确认 Paper 已经加载 Geyser 插件:控制台输入
plugins,列表中应包含Geyser-Spigot; - 确认端口监听:
ss -ulnp | grep 19132如果能输出 java 进程监听,说明端口正常。
- 确认云安全组放行 UDP 19132;
- 确认手机基岩版版本与 Geyser 支持的协议版本匹配。基岩版客户端版本过旧或过新,都有可能导致连接失败。
8.3 重点排查:Java 版本错误
日志中出现类似UnsupportedClassVersionError或invalid target release时,基本可以断定 Java 版本过低。检查并切换版本:
java -version sudo update-altern