掘金 后端 ( ) • 2024-03-29 18:38

Minecraft(我的世界)应该算是最有名的沙盒游戏之一了。它最初于 2009 年发布,让玩家可以在一个由方块构成的3D生成世界中建造、探索、制作和生存。截至 2022 年初,它已成为史上销量最高的游戏(现在还是不是,暂时还没求证,如果你知道的话,请在评论区告诉我)。

在本教程中,我将带你将创建自己的《我的世界》(Minecraft)服务器,让你可以和你的朋友在同一个世界中一起建造、探索。具体来讲呢,就是你将要安装运行《我的世界》(Minecraft)所需的软件包,配置服务器运行,然后部署游戏。

不用担心,这个教程非常简单,只要你跟着做,即便不熟悉技术也能搞定!因为要输入什么命令行,我都已经给写在里面了,直接使用就行。当然,也科普了一下部分命令行的原理,授人以渔。

注意,本教程使用的是 Minecraft 的 Java 版本。如果你通过 Microsoft 应用商店购买的 Minecraft 版本,那么你将无法基于本教程连接到此服务器。在 PlayStation 4、Xbox One 或 Nintendo Switch 等游戏机上购买的 Minecraft 的大多数版本也是 Microsoft 版本的。这些游戏机也无法连接到本教程中构建的服务器。你可以点击这里从官方获取 Minecraft的Java版本

另外,如果你没有耐心自己操作,你还可以使用 DigitalOcean 的“一键式Minecraft:Java 版服务器”作为另一个安装途径。这个方式会比教程更快,一键安装。

让我们开始吧!

准备工作

为了你能顺利跟上本教程的步骤,你需要这些:

  1. 一台装有最新 Ubuntu 的服务器,一个具有 sudo 权限的非 root 用户,并启用了 SSH。你可以在注册 DigitalOcean 云服务之后,阅读这份指南来初始化你的服务器并完成这些步骤。Minecraft 可能会占用大量资源,因此在选择服务器大小时请牢记这一点。如果您使用的是 DigitalOcean 云服务并需要更多资源,可以随时调整 Droplet 的大小以添加更多 CPU 和 RAM。
  2. 在本地 Mac、Windows 或 Linux 计算机上安装 Minecraft Java Edition 副本

好了,接下来就是构建自己的 Minecraft 服务器的步骤,也是本文后续要讲的:

  • 安装必要的软件包并配置防火墙
  • 下载最新版本的 Minecraft
  • 配置和运行 Minecraft 服务器
  • 如何保持 Minecraft 服务器运行
  • 从 Minecraft 客户端连接到你的服务器

第一步:安装必要的软件包并配置防火墙

在刚刚说的准备工作中,你应该已经初始化你的服务器了。接下来,第一步是安装 Java;你需要它来运行 Minecraft。

首先,如果你使用的是 DigitalOcean 的服务,那么在登录自己的账号之后,点击界面中的 Console,就可以进入服务器的终端,然后输入接下来本文给出的命令行即可。如果你是使用别的服务器,那么请按照平时的操作流程来输入命令行。

默认情况下,Ubuntu 22.04 提供的 Java 版本不足以运行最新版本的 Minecraft。所幸,有第三方继续为较旧的 Ubuntu 版本构建更新的 Java 软件包,你可以通过将他们的 PPA(个人软件包存档)添加到自己的软件包源列表中来进行安装。你可以使用以下命令来做到这一点:

sudo add-apt-repository ppa:openjdk-r/ppa

接下来,更新软件包:

sudo apt update

屏幕出现提示确认的时候,按 Y 键。如果提示重新启动任何服务的时候,按 ENTER 接受默认的选项并继续。

最后,安装 Java 的 OpenJDK 17 Headless JRE。这是一个最小版本的 Java,移除了对 GUI 应用程序的支持。这使得它非常适合在服务器上运行 Java 应用程序:

sudo apt install openjdk-17-jre-headless

你还需要一个名为 screen 的软件来创建可分离(detachable)服务器 session。screen 允许用户创建一个终端session并与其分离,同时保留在该会话上启动的进程的运行状态。什么意思呢?简单来讲就是在使用服务器远程跑程序时,偶尔会遇到这样的问题:跑了很久,却突然断开连接了,一夜回到解放前,或者退出窗口重新进入时看不到代码运行界面了。screen 就是解决这个问题的。

这是非常重要的,因为如果你启动服务器然后关闭终端,这将终止会话并停止您的服务器。现在安装screen:

sudo apt install screen

现在我们已经安装了必要的软件包,我们需要启用防火墙以允许流量进入我们的 Minecraft 服务器。如果你是按照本文开始超链那篇初始服务器设置来操作的,那么在设置中,你只允许 SSH 流量。现在,你需要允许通过端口 25565 进入的流量,这是 Minecraft 用于允许连接的默认端口。在某些情况下,ufw 会使用命名的流量规则,例如 SSH,它默认始终使用端口 22,但在像这种情况这样不太常见的情况下,我们将手动指定端口号。通过运行以下命令添加必要的防火墙规则:

