
Dragonfly: Создание кастомных серверов Minecraft Bedrock на
df-mc/dragonfly
Программное обеспечение сервера Minecraft Bedrock Edition, написанное на Go
Просмотреть на GitHub ↗Что такое Dragonfly
Dragonfly - это фреймворк для создания серверов Minecraft Bedrock, написанный на Go. Называть его просто "сервером" немного вводит в заблуждение, особенно если вы привыкли к традиционному серверному ПО, как Spigot или Paper. На самом деле, это библиотека - набор инструментов и строительных блоков, которые вы используете для построения своего собственного серверного приложения. Вы не устанавливаете его и сразу получаете рабочий сервер. Вместо этого, вы пишете код на Go, используя API Dragonfly, а затем запускаете этот код, чтобы создать именно тот сервер, который вы себе представляете.
Это важно, потому что все на 180 градусов переворачивает. С традиционным серверным ПО вы ограничены тем, что разработчики подумали, что вы захотите сделать. Dragonfly говорит: «Вот сетевой слой, обработка формата мира и реализация протокола. Строите на этом все, что вам нужно». Он предназначен для людей, которые хотят выпустить что-то кастомное, а не что-то готовое.
Для кого это важно
Если вы управляете небольшим SMP с друзьями, Dragonfly, вероятно, излишек. Для этого используйте готовый сервер. Но если вы пытаетесь построить что-то уникальное - сервер выживания с кастомной экономикой, творческий мир со специальными инструментами для строительства или сетевую мини-игру с кастомными правилами - Dragonfly дает вам основу для реализации.
Владельцы сетей, которые столкнулись с потолком возможностей традиционного серверного ПО, обычно оказываются здесь. Разработчики, изучающие, как работает сетевой протокол Minecraft, также глубоко погружаются в исходный код Dragonfly. У него 790 звезд на GitHub. Это означает, что за ним стоит реальное сообщество, но оно не является мейнстримом. Достаточно маленькое, чтобы вы узнали людей в Discord, достаточно большое, чтобы не чувствовать себя одиноким.
Кривая обучения, однако, реальна.
Начало работы: пути установки
Dragonfly требует Go 1.24 или новее. Если у вас еще не установлен Go, сначала скачайте его с golang.org. Проект предлагает два реалистичных пути вперед.
Путь один: использовать его как библиотеку в вашем собственном проекте. Создайте новый модуль Go, объявите Dragonfly в качестве зависимостей, и начните кодировать:
go mod init github.com/user/myserver
go get github.com/df-mc/dragonflyОтсюда вы пишете Go, чтобы настроить слушатели, обработать подключения игроков и определить логику игры. Репозиторий на GitHub и документация на pkg.go.dev показывают вам API. Вы контролируете все, что одновременно мощно и страшно.
Путь два: клонировать репозиторий и запустить пример сервера. Это дает вам что-то рабочее сразу же, пока вы исследуете, что возможно:
git clone https://github.com/df-mc/dragonfly
cd dragonfly
go run main.goФайл main.go в репозитории - это рабочий пример сервера - не полный по функциям, но достаточно, чтобы понять, как все части работают вместе. Вы можете подключиться к нему через клиент Bedrock и поэкспериментировать. Остановите его с помощью Ctrl+C, когда закончите.
Что делает его усилия достойными
Go компилируется в самодостаточные двоичные файлы,meaning вы получаете один исполняемый файл, который запускается везде без необходимости установки отдельной среды выполнения. Это реальное преимущество. Нет конфликтов версий Java, нет проблем с окружением Python, нет драмы «работает на моей машине».
API хорошо документирован по сравнению с большинством открытых серверных проектов. Вы получаете реальные godocs, объясняющие, что делает каждая функция и какие параметры она ожидает. Сам код читаемый. Это не гарантировано в экосистеме серверов Minecraft - некоторые проекты представляют собой лабиринт наследования и управления состоянием, который даст вам головную боль.
Асинхронная архитектура Dragonfly (сложный способ сказать, что она разработана для обработки множества вещей одновременно без разрушения) означает, что вы не блокированы, ожидая завершения действия одного игрока, прежде чем обработать действие другого. Когда вы управляете сервером с сотнями одновременных подключений, это важно. Он также может показаться более отзывчивым, чем серверы, написанные на языках, которые заставляют все происходить последовательно.
А сообщество действительно полезно. Сервер Discord, связанный с репозиторием GitHub, имеет людей, которые действительно отвечают на вопросы. Хранители взаимодействуют с запросами на функции. Для проекта с 790 звездами это достаточно редко, чтобы быть достойным упоминания.
Ловушка: Что может раздражать
Учиться Go занимает время, если вы пришли из Python или JavaScript. Язык проще Java в некоторых аспектах, более жесткий в других. Горутины (модель параллелизма Go) мощные, но требуют другой ментальной модели, чем async/await. Если вы никогда не сталкивались с каналами и примитивами синхронизации, вы столкнетесь с некоторыми проблемами.
Строить сервер с Dragonfly означает, что вы отвечаете за многое из того, что другое серверное ПО обрабатывает за вас. Хотите сохранение прогресса игроков? Напишите это. Нужен анти-чит? Постройте его. Кастомные команды? Это на вас. Это компромисс за свободу - вы получаете полный контроль, но вместе с ним полная ответственность.
Также есть специфические особенности Bedrock Edition, которые отличают его от Java Edition. Протокол разный. Некоторые механики работают по-другому. Если вы знакомы только с серверами Java, некоторые аспекты поведения Dragonfly могут удивить вас. Даже если вы знаете серверы Bedrock, подход Dragonfly к некоторым вещам (как загрузка чанков или синхронизация сущностей) имеет свои мнения.
Вики существует и содержит полезную информацию, но она не полная. Вы часто будете читать исходный код и проводить эксперименты, чтобы понять, как все работает. Это нормально, если вам нравится такой стиль обучения, но это не «следуйте уроку».
Практическое применение и рассмотрение альтернатив
Планирование важно до начала кодирования. Опишите, что именно должен делать ваш сервер. Какие кастомные функции неотъемлемы? Какие стандартные поведения Bedrock нужно изменить? Как только вы это узнаете, вы сможете оценить, имеет смысл строить с Dragonfly или лучше использовать что-то готовое. Использование инструмента, такого как Генератор свойств сервера, может помочь вам подумать над требованиями конфигурации сервера заранее - понимание того, какие свойства важны, помогает вам знать, какие функции нужно включить.
После запуска сервера, Проверщик статуса сервера Minecraft полезен для мониторинга, остается ли ваш сервер отзывчивым. Он скажет вам, если что-то в вашем коде на Go блокирует или если возникают сетевые проблемы.
Если вы хотите построить что-то кастомное, но не готовы погрузиться в Go, Nukkit - еще один вариант сервера Bedrock, написанный на Java. Он более устоявшийся и имеет больше плагинов от третьих сторон. Стоит в обмен на меньший контроль за меньшие усилия. Для Java Edition стандартами являются Spigot и Paper, хотя они не помогут с Bedrock. И ванильные серверы все еще хороши, если вам не нужны кастомные механики.
Dragonfly - правильный выбор, если вы хотите построить что-то кастомное и готовы написать код, чтобы добиться этого.
Lead writer at minecraft.how. Long-time Minecraft player running a small SMP server, testing every build, mod, and seed before writing about it.
Комментарии
Пока нет комментариев. Станьте первым, кто поделится своим мнением!


