RE:NODE

Minecraft12 мин чтения

Geyser и Floodgate: игроки Bedrock на сервере Java

Как Geyser и Floodgate пускают игроков Bedrock на сервер Paper: дополнительный UDP-порт, ключи конфига, имена и вайтлисты, а также то, что не переносится.

0 прочтений

Java и Bedrock - это две разные программы, говорящие на двух разных сетевых протоколах, и ни одна из них сама по себе не позволяет телефону зайти на сервер Paper. Geyser - это переводчик, который стоит перед вашим сервером Java и говорит на Bedrock с одной стороны и на Java с другой. Floodgate - его спутник, который пускает этих игроков Bedrock без аккаунта Java. Вместе они работают достаточно хорошо, чтобы большинство игроков ничего не замечало, но сначала нужно правильно сделать три вещи: второе выделение порта, причём обязательно UDP; auth-type, связывающий Geyser с Floodgate; и ясное понимание того, какие возможности тихо не переносятся. В этой статье все три, на сервере Paper, на котором работает линейка Minecraft в RE:NODE.

Что делают Geyser и Floodgate по отдельности#

Это отдельные плагины, они решают отдельные задачи, и Geyser можно запускать без Floodgate.

Geyser переводит протокол. Клиент Bedrock говорит на RakNet поверх UDP со своим форматом пакетов; сервер Java говорит на своём формате поверх TCP. Geyser принимает соединение Bedrock, преобразует каждый пакет в обе стороны и представляет игрока серверу Java как обычного клиента. Это проект GeyserMC, бесплатный и с открытым исходным кодом, со сборками для Paper и Spigot, Velocity, BungeeCord, Fabric, NeoForge, Sponge и отдельным автономным jar.

Floodgate отвечает за личность. Без него игроку Bedrock всё равно нужен платный аккаунт Java, чтобы пройти проверку у Mojang, а это лишает затею смысла. Floodgate заставляет сервер Java принимать вместо этого аутентификацию Xbox игрока Bedrock, так что человек, у которого есть только копия игры для Bedrock, может зайти на сервер, остающийся в online-режиме для всех остальных. Это самое важное: вам не нужно ставить online-mode=false, а это позволило бы любому подключаться под чужим именем.

Где возможно, запускайте плагинную сборку Geyser на самом сервере Java. Альтернатива, автономный Geyser, направленный на удалённый сервер Java, требует либо аккаунта Java для каждого игрока, либо Floodgate, настроенного с обеих сторон с общим ключом, и добавляет сетевой прыжок без всякой пользы, когда обе половины живут на одной машине. В сети с прокси Geyser и Floodgate ставятся на прокси, а Floodgate ещё и на каждый бэкенд - схема подключения описана в статье строим сеть Minecraft на Velocity.

RakNet over UDPвнутри процессаTCP 25565Клиент Bedrockтелефон, консоль, WinКлиент JavaкомпьютерПлагин GeyserUDP 19132Paper + FloodgateTCP 25565Мир и плагиныодно сохранение
Два клиентских протокола на одном сервере Paper

Дополнительный UDP-порт#

Этот шаг чаще всего упускают, и симптом такой: сервер идеально работает для игроков Java, а все игроки Bedrock видят «Unable to connect to world».

ПортПротоколКто использует
25565TCPКлиенты Java
19132UDPКлиенты Bedrock, через Geyser
25565UDPQuery, если enable-query=true

Два разных протокола на двух разных номерах означают два выделения. Даже если вы выберете один и тот же номер для обоих, TCP 25565 и UDP 25565 для файрвола - разные вещи, и правило, открывающее одно, не открывает другое. Общий случай разобран в статье порты игрового сервера простыми словами.

19132 выбран по умолчанию потому, что именно его клиент Bedrock подставляет сам. Если вам достанется этот номер, игроки вводят адрес и больше ничего. Если достанется другой номер, каждому игроку придётся вписывать его вручную в поле Port, и удивительно многие этого не сделают.

В тарифах Minecraft в RE:NODE входит одно выделение, и это порт Java. Добавьте второе на вкладке Network, запомните выданный номер и впишите его в bedrock.port в Geyser. Адрес тот же, что и у порта Java; меняются только номер и протокол.

