「服务器」开服旅人

Intro

暑假闲得无聊,开个服和朋友们一块玩耍,借此机会记录下开服过程。

这次制作的是 1.20.1 原版纯净生存服。

*此篇碎碎念偏多,操作步骤省略程度看心情

预置环境:python 3.8及以上、Java JDK 11及以上

*须知:此篇文章仅可作为一个开服过程的记录,作为开服教程可能显得有些马虎。最有价值的地方个人认为在 自定义&功能性插件推荐 上,对于刚完成服务器基础配置的新服主和对遇到同样问题的服主有一定帮助,这一部分也会持续补充。

选择服务端

既然是原版服,那选服务端范围就界定在 1.20.1 官方端和衍生插件端了,fabric/forge端、mod插件端徒增算力,不考虑。

我个人意愿下不会用原版端(官方端),原因就在于它优化一般,在挂到 2C4G 云服务器配置下表现显著不如第三方插件端。而且论扩展性也不如插件端多。

之前开服的时候一直用的 Paper服务端。它仅提供插件加载服务,优化做的也不错,但是总是要尝试些新的东西对吧,于是我选择了 Purpur。对它我了解不多,也只是听说是Paper的优化分支,所以就尝试一下。

服务端基础安装并配置

我这里使用了github上 MCDReforged 项目(以后简称MCDR),它是一个基于 Python 的 Minecraft 服务端控制工具。可以在服务端之外再套一个壳,这样可以实现许多功能:

  1. 在服务端崩溃后自动重启服务器

  2. 在游戏内控制服务器重启,停服等操作

  3. 定时多槽位备份世界,并可由玩家/终端回档

*你可能纳闷这不是一个服务器自己应有的功能吗,怎么还需要第三方实现?但是Mojang就是这么懒。

用 pip 安装 MCDR:

pip install mcdreforged

等待安装成功,新建服务器文件夹并进入,运行指令以初始化 MCDR 的运行环境:

mkdir swarm

cd swarm

python -m mcdreforged init

然后就可以发现 MCDR 生成了如下路径结构

1
2
3
4
5
6
7
8
swarm/
├─ config/
├─ logs/
│ └─ MCDR.log
├─ plugins/
├─ server/
├─ config.yml
└─ permission.yml

将刚刚下好的purpur-1.20.1-xxxx.jar移至server文件夹里

MCDR 适用于多种服务端,因此要在swarm/config.yml里进行一些配置,来适配 Purpur 服务端环境

start_command:后将minecraft_server.jar改成purpur-1.20.1-xxxx.jar

handler: vanilla_handler改为 bukkit_handler

运行 MCDR 指令

python -m mcdreforged

这时候发现服务端启动不成功,是因为你没有同意此服务端协议:

