Об этом проекте
bareiron — это минималистичная реализация сервера Minecraft, предназначенная для встраиваемых систем с ограниченной памятью. Заявленная цель проекта — сделать возможным размещение серверов Minecraft на очень слабых устройствах, таких как ESP32. В проекте явно указаны приоритеты: сначала использование памяти, затем производительность и только потом функциональность; также отмечается, что соответствие ванильному Minecraft не гарантируется и не является целью.
Целевая совместимость — Minecraft версии 1.21.8 с версией протокола 772. В README предупреждается, что официально поддерживается только ванильный клиент, и сообщается о проблемах при использовании Fabric или подобных клиентов.
Для начала работы на платформах PC x86_64 необходимо скачать последний скомпилированный бинарный файл и запустить его. Файл описывается как Cosmopolitan polyglot, что означает возможность запуска на Windows, Linux и, возможно, Mac, несмотря на расширение файла. В README отмечается, что настройки сервера по умолчанию нельзя изменить без компиляции из исходного кода.
Для микроконтроллеров требуется компиляция. Перед компиляцией необходимо выгрузить данные реестров из ванильного сервера Minecraft. В Linux это можно автоматизировать с помощью включенного скрипта extract_registries.sh; в противном случае процесс включает размещение JAR-файла сервера Minecraft в папке notchian, следование руководству по генератору данных Minecraft Wiki для выгрузки всех реестров, а затем запуск build_registries.js с помощью bun, node или deno.
Инструкции по компиляции охватывают несколько сред: Linux с gcc и ./build.sh; Windows через MSYS2 MINGW64 для нативного бинарного файла, 32-битный вариант, совместимый с Windows 95/98, с помощью флага --9x, бинарный файл, связанный с MSYS2, или WSL для сборки и запуска Linux-бинарника. Для вариантов ESP в README указано настроить проект PlatformIO с использованием фреймворка ESP-IDF (явно не Arduino) и клонировать репозиторий поверх него, с рекомендациями по настройке тактовой частоты и включению оптимизаций компилятора для повышения производительности.
Конфигурация также требует компиляции из исходного кода. Наиболее удобные для пользователя параметры находятся в include/globals.h, включая учетные данные WiFi для встраиваемых систем, в то время как такие детали, как MOTD или время начала дня, находятся в src/globals.c. В README выделены несколько параметров, важных для реальных развертываний на микроконтроллерах: широковещательная передача движения может ограничивать соединения в зависимости от количества игроков, производительности MCU и пропускной способности сети, и ее можно настроить, закомментировав BROADCAST_ALL_MOVEMENT и SCALE_MOVEMENT_UPDATES_TO_PLAYER_COUNT или снизив TIME_BETWEEN_TICKS за счет увеличения вычислительной нагрузки. Сундуки и поток жидкости можно отключить с помощью ALLOW_CHESTS и DO_FLUID_FLOW, если они вызывают сбои или нестабильность. Увеличение VISITED_HISTORY может помочь при частой повторной генерации чанков, с заявленной стоимостью памяти около 240 дополнительных байт на выделенного игрока при увеличении до 64.
Дополнительный раздел охватывает энергонезависимое хранилище для целей ESP, которые хотят сохранять данные мира после выключения. На платформах PC это не требуется, поскольку данные мира и игроков по умолчанию записываются в world.bin. Самый простой подход — настроить LittleFS в PlatformIO и закомментировать #ifndef, окружающий SYNC_WORLD_TO_DISK в globals.h; поскольку запись во флеш-память обычно медленная и блокирующая, рекомендуется раскомментировать DISK_SYNC_BLOCKS_ON_INTERVAL, и, возможно, потребуется уменьшить MAX_BLOCK_CHANGES, чтобы уместиться в раздел LittleFS. Для модулей SD-карт или других виртуальных файловых систем процедуру настройки файловой системы должен реализовать пользователь, хотя встроенный сериализатор должен работать, так как он использует вызовы POSIX-файловой системы. Как альтернатива, данные мира можно выгрузить и загрузить по TCP, раскомментировав DEV_ENABLE_BEEF_DUMPS, с явным примечанием, что эта система не реализует никакой безопасности или аутентификации, и любой, у кого есть доступ к серверу, может загрузить произвольные данные мира.
Руководство для участников просит создавать issues и обсуждать с мейнтейнерами перед pull request, даже для небольших изменений; следовать существующему стилю кода; тестировать код перед запросом ревью; и заявляет, что улучшения инструментов разработки и компиляции не приветствуются, если участник не работал с кодовой базой достаточно долго, чтобы заметить практические недостатки. README указывает на Minecraft Wiki для информации о протоколе и предлагает поисковую систему для всего остального.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.