bareiron:基于嵌入式系统的极简Minecraft服务器项目

Minimalist Minecraft server for memory-restrictive embedded systems

分支1Tags1
文件最后提交记录最后更新时间
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 标志的第二条命令)。最后,使用 bunnodedeno 运行 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
  • 要针对 ESP 系列设备进行编译,请设置一个 PlatformIO 项目(选择 ESP-IDF 框架,不是 Arduino)并将此存储库克隆到该项目之上。进一步步骤请参见下面的配置。为获得更好的性能,请考虑更改时钟速度并启用编译器优化。如果您不知道如何操作,网上有很多相关资源。

配置

如上文所述,配置服务器需要从源代码进行编译。

大多数用户友好的配置选项可在 include/globals.h 中找到,包括嵌入式设置的 WiFi 凭据。其他一些细节,如 MOTD(服务器欢迎信息)或起始时间,可以在 src/globals.c 中找到。至于其他所有配置,则需要您深入研究代码。

以下是一些对计划在真实微控制器上供真实玩家使用的用户而言,较为重要且并非一目了然的选项摘要:

  • 根据玩家数量、微控制器(MCU)的性能以及网络带宽,玩家位置广播可能会限制您的连接速度。如果遇到这种情况,请尝试注释掉 BROADCAST_ALL_MOVEMENTSCALE_MOVEMENT_UPDATES_TO_PLAYER_COUNT。这将使移动与 tickrate(滴答率)绑定。如果此更改导致移动过于卡顿,您可以减小 TIME_BETWEEN_TICKS,但这会增加计算量。
  • 如果遇到与箱子或水相关的崩溃或不稳定问题,可以分别通过 ALLOW_CHESTSDO_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 可以启用此功能。注意:此系统未实现任何安全或身份验证机制。 启用此选项后,任何有权访问服务器的人都可以上传任意世界数据。

贡献指南

  • 在提交拉取请求之前,请先创建议题并与维护者讨论,即使是微小的变更也需如此。
  • 遵循现有的代码风格。确保您的修改与周围代码保持一致,即使您不认同该风格。代码风格不一致的拉取请求将被细致审查。
  • 在创建拉取请求或请求审核之前,请测试您的代码,无论您的修改多么“简单”。这是对维护者和审核者最基本的尊重。
  • 开发工具和编译流程的改进不受欢迎,除非您已深入使用该代码库足够长时间,并确实发现了该领域存在实际缺陷。添加单个编译器标志并非有意义的首次贡献。
  • 有关 Minecraft 服务器协议的信息,请参考维基。其他所有问题,请使用搜索引擎

项目介绍

面向内存受限嵌入式系统的极简Minecraft服务器【此简介由AI生成】

定制我的领域
164.34 K259访问 GitHub