sudo ufw allow 25565

现在你已经安装了 Java,并且配置了防火墙,接下来,从 Minecraft 官网下载 Minecraft 服务器应用程序。

第二步:下载最新版本的 Minecraft

现在,我们来下载 Minecraft 服务器的最新版本。我们可以通过访问 Minecraft的官方网站并复制“Download minecraft_server.X.X.X.jar” 的链接来完成此操作,其中的 X 表示服务器的最新版本。

以使用 wget 命令和复制的链接,将服务器应用程序下载到你的服务器上:

wget https://launcher.mojang.com/v1/objects/c8f83c5655308435b3dcf03c06d9fe8740a77469/server.jar

服务器应用下载后,名字是 server.jar。如果你需要管理 Minecraft 的版本,或者想要升级你的 Minecraft 服务器,可以将下载的 server.jar 重命名为 minecraft_server_1.18.2.jar,用下面这行命令就行:

mv server.jar minecraft_server_1.18.2.jar

如果你想下载 Minecraft 的旧版本,可以在 mcversions.net 找到存档。

第三步:配置和运行 Minecraft 服务器

首先,通过运行 screen 命令来启动一个 screen 会话:

screen

看到弹出的界面后,按空格键。screen 将提供一个像平常一样的终端会话框。这个会话现在是可以分离的,这意味着你可以在这里启动一个命令并让它持续运行。

现在,你可以进行初始配置。当下一个命令抛出错误时,请不要惊慌。Minecraft 之所以这样设计安装过程,是为了让用户必须首先同意公司的许可协议。接下来,执行这段操作:

java -Xms1024M -Xmx1024M -jar minecraft_server_1.18.2.jar nogui

上面这一行命令有很多参数,都是什么意思呢?我们来解读一下:

  • Xms1024M - 配置服务器,以 1024MB 或 1GB 的 RAM 开始运行。如果你希望服务器以更多的 RAM 开始运行,可以提高此限制。M 表示兆字节,G 表示什么就不用解释了吧,同样道理的。例如:Xms2G 意思是配置以 2GB 的 RAM 来启动服务器。
  • Xmx1024M - 这将配置服务器最多使用 1024M 的 RAM。如果你希望服务器以更大的规模运行,允许更多的玩家一起玩,或者你感觉服务器运行缓慢,可以提高这个限制。
  • jar - 此标志指定要运行的服务器 jar 文件。
  • nogui - 这告诉服务器不要启动图形用户界面(GUI),因为这是一个服务器,没有图形用户界面。

你第一次运行这个命令(通常用于启动您的服务器)时,将收到以下输出:

