我的世界基岩服务器升级

 

本文首发于个人B站专栏:https://www.bilibili.com/opus/958794776765792258

1. 前言

PC端启动Minecraft Launcher后进入基岩版我的世界,如果有更新会自动更新到最新版本,更新后再连接自己部署的游戏服务器,则会无法连接并提示“主机使用的是较旧版本的《我的世界》。每个人都应该更新到最新版本的《我的世界》,然后重试。”

old

操作环境:

  • 本地系统:Windows
  • 服务器部署环境:Ubuntu 20.04 server 64bit
  • SSH远程连接工具:FinalShell
  • 升级版本:基岩版1.21.0.03 升级至 1.21.3.01

 

这次是第二次升级,上次升级是从1.20升级到1.21,在网上看了好几篇教程,有些写的比较简略,但总体操作下来也没出什么差错,但后续游戏版本肯定还会继续更新,写下这篇笔记主要是为了以后升级时自己能拿来参考。但既然都写下markdown了,干脆直接写详细点直接挂网上和个人wordpress上。因此,这边笔记会写的尽可能细,非程序员应该也能看懂怎么操作。

 

2. 停服备份

(1)首先通过以下命令查找MC服务器的PID(进程号),如下图中“./bedrock_server”就是基岩服务器进程,而“4165432”则是PID进程号。

ps -ef | grep server

grep

 

(2)通过以下命令 kill -9 PID,结束对应的服务

# 注意,下面要用自己查找出来的 PID
kill -9 4165432

此时再通过 ps -ef | grep server 查找会发现,原来的 ./bedrock_server 没显示了,说明游戏已经被停服了

kill

 

(3)找到游戏服务器所在的路径,如我的游戏服务器文件放置在 /opt/mcbe

mc_dir

如果忘记自己的服务器部署的位置,可以尝试用以下命令查找,下图红框部分就是结果。

# 从根目录开始搜索,查找 bedrock_server 文件
find / -name "bedrock_server"   # 记得双引号

find_dir

 

(4)使用 cp 命令备份整个游戏文件夹,这一部其实也可以不做,主要是为了待会覆盖文件时如果出现异常也不至于丢失数据。

# 复制整个文件夹,副本文件夹名称为 mcbe_bak
cp -r /opt/mcbe /opt/mcbe_bak

 

(5)重命名 mcbe 文件夹。解释:待会下载的新版本服务器文件将解压成为新的 mcbe 文件夹,仅将配置文件和地图从旧的 mcbe 文件夹中覆盖过去。

“换基底”:类似于我升级微信,仅升级了微信软件的功能,但我的个人数据则直接迁移到新版本的微信中。

# 将 mcbe 文件夹 改名为 mcbe_old  (前提:原先不存在名为 mcbe_old的文件夹)
cd /opt  # 回到 mcbe 所在的父级文件夹路径下
mv mcbe mcbe_old 

 

3. 下载新版本服务器文件

(1)打开网址:基岩版服务器下载 | Minecraft

由于网易代理了国区,所以国内IP打开都会提示跳转到网易的网站,我们选择留在当前页面即可。

tip

(2)复制下载链接。在下载按钮处右键,选择“复制链接地址”,操作流程如下图:

copy

(3)在finalshell中 使用 wget 命令下载。(如果没有安装 wget 可以是使用 sudo apt install wget 命令安装。)

执行命令前记得进入用于存放游戏文件的目录下,如我游戏文件存放于 /opt 下的 mcbe 文件夹, 即应该先通过 cd /opt 命令进入和游戏文件夹所处的同一级。

cd /opt
# 下面的网址记得换掉,不然就下载成老版本的了。
wget https://minecraft.azureedge.net/bin-linux/bedrock-server-1.21.3.01.zip

wget

题外话:如果使用wget下载速度过慢,如何强行停止下载?停止下载后要干什么?

ctrl + c 强行停止下载。停止后删除掉下载一半的文件:rm [文件名]

 

如果上一步 wget 下载不了,也可以在本机上下载压缩包后上传到服务器后再解压。

打钩,下载

down

将下载后的 zip文件拖动到服务器的文件列表中(部分SSH工具可能不支持)

 

(4)解压

由于下载下来的文件是 zip,这里要用到 unzip 命令,这里简单介绍一下。

语法:unzip [-d] 参数

  • -d,指定要解压去的位置
  • 参数,被解压的zip压缩包文件

由于我游戏文件存放在 mcbe 文件夹中,因此我要将 压缩包解压到这个文件夹里。但我们刚刚重命名了原来的 mcbe 文件夹为 mcbe_old,所以需要再创建一个新的 mcbe 文件夹。

# 创建 新的 mcbe 文件夹
mkdir /opt/mcbe 

# 解压 zip压缩包到 mcbe 文件夹内
unzip bedrock-server-1.21.3.01.zip -d /opt/mcbe

解压完毕,文件夹内容如图:

newMcbe

 

4. 迁移数据

接下来就该从旧的游戏服务器文件夹 mcbe_old 将 我们的配置,地图迁移到新的文件夹mcbe中了。

需要从 mcbe_old 迁移的文件和文件夹包括:

  • worlds (地图文件夹)
  • permissions.json(用户权限,设置了哪些人为管理员)
  • server.properties(游戏配置文件)
  • allowlist.json(白名单,哪些人可以进入服务器。如果在server.properties中设置了 allow-list=true 则需要同步,否则不需要)
  • behavior_packs(行为包,如果没有自己安装mod就不用)
  • resource_packs(资源包,如果没有自己安装mod就不用)

 

移动文件和文件夹还是会用到刚刚所说的 mv 命令,语法如下:

mv 参数1 参数2

  • 参数1:被移动的文件或文件夹
  • 参数2:要移动去的地方,如果目标不存在,则进行改名

 

执行命令:

# 以下命令以 当前命令行位于 /opt 为例,可以用 pwd 命令查看目前命令行位于哪里

mv mcbe_old/worlds mcbe/  # 解释:将地图文件夹从 mcbe_old/worlds 移动到 新的服务器文件夹 mcbe 下。下同
mv mcbe_old/permissions.json mcbe/
mv mcbe_old/server.properties mcbe/

# 如果需要移动 behavior_packs 等其他文件和文件夹,仿照上面即可

 

5. 启动服务器

(1)首先进入到游戏服务器文件夹内:

cd /opt/mcbe

 

(2)执行以下命令。该命令不会在前台输出内容,同时也不会占用前台输入,并将服务器的实时日志输出到 /opt/mcbe/log.txt 中。

nohup bash -c 'LD_LIBRARY_PATH=. ./bedrock_server' >> /opt/mcbe/log.txt 2>&1 &

run

执行后可以看到输出了一串数字,这个是PID,可以用于结束服务器,正如本文开头所提到的。

 

启动后日志内容:

log

 

(3)接下来就可以顺利进入服务器了

enter

 

6. 收尾

确认游戏服务器可以正常进入并运行后,就可以选择性删除不需要的旧版本数据和备份文件夹了:

(1)删除旧的游戏文件夹和备份文件夹

rm -rf /opt/mcbe_old

rm -rf /opt/mcbe_bak

(2)删除已经解压完的压缩包

rm -f /opt/bedrock-server-1.21.3.01.zip