如何在 Raspberry Pi 上架设 Minecraft 服务器

树莓派上的 Minecraft 服务器 标题图片

Minecraft是有史以来最受欢迎的游戏之一。你可以在多人游戏模式中与你的朋友一起玩它。你知道Raspberry Pi 4足够强大,可以运行Minecraft服务器吗?在这篇文章中,你将了解到存在哪些不同的变化的基本知识,Minecraft的一点历史,以及如何在你的树莓派上设置和操作你自己的Minecraft服务器。

威廉与服务器的历史

要谈Minecraft服务器,我们必须简要地讨论Minecraft的两个 "大 "分叉。

Mojang是《Minecraft》的创造者,最初创建《Minecraft》时是在2008年。 爪哇.

有趣的题外话:尽管Java应该是真正可移植的("一次编写,随处运行"),但游戏依赖于x86的本地库。这意味着Java版本的Minecraft将不能在其他平台上运行,比如Raspberry Pi。树莓派是基于ARM的(ARMv6 / ARMv7 / ARMv8,取决于你看的是哪个树莓派)。

Raspi Berry的Java解释

这个Java Minecraft版本可以在PC、Mac和Linux(x86)机器上运行。

相应地,有与Java版兼容的服务器软件(见下文对不同的可用选择的全面讨论)。

第二个版本的Minecraft,从头开始写,被称为MCPE(Minecraft Pocket Edition)。它最初出现在安卓系统上,并且是用 C++.这个版本被移植到Windows 10、iOS、PlayStation 4、XBox和Nintendo Switch。它现在被称为 威廉姆斯基岩版.(Bedrock指的是用C++编写的引擎)。这就是现在的主要版本,包括跨平台游戏。

不幸的是,Bedrock版与Java版不兼容。这意味着Mac和Linux的玩家不能用它来参加跨平台游戏。

更重要的是,它需要有自己的服务器软件,我们将在下面简单介绍一下。

Xbox有一个解释Bedrock与Java的视频

在Raspberry Pi操作系统32位上安装Spigot

这将引导你完成Spigot的安装。我使用一个8GB的Raspberry Pi 4,在默认的32位操作系统下开始安装。

准备安装

打开一个终端,并运行以下命令。

sudo apt-get update
sudo apt-get install git openjdk-8-jre-headless
mkdir /home/pi/spigot-build
cd /home/pi/spigot-build

这将更新软件包列表,并安装git和OpenJDK 8(Java Runtime Environment,JRE)。此外,它还将创建一个新的目录用于构建Spigot,并将其改为。

然后,下载最新的 来自SpigotMC网站的BuildTools.jar.你可以使用 wget 为这个。

wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar

这是一个快速下载,约4MB。

建造水龙头

现在开始构建。

java -jar BuildTools.jar

我已经开始在 13:00在使用我的树莓派4 8GB时,它的完成度约为 13:15 - 所以它花了大约1小时15分钟。下面是你将看到的初始输出的截图。

开始建立Spigot终端输出

构建过程使用了你的Raspberry Pi上的多个内核。

Spigot构建过程的htop输出

这里是你将看到的最后一个屏幕。

Spigot构建完成,spigot-1.16.4.jar已准备就绪。

一旦构建完成,你会看到完成的Spigot服务器.jar文件被保存到哪里。在我的例子中(因为它已经构建了spigot-1.16.4.jar),它是。

/home/pi/spigot-build/./spigot-1.16.4.jar

剩下的文件不再需要了,我们只需要最后的spigot-*.jar。

安装新的威廉与服务器

我建议将 Minecraft 服务器安装到 /opt 目录层次中。让我们在下一步中完成安装,并将 .jar 文件重命名为 spigot.jar:

sudo mkdir /opt/spigot
sudo mv /home/pi/spigot-build/spigot-*.jar /opt/spigot/spigot.jar
sudo chown -R pi:pi /opt/spigot

最后一条命令将该目录的所有者改为用户pi,这将使你更容易以必要的权限开始工作,而不必创建一个新用户。对于一个多人使用的系统来说,为了获得额外的安全/控制权,你可能想创建自己的系统用户来运行spigot。

