
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老牌插件服务端生态成熟但性能和稳定性弱于 PaperPaper基于 Spigot 的分支优化了大量性能问题是目前社区最主流的服务端之一Fabric / Forge偏向模组玩法不适合本文这种“纯净生存 插件管理”的需求。选择 Paper 的理由很直接性能好、插件生态丰富、兼容原版玩法而且安装非常简单适合新手。如果你的目标只是完全原版体验也可以直接用 Vanilla但不推荐因为后续接基岩版和管理权限会麻烦很多。2.3 核心组件清单组件作用备注PaperJava 版服务端核心服务器的基础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 人时会出现明显卡顿。操作系统方面本文示例以 LinuxUbuntu / 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 17sudo apt update sudo apt install openjdk-17-jre-headlessCentOS/RHEL 使用 yumsudo 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.txtMinecraft 服务端首次运行前需要接受 EULA 协议。在/opt/mc-server目录下手动创建eula.txteulatrue如果不创建启动一次后服务端也会自动生成一个eula.txt文件只是默认值是eulafalse需要手动改成true才能继续。4.2 server.properties 核心配置server.properties是服务器最关键的配置文件决定了端口、游戏模式、玩家上限等。以下是一个适合“纯净生存”的配置示例# Java 版连接端口默认 25565 server-port25565 # 服务器 MOTD显示在多人游戏列表 motd文域服务器 - 纯净生存与创造 # 默认游戏模式survival生存creative创造adventure冒险 gamemodesurvival # 难度peaceful/easy/normal/hard difficultynormal # 最大在线玩家数 max-players20 # 是否开启正版验证建议 true online-modetrue # 出生点保护半径防止新人进入时被破坏 spawn-protection16 # 允许飞行 allow-flighttrue # 是否启用下界/末地 allow-nethertrue # 视距 view-distance8 # 是否开启白名单后续可按需开启 white-listfalse这里需要重点说明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 help4.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.ymlGeyser 配置文件plugins/floodgate/key.pemFloodgate 密钥文件。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-modetrueFloodgate 才能正常发挥账号映射作用基岩版玩家进入游戏后默认名字会带一个点前缀例如.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 # 按 CtrlA 然后按 D 脱离会话服务器继续运行重新进入控制台screen -r mc更规范的做法是使用 systemd 托管。创建/etc/systemd/system/minecraft.service[Unit] DescriptionMinecraft Server Afternetwork.target [Service] Userminecraft WorkingDirectory/opt/mc-server ExecStart/usr/bin/java -Xms1G -Xmx2G -jar paper-1.20.4.jar nogui Restarton-failure [Install] WantedBymulti-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提示内存不足或 OOMXmx 设置过小或物理内存不够调大 Xmx关闭其他进程Java 版无法连接安全组未开放 TCP 25565检查云平台安全组规则基岩版无法连接UDP 19132 未放行或 Geyser 未启动检查插件日志和安全组基岩版玩家提示无法验证Floodgate 缺失或版本不匹配确认 Floodgate 已安装并重启创造世界无法飞行未开启 allow-flight 或权限不足设置 allow-flighttrue配置 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