Output
[22:05:31] [environment second]
[22:05:31] [main/ERROR]: Failed to load properties from file: server.properties
[22:05:31] [main/WARN]: Failed to load eula.txt
[22:05:31] [main/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

这些错误是因为服务器找不到执行所需的两个必要文件而产生的:eula.txt中的EULA(最终用户许可协议)和配置文件 server.properties。由于服务器找不到这些文件,它会在当前的工作目录中创建它们。Minecraft故意这样做是为了确保用户已经阅读并同意其 EULA(最终用户许可协议)。

在文本编辑器中打开 eula.txt,这里我们使用的编辑器是 nano,所以命令是:

nano eula.txt

在这个文件中,你将看到一个指向Minecraft EULA的链接。复制这个URL:

#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
#Tue Mar 24 22:05:31 UTC 2020
eula=false

在网页浏览器中打开该 URL,并阅读协议。然后返回文本编辑器,找到 eula.txt 中的最后一行。在这里,将 eula=false 更改为 eula=true。然后,保存并关闭文件。如果你用的是 nano,就按“Ctrl+X”退出,然后在提示保存时按“Y”,然后按Enter。

现在你已经接受了 EULA,可以根据自己的要求配置服务器。

在当前的工作目录中,你还会找到新创建的 server.properties 文件。这个文件包含 Minecraft 服务器的所有配置选项。你可以在官方 Minecraft Wiki上找到有关所有服务器属性的详细列表。你可以在启动服务器之前,按照个人喜好修改这些设置。本教程将介绍一些基本设置:

nano server.properties

输入这个命令之后,你就会打开这个文件,然后你会看到:

#Minecraft server properties
#Thu Apr 30 23:42:29 UTC 2020
spawn-protection=16
max-tick-time=60000
query.port=25565
generator-settings=
force-gamemode=false
allow-nether=true
enforce-whitelist=false
gamemode=survival
broadcast-console-to-ops=true
enable-query=false
player-idle-timeout=0
difficulty=easy
spawn-monsters=true
broadcast-rcon-to-ops=true
op-permission-level=4
pvp=true
snooper-enabled=true
level-type=default
hardcore=false
enable-command-block=false
max-players=20
network-compression-threshold=256
resource-pack-sha1=
max-world-size=29999984
function-permission-level=2
rcon.port=25575
server-port=25565
server-ip=
spawn-npcs=true
allow-flight=false
level-name=world
view-distance=10
resource-pack=
spawn-animals=true
white-list=false
rcon.password=
generate-structures=true
online-mode=true
max-build-height=256
level-seed=
prevent-proxy-connections=false
use-native-transport=true
motd=A Minecraft Server
enable-rcon=false

让我们看一下列表中比较重要的属性:

  • difficulty(默认为 easy)- 这会设置游戏的难度,比如造成多少伤害以及元素如何影响玩家。选项有peaceful(和平)、easy(简单)、normal(普通)和hard(困难)。
  • gamemode(默认为survival)- 这会设置游戏模式。选项有survival(生存)、creative(创造)、adventure(冒险)和spectator(旁观)。
  • level-name(默认为world)- 这会设置将在客户端中显示的服务器名称。特殊字符(如撇号)可能需要在前面加上反斜杠。这被称为转义字符,当特殊字符在上下文中可能无法正确解析时,这是一种常见做法。
  • motd(默认为A Minecraft Server)- 在Minecraft客户端的服务器列表中显示的消息。
  • pvp(默认为true)- 启用玩家对玩家(Player versus Player)战斗。如果设置为true,玩家将能够进行战斗并相互造成伤害。

设置好你想要的选项后,保存并关闭文件。

现在你可以成功启动服务器了。

像上次一样,我们用 1024 M 的 RAM 来启动您的服务器。这次,你还应该让Minecraft在必要时能够使用 4G 的 RAM。注意,你可以调整这个数字。我们现在输入命令:

java -Xms1024M -Xmx4G -jar minecraft_server_1.18.2.jar nogui

稍等片刻,等它进行初始化。很快,新Minecraft服务器将开始给出类似于以下的输出:

Output
[21:08:14] [Server thread/INFO]: Starting minecraft server version 1.18.2
[21:08:14] [Server thread/INFO]: Loading properties
[21:08:14] [Server thread/INFO]: Default game type: SURVIVAL
[21:08:14] [Server thread/INFO]: Generating keypair
[21:08:15] [Server thread/INFO]: Starting minecraft server on *:25565

当服务器启动并运行后,你会看到:

Output
[21:15:37] [Server thread/INFO]: Done (30.762s)! For help, type "help"

你的服务器现在正在运行,并且你已经看到了服务器管理员控制面板。尝试输入“help”:

help

系统会输出:

Output
[21:15:37] [Server thread/INFO]: /advancement (grant|revoke)
[21:15:37] [Server thread/INFO]: /ban <targets> [<reason>]
[21:15:37] [Server thread/INFO]: /ban-ip <target> [<reason>]
[21:15:37] [Server thread/INFO]: /banlist [ips|players]
...

从这个终端,您可以运行管理员命令并控制您的Minecraft服务器。现在,您将学习如何使用screen在注销终端后保持Minecraft服务器的运行。然后,您可以连接到您的Minecraft客户端并开始新的游戏。

第四步:如何让 Minecraft服务器运行起来

现在你的服务器已经启动了。如果你希望即使在断开 SSH 会话后,它仍能继续运行。由于之前已经使用了screen,因此可以通过按 Ctrl + A + D 来断开与这个会话的连接。按下之后,就会返回到原始shell中:

ubuntu@minecraft-2204:~$ screen
[detached from 3626.pts-0.minecraft-2204]

运行下面这个命令,可以看到所有的 sceen 会话:

screen -list

你将获得会话 ID,你可以通过这个 ID 来恢复那个会话:

There is a screen on:
        3626.pts-0.minecraft-2204	(03/02/22 22:56:33)	(Detached)
1 Socket in /run/screen/S-root.

要恢复你的会话,向 screen 命令传递 -r 加上你的会话ID:

screen -r 3626

当你准备再次从终端注销(log out)时,请确保使用 Ctrl + A + D 从会话中分离,然后再注销。

第五步:从 Minecraft 客户端连接到你的服务器

现在你的服务器已经启动并运行了,让我们通过 Minecraft 客户端来连接到它。然后你就可以开始玩了!

启动你的 Minecraft Java 版的副本,并在菜单中选择多人游戏。

然后你需要选择一个服务器,点击“Add Server”按钮

在出现的“Edit Server Info”窗口中,给你的服务器起一个名字,并输入你的服务器 IP 地址。这个 IP 地址与你通过 SSH 连接时使用的 IP 地址相同。

输入了服务器名称和IP地址后,你将会返回到多人游戏界面,你的服务器现在将会出现在屏幕上。

之后再登录的时候,你的服务器都会显示在这里了。点击这个服务器,然后点击“Join Server”。

你就进入到你的服务器了,可以开始玩了!

小结

现在,你已经在 Ubuntu 22.04 上搭建了一个 Minecraft 服务器,你可以和所有的朋友们一起在上面玩游戏了!

祝大家玩的愉快!