Есть ещё одно ограничение, о котором стоит честно сказать, прежде чем что-то обещать. Клиенты Bedrock на Windows, Android и iOS могут добавить сервер по адресу и порту. Консольные клиенты - Xbox, PlayStation, Switch - не могут добавлять внешние серверы через интерфейс вовсе. Игроки обходят это с помощью сторонних DNS-инструментов, которые подменяют список рекомендуемых серверов; они работают, пока не перестают, и вы их ни запускаете, ни контролируете. Заложите, что игрокам на консолях понадобится помощь, и не выдавайте поддержку консолей за возможность вашего сервера.

Установка на Paper#

  1. Скачайте сборку Spigot для Geyser и сборку Spigot для Floodgate с geysermc.org. Для Paper подходят именно сборки Spigot.
  2. Загрузите оба jar в plugins/ через файловый менеджер или по SFTP. Установщика плагинов в RE:NODE нет - вы кладёте jar сами, а значит, ничто и не заблокировано.
  3. Один раз запустите сервер. Geyser запишет plugins/Geyser-Spigot/config.yml, Floodgate запишет plugins/floodgate/config.yml и сгенерирует plugins/floodgate/key.pem.
  4. Остановите сервер, отредактируйте конфиг Geyser, как показано ниже, и запустите снова.
  5. Следите за консолью: должна появиться строка о том, что Geyser запущен, с адресом и портом, которые он слушает. Если там написано, что порт занят, выделение неверное.

Не используйте /reload, чтобы подхватить эти плагины. Geyser привязывает сокет при запуске; перезагрузка его посреди работы - это способ получить порт, который удерживается ничем и не может быть привязан заново до перезапуска.

Ключи конфига, которые имеют значение#

Конфиг Geyser длинный, и большую его часть можно оставить как есть. Вот те ключи, у которых есть последствия.

plugins/Geyser-Spigot/config.yml
bedrock:  address: 0.0.0.0  port: 19132  clone-remote-port: false  motd1: "A Minecraft Server"  motd2: "Java and Bedrock welcome"  server-name: "Geyser"remote:  address: auto  port: 25565  auth-type: floodgatepassthrough-motd: truepassthrough-player-counts: trueshow-cooldown: titleshow-coordinates: truemax-players: 100
КлючПо умолчаниюЗачем его менять
bedrock.address0.0.0.0Оставьте как есть. В контейнере именно это слушает выделение
bedrock.port19132Должен совпадать с выданным вам UDP-выделением
clone-remote-portfalsetrue заставляет Geyser использовать номер порта Java поверх UDP
remote.addressautoОставьте в плагинной сборке - он сам находит локальный сервер
remote.auth-typeonlineЗадайте floodgate, как только установлен Floodgate
passthrough-motdfalsetrue показывает ваш настоящий MOTD вместо motd1/motd2
passthrough-player-countsfalsetrue показывает в списке Bedrock настоящее число игроков в сети
show-cooldowntitleКак игрокам Bedrock рисуется перезарядка атаки из Java
max-players100Влияет только на число, которое показывается, пока passthrough не включён
floodgate-key-filekey.pemМеняйте только для автономной установки или установки с прокси

Ломает установки чаще всего remote.auth-type. Оставьте online при установленном Floodgate, и игроков Bedrock попросят пройти аутентификацию аккаунтом Java, которого у них нет. Задайте floodgate, и Geyser доверится проверенной личности Xbox от Floodgate. Когда Geyser и Floodgate стоят плагинами на одном сервере, Geyser сам находит файл ключа; для автономного Geyser или Geyser на прокси скопируйте plugins/floodgate/key.pem с сервера Java в папку Geyser и обращайтесь с этим файлом как с паролем, потому что любой, кто им владеет, может подделать вход.

Собственный конфиг Floodgate короткий. username-prefix по умолчанию ., replace-spaces по умолчанию true, а player-link управляет привязкой аккаунтов. Включите опцию, позволяющую игрокам привязывать свои аккаунты на вашем сервере, если хотите, чтобы игрок Bedrock и игрок Java делили один профиль; старая глобальная служба привязки, делавшая это централизованно, больше недоступна, так что привязки теперь хранятся отдельно на каждом сервере.

Имена, UUID, вайтлисты и права#

