Minimalist Minecraft server for memory-restrictive embedded systems
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 8 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 9 个月前 | ||
| 10 个月前 | ||
| 9 个月前 | ||
| 8 个月前 | ||
| 7 个月前 | ||
| 8 个月前 |
bareiron
适用于内存受限嵌入式系统的极简 Minecraft 服务器。
本项目旨在实现在 ESP32 等性能较弱的设备上托管 Minecraft 服务器。项目的优先目标依次为:内存占用、性能和功能。因此,不保证与原版 Minecraft 的兼容性,这也不是本项目的目标。
- Minecraft 版本:
1.21.8 - 协议版本:
772
Warning
目前,仅官方支持原版客户端。使用 Fabric 或类似工具时已报告存在问题。
快速开始
对于 PC x86_64 平台,获取最新构建的二进制文件并运行。该文件是一个Cosmopolitan 多语言程序,这意味着尽管文件扩展名为 .exe,它仍可在 Windows、Linux 甚至可能在 Mac 上运行。请注意,服务器的默认设置无法修改,除非从源代码编译。
对于微控制器,请参见下面的编译部分。
编译
编译前,您需要从原版 Minecraft 服务器中提取注册表数据。在 Linux 上,可以使用 extract_registries.sh 脚本自动完成。否则,手动操作步骤如下:在此处创建一个名为 notchian 的文件夹,并将 Minecraft 服务器 JAR 文件放入其中。然后,按照本指南转储所有注册表(使用带有 --all 标志的第二条命令)。最后,使用 bun、node 或 deno 运行 build_registries.js。
- 要在 Linux 上编译,安装
gcc并运行./build.sh。 - 要在 Windows 上编译,有以下几种选择:
- 编译原生 Windows 二进制文件:安装 MSYS2 并打开 "MSYS2 MINGW64" shell。在其中运行
pacman -Sy mingw-w64-x86_64-gcc,导航到本项目目录,然后运行./build.sh。 - 编译原生 32 位二进制文件(兼容 Windows 95/98,但您为什么会需要这个呢),使用上述相同步骤,只是将
pacman -Sy mingw-w64-x86_64-gcc替换为pacman -Sy mingw-w64-cross-gcc并运行./build.sh --9x。 - 编译 MSYS2 链接的二进制文件:安装 MSYS2,并打开 "MSYS2 MSYS" shell。在其中安装
gcc(运行pacman -Sy gcc),导航到本项目目录并运行./build.sh。 - 从 Windows 编译并运行 Linux 二进制文件:安装 WSL,然后在 WSL 中安装
gcc并在本项目目录中运行./build.sh。
- 编译原生 Windows 二进制文件:安装 MSYS2 并打开 "MSYS2 MINGW64" shell。在其中运行
- 要针对 ESP 系列设备进行编译,请设置一个 PlatformIO 项目(选择 ESP-IDF 框架,不是 Arduino)并将此存储库克隆到该项目之上。进一步步骤请参见下面的配置。为获得更好的性能,请考虑更改时钟速度并启用编译器优化。如果您不知道如何操作,网上有很多相关资源。
配置
如上文所述,配置服务器需要从源代码进行编译。
大多数用户友好的配置选项可在 include/globals.h 中找到,包括嵌入式设置的 WiFi 凭据。其他一些细节,如 MOTD(服务器欢迎信息)或起始时间,可以在 src/globals.c 中找到。至于其他所有配置,则需要您深入研究代码。
以下是一些对计划在真实微控制器上供真实玩家使用的用户而言,较为重要且并非一目了然的选项摘要:
- 根据玩家数量、微控制器(MCU)的性能以及网络带宽,玩家位置广播可能会限制您的连接速度。如果遇到这种情况,请尝试注释掉
BROADCAST_ALL_MOVEMENT和SCALE_MOVEMENT_UPDATES_TO_PLAYER_COUNT。这将使移动与 tickrate(滴答率)绑定。如果此更改导致移动过于卡顿,您可以减小TIME_BETWEEN_TICKS,但这会增加计算量。 - 如果遇到与箱子或水相关的崩溃或不稳定问题,可以分别通过
ALLOW_CHESTS和DO_FLUID_FLOW禁用这些功能。 - 如果发现频繁重复的区块生成导致服务器卡顿,增加
VISITED_HISTORY可能会有所帮助。这方面的内存占用并不是很大——例如,将其增加到64每个已分配的玩家也只多占用 240 字节。
非易失性存储(可选)
本节适用于那些以 ESP 系列为目标平台并希望在关机后保留世界数据的用户。在 PC 平台上这不是必需的,因为世界和玩家数据默认会写入 world.bin。
实现此目的最简单的方法是在 PlatformIO 中设置 LittleFS,并注释掉 globals.h 中围绕 SYNC_WORLD_TO_DISK 的 #ifndef 条件编译块。由于 flash 写入通常速度较慢且是阻塞性的,您可能需要取消注释 DISK_SYNC_BLOCKS_ON_INTERVAL。根据您开发板的 flash 大小,您可能还需要减小 MAX_BLOCK_CHANGES,以确保世界数据能容纳在 LittleFS 分区中。
如果使用 SD 卡模块或其他虚拟文件系统,则需要自行实现文件系统设置例程。不过,内置的序列化器应该仍然有效,因为它使用 POSIX 文件系统调用。
或者,如果无法设置文件系统,您可以通过 TCP 转储和上传世界数据。通过取消注释 globals.h 中的 DEV_ENABLE_BEEF_DUMPS 可以启用此功能。注意:此系统未实现任何安全或身份验证机制。 启用此选项后,任何有权访问服务器的人都可以上传任意世界数据。