安全提示

现在你可以尝试启动你的新Minecraft服务器,为它分配2GB内存。

java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui

在32位Raspberry Pi操作系统上为spigot分配超过2700M的资源,导致我的服务器无法启动。

[47.195s][warning][os,thread] 启动线程失败 - pthread_create failed (EAGAIN) for attributes: stacksize: 320k, guardsize: 0k, detached.
[07:57:48] [服务器线程/ERROR]。遇到了一个意外的异常
java.lang.OutOfMemoryError: 无法创建本地线程:可能是内存不足或达到进程/资源限制
at java.lang.Thread.start0(Native Method) ~[?:?] 。
at java.lang.Thread.start(Thread.java:803) ~[?:?] 。
at java.util.Timer.(Timer.java:177) ~[?:?] 。
at org.spigotmc.Metrics.start(Metrics.java:217) ~[spigot.jar:git-Spigot-a19903d-167ff59]
at org.spigotmc.SpigotConfig.registerCommands(SpigotConfig.java:91) ~[spigot.jar:git-Spigot-a19903d-167ff59]
at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:149) ~[spigot.jar:git-Spigot-a19903d-167ff59]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:809) ~[spigot.jar:git-Spigot-a19903d-167ff59]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$0(MinecraftServer.java:164) ~[spigot.jar:git-Spigot-a19903d-167ff59]
at java.lang.Thread.run(Thread.java:834) [?:?] 。
[07:57:48] [服务器线程/ERROR]。此崩溃报告已被保存到。/opt/spigot/./crash-reports/crash-2020-11-23_07.57.48-server.txt
[07:57:48] [服务器线程/INFO]。停止服务器
[07:57:48] [服务器线程/INFO]。拯救球员
[07:57:49] [服务器线程/INFO]。保存世界

如下所述(错误处理/内存不足)。 即使服务器启动正常,它也可能因内存不足而崩溃。如果你给它太多的内存--这就是为什么我们坚持使用一个安全的内存。 最大2GB 这里。在64位操作系统上,这个数字可能更高,所以你可以使用更多的Raspberry Pi 4 / 8 GB的内存。

32位Raspberry Pi操作系统的Spigot内存限制

现在Spigot将生成两个新文件(eula.txt & 服务器.属性)和一个目录(原木).你会在第一次运行时看到一个错误,因为EULA还没有被接受。

正在加载图书馆,请等待...
[15:01:09] [main/ERROR]:从文件中加载属性失败:server.properties
[15:01:09] [main/WARN]。加载eula.txt失败
[15:01:09] [main/INFO]:你需要同意EULA才能运行服务器。请到eula.txt查看更多信息。

如果你看一下eula.txt,你会看到以下内容。

#B如果将下面的设置改为 "true",则表明您同意我们的EULA (https://account.mojang.com/documents/minecraft_eula).
#Sun Nov 22 15:01:09 CET 2020
eula=false

请前往Mojang的网站并 阅读EULA (终端用户许可协议),然后再实际接受它。

下面是你如何接受它。运行

nano /opt/spigot/eula.txt

并将最后一行编辑为

eula=true

用Ctrl + O保存(并按回车键),用Ctrl + X退出

从命令行启动Spigot

现在试着运行命令,再次启动服务器。

java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui

Spigot Minecraft服务器现在将启动并初始化。

在你接受EULA后,Spigot成功启动。

在这段时间里,你的CPU负载将在所有核心上接近100 %。

htop显示Spigot初始化时的系统负载

在开始时,将显示一些有用的信息(在此摘录)。

[15:09:05] [Server thread/INFO]:启动minecraft服务器版本1.16.4
[15:09:06] [Server thread/INFO]:默认的游戏类型。生存(SURVIVAL)
[15:09:09] [Server thread/INFO]:在*:25565上启动Minecraft服务器

上面引用的最后一行显示,你的Minecraft服务器绑定了Raspberry Pi上的所有IP地址,并且绑定了 端口25565 在这些IP地址上。

这家初创企业采取了 190.812 s (或大约三分钟)在我的Raspbery Pi 4 / 8GB的股票上。一旦完成,你会看到一个提示。