Floodgate даёт каждому игроку Bedrock имя пользователя и UUID, полученные из его идентичности Xbox, и оба заметно отличаются от таковых у игрока Java.

  • К имени добавляется префикс. Steve на Bedrock приходит как .Steve. Префикс нужен, чтобы игрок Bedrock не мог занять имя игрока Java, и именно поэтому его стоит оставить. Игровые теги Bedrock могут содержать пробелы, которые replace-spaces превращает в подчёркивания.
  • UUID начинается с нулей. У UUID Floodgate характерная ведущая серия нулей, так что его можно отличить с первого взгляда в строке лога или в строке базы данных. Поскольку он получен вычислением, а не случаен, он стабилен между повторными входами, и права с данными плагинов привязываются к игроку как надо.

Практическое следствие - вайтлист. whitelist add .Steve из консоли просит API Mojang разрешить это имя, Mojang о нём никогда не слышал, и команда падает. Два выхода: дать игроку один раз попытаться подключиться, взять UUID, который запишет Floodgate, и вручную добавить запись в whitelist.json при остановленном сервере; либо использовать плагин вайтлиста на правах, который работает с объектом игрока, а не с поиском по имени.

whitelist.json
[  { "uuid": "00000000-0000-0000-0009-01f1b2c3d4e5", "name": ".Steve" }]

Сами права ведут себя обычно. Игрок Floodgate - это игрок, так что группа LuckPerms применяется к нему так же, как ко всем остальным, - руководство по LuckPerms применимо без изменений. Возможно, вам захочется завести отдельную группу для игроков Bedrock, чтобы выдавать исключения для античита или другой набор команд людям, у которых пакеты движения выглядят странно.

Что не переносится#

Geyser - очень хороший слой перевода над двумя играми, которые действительно различаются. Вот пробелы, порождающие обращения в поддержку.

  • Ресурспаки. Пакет Java, заданный через resource-pack= в server.properties, для клиента Bedrock не делает вообще ничего, потому что Bedrock использует другой формат пакетов. Вместо этого Geyser может отправлять пакеты Bedrock .mcpack или zip-пакеты из своей папки packs/, а значит, для равенства придётся поддерживать два пакета. О стороне Java рассказано в статье MOTD, иконка сервера и ресурспаки.
  • Кастомные предметы и модели. Всё, что построено на CustomModelData, требует соответствующего пакета Bedrock и маппингов предметов, прежде чем игрок Bedrock увидит что-то кроме палки. Планируйте это до того, как строить сервер вокруг кастомных предметов.
  • Бой. В Bedrock нет перезарядки атаки, в Java она есть. Geyser эмулирует перезарядку и рисует индикатор, но ощущение другое, а тайминг не идентичен. На PvP-сервере это разница между честным боем и веткой жалоб.
  • Работа с инвентарём. Меню сундуков и большинство GUI плагинов работают. Наковальни, столы зачарования, маяки и всё, что зависит от точного типа клика, - обычные источники мелких странных багов.
  • Движение, а значит, и античит. Движение в Bedrock - не то, что в Java, и античит-плагины его помечают. У каждого популярного античита есть право обхода; выдайте его группе Bedrock или смиритесь с ложными киками. Выбор античита описан в статье защита от гриферства и античит.
  • Клиентские моды. Игроки Bedrock не могут установить моды Fabric, шейдеры или миникарту. Если ваш сервер рассчитывает на модифицированный клиент, он только для Java, что бы ни говорил Geyser.

Ничто из этого не причина не запускать Geyser. Это причина проверить настоящим клиентом Bedrock именно те вещи, от которых зависит ваш сервер, прежде чем объявлять кроссплей.

Во что это обходится и как поспевать за версиями#