1
2
3
4
5
6
7
[Server] [WARN]: Failed to load eula.txt
[Server] [INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
[MCDR] [MainThread/INFO]: Server process stopped with code 0
[MCDR] [MainThread/INFO]: Server stopped
[MCDR] [MainThread/INFO]: Stopping MCDR
[MCDR] [MainThread/INFO]: Stopping advanced console
[MCDR] [MainThread/INFO]: bye

server文件夹的eula.txt里的false 改为true ,即同意第三方插件端提供的服务。

再次启动 MCDR

不出意外的话服务器正常加载并运行:

1
2
3
[Server]: Running delayed init tasks
[Server]: Done (10.564s)! For help, type "help"
>

到这里你的服务器其实已经是运行中的了,如果你像我一样挂载到云服务器,告诉别人你的公网IP,其他人就可以直接进入并游玩。

但是也就是仅仅能玩。如上所说定时存档、崩溃自启、回档等功能均无法实现,均需要MCDR下的插件。下面是插件对应的功能:

  1. Crash restart 在服务端崩溃后自动重启服务器的插件

  2. StartStopHelperR 游戏内开关服

  3. Quick Backup Multi 多槽位备份/回档插件

  4. Timed QBM 一个QuickBackupM插件的扩展,用于定时触发QBM从而进行自动备份

插件安装比较简单,直接扔到swarm/plugins即可,配置过程也省略,阅读相应文档即可。

*以上插件及对应文档均可在 MCDR 插件仓库找到

阅读相应插件对应文档并配置好后,再次启动 MCDR 。恭喜你,将它打包上传到云服务器,一个基本满足需求的服务器便诞生了。

自定义&功能性插件推荐

开服之后,个人建议需要更改的几个点:

swarm/server/server.properties文件是储存服务器所有设置的文件,使用IDE可以修改,我修改了如下几点:

  1. difficulty 定义服务器的游戏难度。

  2. max-players 服务器同时能容纳玩家的最大数量,能有效控制服务器运存

  3. motd 本属性值是玩家客户端的多人游戏服务器列表中显示的服务器信息,显示于名称下方,且支持格式化代码

  4. online-mode 即是否开启正版验证,默认开启。如若关闭,则可认为所有知晓服务器IP的玩家都可进入服务器,建议关闭后开启白名单配合使用。以防止服务器被扫,陌生玩家进入服务器的危险情况。

  5. white-list 服务器白名单,默认关闭。建议在online-mode关闭时开启

  6. server-port 服务器端口号,默认为25565。建议修改为其他数目(1-65534之间的整数)可以一定程度上减少服务器被扫的次数。

更详细的内容详见 Server.Properties Fandom Wiki。

此外服务器还可以设置一个图标,他能够显示在多人游戏的列表中

上述的服务器配置似乎已经满足日常需求,但实则不然,在游玩时还会遇到许多问题。本人在先前建服游玩的过程中,共积攒了如下问题(见后)

幸运的是,这些问题已都有先例,也就是说有现成的插件来解决,而我做的只是稍作配置拿来用就可以了,并且分享在这里。(再次感叹社区力量的强大)

Q: 如果你的云服务器规模较小,那么它的地图加载速度将会慢的可怜,游戏中跑图,飞行经常会触碰到世界边界。

A: 「Chunky」可以以出生点为轴心预加载地图,很大程度减少遇到世界边界的问题

Q: 如果关闭了服务器正版验证,进入服务器会有弹窗警示,十分影响游玩观感

A: 「SystemChat」屏蔽了弹窗

Q: 服务器中遇到熊孩子,偷窃物品等问题无法查明肇事人,就算是作为腐竹也无能为力

A: 「CoreProtect」实时监控世界中方块/物品变化动态,可以由服务器管理员随时查询

Q: 新版服务器中tab键补全掺杂着太多不必要选项

A: 「CommandWhitelist」自定义tab键补全白名单

Q: 给予普通玩家一定的指令权限,如/locate指令

A: 「Groupmanager」权限管理器

Q: 非正版玩家想在服务器内显示自定义皮肤

A: 「SkinsRestorer」内建服务器皮肤资源管理器

将下载好的xxxx.jar文件扔到swarm/server/plugins文件夹里即可,配置方面请查看各插件文档并按需配置。

注意swarm/server/plugins中的插件是 Spigot/Bukkit 插件,后缀名为.jar,由 Purpur 服务端加载运行。而swarm/plugins中的插件是 MCDR 插件,后缀名为.py.mcdr,由 MCDR 加载运行,请注意甄别。

*本教程插件的配置及推荐均强调“功能”插件,对于服务器的“优化”提的不多,是因为优化服务器的方法十分多样,而且不同规模的服务器优化方式不同,优化程度也没有“上限”之说。如想了解推荐这篇文章

写到这里,我制作服务器的基本流程也就结束了。整个过程中参考的文档网址将放在下侧,虽然只是日记式的记录,但希望多少对读者有一些帮助!

*这是我的第一篇markdown文本,如排版语法不规范,请见谅!


「服务器」开服旅人
http://example.com/2023/07/10/A_MinecraftServer_Traveler/
作者
Chadwick Wang
发布于
2023年7月10日
许可协议