用于与服务器交互的提示符

与Spigot服务器交互

类型

help

在这个提示下(没有 /),以获得一个可能的命令列表。

显示了与服务器互动的可能命令列表

例如,用命令 列表,你可以看到有多少玩家在线。

列表显示,没有最多20人的玩家在线。

使用命令 版本,你可以看到你的服务器的当前版本,以及是否有更新的服务器可用。注意,你必须重建spigot.jar来更新服务器。

版本输出。该服务器正在运行 CraftBukkit 版本 git-Spigot-a19903d-167ff59 (MC: 1.16.4) (Implementing API version 1.16.4-R0.1-SNAPSHOT)。您运行的是最新版本

跟不上!服务器超载了吗?警告背后的运行

你很可能会看到这样的输出

[08:06:11] [服务器主题/WARN]。跟不上了!服务器超载了吗?运行时间为8444ms,即落后168ticks

找到你的Raspberry Pi Minecraft服务器的IP地址

如果你不确定你的Raspberry Pi的IP地址是什么,你可以简单地通过输入来找到它。

ip -4 addr show

这将显示类似以下的输出。

ip -4 addr显示Raspberry Pi上的输出结果

寻找eth0条目(在我的例子中是2),这是Raspberry Pi上的LAN。IP地址是inet之后,斜杠之前的那一位。在我的例子中 192.168.1.235 :

可以找到IP地址的重要部分

连接到你的Minecraft服务器