Geyser выполняет настоящую работу над каждым пакетом, в той же JVM, что и ваш сервер. Два игрока Bedrock обходятся дороже двух игроков Java: больше CPU на перевод и больше кучи под состояние сессии, которое держит Geyser.

  • Память. Закладывайте дополнительно сверх того, что нужно самому серверу. Тариф на 2 ГБ с Paper и горсткой плагинов уже тесен, а добавление к нему Geyser - решение, которое потом проявляется как перезапуск из-за нехватки памяти. 4 ГБ - более комфортный минимум для смешанного сервера любого размера; более широкая таблица есть в статье сколько RAM нужно серверу Minecraft.
  • CPU. Перевод идёт по пакетам и по большей части вне главного потока, но он не бесплатен, а доля CPU у контейнера - жёсткий лимит, а не пожелание.
  • Версии. Geyser нацелен на новейший релиз Bedrock и обычно поддерживает только его, иногда и предыдущий. Клиенты Bedrock обновляются сами. Эта комбинация означает, что в день выхода релиза Bedrock ваши игроки Bedrock могут остаться без доступа, пока вы не замените jar Geyser, а остановить обновление их клиентов вы не можете никак. Geyser также нацелен на текущую версию Java; чтобы запускать за ним более старый сервер Java, добавьте ViaVersion на сторону Java.

Само обновление занимает минуту: остановите сервер, замените Geyser-Spigot.jar, запустите. /geyser version сообщает, есть ли более новая сборка. Обновление Geyser без обновления Floodgate иногда приводит к несовпадению ключа или протокола, так что при замене одного меняйте оба.

Устранение неполадок#

«Unable to connect to world» у всех клиентов Bedrock. Порт. Проверьте по порядку три вещи: выделение существует и оно UDP, bedrock.port в точности ему соответствует, и Geyser действительно его занял - консоль печатает адрес и порт при запуске. Клиент Bedrock также кэширует сохранённую запись сервера; после смены порта удалите запись и добавьте заново.

Игроков Bedrock просят войти аккаунтом Java. remote.auth-type всё ещё online. Задайте floodgate и перезапустите.

«Failed to verify Floodgate data» или ошибка неверного ключа. Geyser и Floodgate читают разные файлы key.pem. На одном сервере удалите копию Geyser и дайте ему найти файл Floodgate. На прокси скопируйте ключ прокси на каждый бэкенд.

Игроков Bedrock кикает с сообщением об устаревшем клиенте или сервере. Несовпадение протоколов после обновления Bedrock. Обновите Geyser.

В списке Bedrock неверный MOTD или ненастоящее число игроков. passthrough-motd и passthrough-player-counts всё ещё false, поэтому показываются motd1 и motd2 из собственного конфига Geyser.

Всё работает, но игроков Bedrock случайно кикает. В девяти случаях из десяти виноват античит. Отключите его на одну сессию, чтобы убедиться, прежде чем тратить вечер на что-то другое.

Нужна помощь. /geyser dump создаёт описание вашей конфигурации и версий, которое можно загрузить, а в свежих сборках есть /geyser connectiontest, проверяющий снаружи, доступен ли ваш порт Bedrock. Оба стоит выполнить, прежде чем открывать обращение в поддержку.

FAQ#

Нужно ли игрокам Bedrock покупать Minecraft Java?

Нет. Именно для этого и нужен Floodgate. Без Floodgate один Geyser по-прежнему требует, чтобы каждый игрок Bedrock владел аккаунтом Java и проходил с ним аутентификацию, а этого почти никто не хочет.

Можно ли запустить Geyser вместо отдельного сервера Bedrock?

Да, и для большинства сообществ это лучший ответ: один мир, один набор плагинов, один бэкап, все в одном месте. Нативный сервер Bedrock - правильное решение, только если ваши игроки исключительно на Bedrock и вам нужны дополнения Bedrock; компромиссы разобраны в статье Bedrock или Java: какой сервер вы запускаете.

Работает ли Geyser с плагинами?

По большей части да, потому что плагины разговаривают с сервером Java и Geyser не видят. Интереснее всего там, где что-то отправляет сырые пакеты Java, кастомные модели или точные клики по инвентарю. Проверьте те плагины, на которых построен ваш сервер.

Нужен ли мне online-mode=false?

Нет, и не стоит. Floodgate существует для того, чтобы сервер оставался в online-режиме, принимая при этом и проверенные личности Xbox. Отключение online-режима позволяет любому подключаться под любым именем, а это уже совсем другая проблема.

Могут ли зайти игроки Xbox, PlayStation и Switch?

Технически протокол идентичен, так что Geyser их обслуживает без проблем. Препятствие - интерфейс клиента, в котором нет способа ввести адрес сервера. Игроки используют сторонние обходные пути, которые вы не контролируете и которые могут сломаться в любой момент.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000