你将(当然🙂需要Minecraft,你可以从以下网站获得 威廉斯的官方网站.你需要Java版本的Minecraft,如前所述。

单击 "Minecraft Java版

如果你还没有Minecraft,并且需要购买它,你将需要建立一个Mojang账户。你在购买时将会收到一封收据电子邮件,其中包括Windows、macOS、Linux、Arch Linux和Debian的下载链接(注意这些必须是X86系统,正如之前讨论的那样!)。

例如,对于Windows,你会得到MinecraftInstaller.msi。

Minecraft启动器设置向导

在启动Minecraft时,你将会看到一个登录屏幕。

威廉姆斯的登录界面

登录后,你会看到一个概述屏幕,有一个播放按钮。

当你点击播放,Minecraft将首先下载最新的版本,在我的例子中是1.16.4

下载完成后,游戏主界面会出现。

主游戏屏幕为您提供单人游戏、多人游戏和Minecraft领域的选择

点击这里的多人游戏。你会得到一个关于第三方在线游戏的警告,点击 着手进行 这里(可选:你也可以在方框内打勾 不要再显示这个屏幕).

请注意。第三方在线游戏

现在你会得到一个Windows(如果你在Windows上玩)的安全提示。

Windows防火墙的安全提示

点击允许访问这里(德语为 "Zugriff zulassen")。

现在你将看到以下屏幕。

玩多人游戏,扫描你的本地网络上的游戏

要快速开始,请点击直接连接,并在这里输入你的服务器的IP地址(如何找到它,见上文)。

直接连接,能够输入服务器地址并加入服务器

Minecraft会记住下一个会话的IP地址,并自动向你建议。

点击 "加入服务器"。它将连接,并短暂地显示一个加载屏幕。

ip -4 addr show

最后,你会看到游戏菜单。

游戏菜单

点击 "回到游戏",开始在你的新Minecraft服务器上玩耍!

在你自己的Raspberry Pi Minecraft服务器上进行Minecraft多人游戏!

你可以在玩的时候按F3,以显示信息的覆盖,在那里你可以看到你确实连接到一个Spigot服务器,并检查Minecraft版本。

F3打开一个带有Minecraft中一些统计和调试信息的覆盖层(而F11将使其进入全屏)。
如果你在生存模式下离开你的游戏一段时间无人看管,你可能会死亡。"buyzero被僵尸杀死",给你一个选项,让你重生或转到标题屏幕

在你的Raspberry Pi Minecraft服务器上输出

一旦你连接了,在你的Minecraft服务器上会有一些额外的输出。

[15:53:32] [User Authenticator #1/INFO]。玩家buyzero的UID是e76a3199-3ed0-4064-8086-d9f565235f71
[15:53:33] [服务器线程/INFO]: buyzero[/192.168.1.202:51388] 以实体ID 435登录在([world]25.5, 64.0, 137.5)。

该命令 列表 现在显示你有一个用户已经登录。

[15:57:05] [Server thread/INFO]:最多20名玩家中有1人在线:buyzero

此外,还将显示与你的球员有关的事件。

[16:04:24] [服务器线程/INFO]: buyzero被僵尸杀死了

使用命令 购零操作 你可以让用户buyzero成为服务器操作员(根据情况替换你的用户名)。

购零操作
[08:09:18] [服务器主题/INFO]。让buyzero成为服务器操作员

停止喷水器的威廉斯服务器

如果你在你的Minecraft服务器的提示下,输入 停止 然后是回车。这将停止服务器,保存世界,并返回到命令行提示。

停止

[08:36:57] [服务器线程/INFO]。停止服务器
[08:36:57] [服务器线程/INFO]。停止服务器
[08:36:57] [服务器线程/INFO]。拯救球员
[08:36:57] [服务器线程/INFO]: buyzero失去连接。服务器关闭
[08:36:57] [服务器线程/INFO]: buyzero离开了游戏
[08:36:57] [服务器线程/INFO]。保存世界
[08:36:57] [Server thread/INFO]:保存关卡'ServerLevel[world]'/minecraft:overworld的块。
[08:37:02] [服务器线程/INFO]。ThreadedAnvilChunkStorage(世界)。所有块状物都被保存
[08:37:02] [Server thread/INFO]:保存关卡'ServerLevel[world_nether]'/minecraft:the_nether的数据块
[08:37:05] [服务器线程/INFO]。ThreadedAnvilChunkStorage(DIM-1)。所有的块都被保存了
[08:37:05] [Server thread/INFO]:保存关卡'ServerLevel[world_the_end]'/minecraft:the_end的数据块
[08:37:10] [服务器线程/INFO]。ThreadedAnvilChunkStorage(DIM1)。所有块都被保存
[08:37:10] [服务器线程/INFO]。ThreadedAnvilChunkStorage(世界)。所有块状物都被保存
[08:37:10] [服务器线程/INFO]。ThreadedAnvilChunkStorage(DIM-1)。所有的块都被保存了
[08:37:10] [服务器线程/INFO]。ThreadedAnvilChunkStorage(DIM1)。所有块都被保存

你的用户将看到以下屏幕。

连接丢失/服务器关闭/返回服务器列表

创建一个systemd服务

https://github.com/sindastra/systemd-minecraft

错误处理

内存不足

Connection Lost, Internal Exception: java.io.IOException:Eine vorhandene Verbindung wurde vom Remotehost geschlossen (远程主机关闭了现有连接)

上面的截图显示了连接到你的服务器的玩家会看到的错误信息,而在服务器端,你会看到以下日志输出。

没有足够的内存让Java Runtime Environment继续运行。
本地内存分配(malloc)未能为Chunk::new分配1438248个字节
带有更多信息的错误报告文件被保存为。
/opt/spigot/hs_err_pid1531.log

编译器重放数据被保存为。
/opt/spigot/replay_pid1531.log

在这种情况下,你需要调整你的内存设置。按照 这篇文章的建议,它应该比你的Raspberry Pi上可用的系统内存低大约1000 MB到1500 MB。考虑到,对于一个32位的操作系统,该进程只能解决一个有点低于4GB的内存,所以即使有一个32位的树莓派,你给你的Minecraft服务器的总数应该低于2500 MB - 2000 MB,以安全为前提(2GB)。

总结

按照这个指南,你将能够运行你自己的树莓派Minecraft服务器,并与你的朋友一起玩。

参考文献/进一步阅读

"Minecraft "是Mojang Synergies AB的商标。
本网站不隶属于威廉与。

1评论

  1. [...] 您可以将 Raspberry Pi 用作网络服务器、文件服务器、打印服务器、媒体服务器、Minecraft 服务器和物联网 [...] 。

发表评论