Crossplay SMP: один сервер для Java и Bedrock через Geyser и Floodgate
Если на сервер хотят зайти и друзья с ПК, и кузен с телефона, разделять их на два разных сервера нет смысла. Geyser плюс Floodgate превращают обычный Paper в кросс-платформенный SMP, где Java и Bedrock игроки бегают по одному миру. В этом гайде разбираем как поставить связку, как Floodgate авторизует Bedrock без Java-аккаунта, какие подводные камни ждут на префиксах, ресурс-паках и анти-чите, и чем такой сервер отличается от голого Bedrock-сервера.
Зачем вообще объединять Java и Bedrock
Два мира разделены протоколом и платформой. Java Edition говорит на своём TCP-протоколе и просит Mojang-логин. Bedrock Edition (мобилки, Switch, Xbox, PlayStation, Windows 10) использует RakNet поверх UDP и привязан к Xbox Live. На голом ванильном сервере они не пересекаются.
Geyser ставится плагином или прокси и переводит RakNet-пакеты Bedrock-клиента в Java-пакеты, которые понимает Paper. Floodgate решает вторую задачу: пускает Bedrock-игрока без Java-аккаунта, генерируя для него детерминированный UUID и имя на основе Xbox Live ID.
В результате один Paper держит и тех, и других, мир общий, чат общий, прогрессия общая. На практике это самый дешёвый способ собрать SMP на 30-50 человек смешанной аудитории.
Что выбрать: Geyser-Spigot или Geyser-Standalone
У Geyser несколько форм-факторов, и для SMP важно сразу выбрать правильную:
- Geyser-Spigot - jar в
plugins/обычного Paper/Purpur. Работает в одном процессе с сервером. Это рекомендуемый вариант для одиночного SMP. - Geyser-Standalone - отдельный процесс, слушает порт и форвардит на Java-сервер. Полезно когда вы не контролируете сервер, например играете на чужом хостинге.
- Geyser-Velocity / Geyser-BungeeCord - если у вас прокси-сеть. Тогда плагин ставится на прокси.
- Geyser-Fabric / Geyser-NeoForge - для модовых серверов на Fabric или NeoForge.
Для классического Paper-SMP берём Geyser-Spigot.jar и floodgate-spigot.jar. Оба под одну версию Minecraft, обе с GeyserMC GitHub Releases и Floodgate Releases.
Установка на Paper или Purpur
Версии Minecraft, которые сейчас уверенно поддерживаются: 1.20.x и 1.21.x. На 1.19 и ниже Geyser ещё работает, но обновлений уже нет.
Шаги короткие:
- Останавливаем сервер.
- Кладём
Geyser-Spigot.jarиfloodgate-spigot.jarвplugins/. - Запускаем сервер. Плагины создадут
plugins/Geyser-Spigot/config.ymlиplugins/floodgate/config.yml. - Останавливаем, правим конфиги, запускаем снова.
Минимальный plugins/Geyser-Spigot/config.yml:
bedrock:
address: 0.0.0.0
port: 19132
clone-remote-port: false
motd1: "Crossplay SMP"
motd2: "Java + Bedrock"
server-name: "Crossplay SMP"
remote:
address: auto
port: auto
auth-type: floodgate
passthrough-motd: true
passthrough-player-counts: true
allow-third-party-capes: true
allow-third-party-ears: false
show-cooldown: title
show-coordinates: true
auth-type: floodgate говорит Geyser передавать авторизацию Bedrock-игроков плагину Floodgate. Без этого Geyser попробует попросить у клиента Java-аккаунт, что не сработает на консолях и телефонах.
Минимальный plugins/floodgate/config.yml:
key-file-name: key.pem
username-prefix: "."
replace-spaces: true
disable-firstjoin-message: false
disable-leave-message: false
default-locale: system
Файл key.pem Floodgate генерит при первом запуске. Если вы используете Geyser-Standalone отдельно, этот же файл нужно скопировать туда.
Порты и фаервол
Бедрок ходит по UDP, не TCP. Это путает многих, потому что для Java сервера привычно открывать только 25565/tcp.
Открыть нужно:
25565/tcpдля Java-клиентов (стандартный порт сервера)19132/udpдля Bedrock-клиентов (стандартный порт Geyser)
В iptables это выглядит так:
iptables -A INPUT -p tcp --dport 25565 -j ACCEPT
iptables -A INPUT -p udp --dport 19132 -j ACCEPT
Если вы за DDoS-защитой, провайдеру нужно явно сказать что 19132/udp тоже надо проксировать как игровой порт. Для DDoS у Bedrock есть свои особенности: RakNet любит спам-флуд unconnected ping-пакетов, и без UDP-фильтра сервер быстро ложится. Готовые решения вроде MineGuard ловят это на уровне фильтра.
Floodgate префикс и почему имена начинаются с точки
По умолчанию Floodgate ставит префикс . перед именем Bedrock-игрока. Если в Xbox Live у человека ник SteveBE, на сервере он появится как .SteveBE.
Зачем это нужно. У Java и Bedrock разные ограничения на ники. Java запрещает спецсимволы и пробелы, Bedrock разрешает многое включая пробелы и эмодзи. Если Java-игрок зарегистрировался как SteveBE, а потом приходит Bedrock-аккаунт с тем же ником, конфликт. Префикс точкой решает это: точка в Java-нике невалидна, значит Java-аккаунта .SteveBE существовать не может.
replace-spaces: true дополнительно меняет пробелы в Bedrock-нике на _, иначе плагины которые парсят аргументы в командах ломаются.
Менять префикс на пустой можно, но тогда все коллизии ложатся на вас. Я обычно оставляю точку: гости видят .Username и сразу понимают, что человек с телефона.
UUID Bedrock-игроков
Floodgate не выдаёт случайный UUID. Он берёт Xbox Live ID игрока и через UUID v3 (имя-в-пространстве) считает детерминированный UUID, всегда один и тот же для конкретного аккаунта. Это важно, потому что весь инвентарь и прогресс в Minecraft привязан к UUID.
Практический вывод: если вы переносите игрока между серверами с одинаковым Floodgate, инвентарь и LuckPerms-привилегии совпадут по UUID. Если же сменить Floodgate-логику или мигрировать с другого решения (например, GeyserConnect), UUID может поплыть и Bedrock-игроки потеряют прогресс.
В большинстве случаев это разовая боль при миграции. Внутри одного сервера UUID стабилен.
Ресурс-паки и текстуры
Geyser умеет конвертировать Java ресурс-паки в Bedrock-формат на лету, но не любой пак переживёт конвертацию. Что работает хорошо:
- Замена текстур блоков и предметов
- Замена звуков
- Кастомные модели через CustomModelData (с оговоркой, см. ниже)
Что плохо или совсем не работает:
- OptiFine CIT (Connected Item Textures) - частично через Geyser, но не всё
- OptiFine CEM (Custom Entity Models) - не поддерживается на Bedrock
- Шейдеры - вообще не относятся к ресурс-пакам, у Bedrock своя система RenderDragon
CustomModelData. Java-плагины вроде ItemsAdder, MMOItems или Oraxen используют CMD для кастомных предметов. На Bedrock это работает только если пак для Bedrock собран отдельно. ItemsAdder из коробки умеет делать Bedrock-вариант пака; Oraxen имеет встроенный Geyser-bridge через Oraxen-Geyser-Mappings или плагин-мост; MMOItems сложнее, обычно нужен ручной Bedrock-пак.
В Geyser-Spigot/config.yml включается опция:
load-resource-packs: true
После этого все паки из plugins/Geyser-Spigot/packs/ уйдут на Bedrock-клиент.
UI и интерфейсы: что глючит на Bedrock
Bedrock рендерит большинство Java-интерфейсов через нативный UI, и не всё переезжает чисто.
- Редактирование табличек - на Bedrock открывается своя клавиатура, работает. Цветовые коды через
&могут не пройти. - Анвил - переименование работает с ограничением длины. Длинные имена обрезаются.
- Книжки - редактирование работает, но без форматирования.
- Командные блоки - открываются как текстовые поля, работают.
- Кастомные GUI на инвентаре (например, плагин-меню через chest GUI) - работают почти всегда, но Bedrock-игроки не видят анимаций тика и иногда промахиваются при клике в первые секунды открытия.
- Форм-меню Geyser - есть API для открытия нативных Bedrock-форм со стороны плагина. Это лучший способ делать админ-панели для Bedrock игроков, чем chest GUI.
Перед запуском пройдитесь по всем основным сценариям с Bedrock-устройства. Лучше один раз поймать косяк локально, чем разбираться когда придут реальные игроки.
Что не работает или работает иначе на Bedrock
Это вечная головная боль кросс-плея. Пара ключевых штук:
- Redstone-автоматизация. Базовые схемы работают одинаково, но тонкие тики (BUD, мгновенные репитеры на пределах) Bedrock считает иначе. Java-схема может не сработать в Bedrock-варианте мира, но мы тут на Java-сервере, так что Java-логика. Bedrock-игрок просто видит результат, физику не считает локально.
- Полёт через элитру. Работает, но управление чувствительностью отличается на консолях, особенно с геймпадом.
- F3-меню, Pie chart, лаг-графики. На Bedrock этого нет. Диагностика производительности только со стороны Java.
- Команды. Bedrock рисует свой UI для команд (выпадашки, кнопки), но кастомные плагин-команды без аргумент-провайдера Brigadier выглядят как голый текст. Решается оборачиванием через Geyser API в форму.
Анти-чит и Bedrock
Тонкое место. Анти-читы вроде GrimAC и Vulcan написаны под Java-движок и считают физику исходя из Java-формул. Bedrock считает физику чуть иначе, и без exemptions Bedrock-игроки получают false-positive за MovementY или KnockbackUtil уже на первой минуте.
GrimAC начиная с 2.3.x официально поддерживает Floodgate и сам проставляет exempt при коннекте. Vulcan тоже умеет, но конфиг придётся править руками. Минимальный пример для Vulcan:
checks:
movement:
enabled: true
exempt-floodgate: true
combat:
reach:
exempt-floodgate: true
Совсем выключать анти-чит для Bedrock не надо: они всё равно могут читерить через сторонние клиенты вроде Horion или ToolBox. Но базовые movement-проверки придётся ослабить.
Префиксы в чате и LuckPerms
Чтобы Java и Bedrock было видно в чате, обычно вешают тег. Через LuckPerms это делается одной командой:
lp creategroup bedrock
lp group bedrock meta setprefix 10 "&e[B] "
lp creategroup java
lp group java meta setprefix 10 "&a[J] "
lp group default parent add java
Floodgate автоматически кидает Bedrock-игроков в группу bedrock, если в plugins/floodgate/config.yml включить default-group: bedrock (опция появляется через дополнения Floodgate, проверяйте версию). Альтернативно используйте плагин FloodgateExtras или slash-команду в EssentialsX:
# в EssentialsX-Discord или через скрипт на onJoin
on player_join:
if player has permission "floodgate.player":
add player to lp group "bedrock"
После этого в чате Bedrock-игроки выглядят как [B] .Steve и Java как [J] Alex. Удобно для модерации.
Производительность
Geyser сам по себе ест мало, в районе 10-30 МБ ОЗУ на запущенный плагин и микроскопическую долю CPU на трансляцию протокола. Floodgate ещё легче, его задача только проверить хэндшейк и сгенерировать UUID.
Основная нагрузка остаётся на Paper и мире. Bedrock-игроки шлют чанк-реквесты ровно так же как Java, и каждый чанк сервер обрабатывает один раз. Если у вас 8 ГБ ОЗУ хватало на 30 Java-игроков, вместе с Bedrock-аудиторией хватит на те же 30 человек суммарно, не больше. Geyser не магия, он не уменьшает реальную нагрузку.
Что стоит включить:
view-distance: 8вserver.properties. Bedrock на телефонах всё равно не отрисует больше восьми чанков плавно.network-compression-threshold: 256для Java-клиентов, на Bedrock этот параметр не влияет.- Pre-generation мира через Chunky до запуска SMP. Bedrock-клиенты на мобильной связи особенно чувствительны к лагам генерации.
FAQ
Geyser и Floodgate - в чём разница?
Geyser переводит протокол: пакеты Bedrock-клиента превращает в Java-пакеты, понятные серверу. Floodgate отвечает за авторизацию: Bedrock-игроку не нужен Java-аккаунт, Floodgate сам проверяет Xbox Live токен и пускает на сервер. Их ставят в паре. Без Floodgate Bedrock-клиент сможет подключиться к Geyser, но сервер его не пустит без Java-логина.
Можно ли сделать crossplay на Vanilla сервере?
На голом vanilla.jar нельзя, ни Geyser, ни Floodgate туда не ставится. Минимум нужен Paper, Purpur или Spigot, потому что плагин системы у Vanilla нет. Если вы хотите остаться "ванильным" по геймплею, поставьте Paper и просто не ставьте никаких других плагинов кроме Geyser и Floodgate. По механикам Paper очень близок к Vanilla.
Как зарегистрировать Bedrock игрока без Java-аккаунта?
Никак не нужно регистрировать вручную. Floodgate принимает Xbox Live токен с устройства игрока и сам генерирует UUID на основе xboxId. При первом заходе игрок просто появляется на сервере, у него уже есть свой UUID и имя с префиксом .. Если у вас включён AuthMe или другой плагин логина, его обычно отключают для Floodgate-игроков через auto-login: true или exempt по permission floodgate.player.
Bedrock players видят Java skins?
Зависит от пака. Java-скины это PNG 64x64, Bedrock использует свой формат скинов. Geyser конвертирует Java-скин в Bedrock-скин на лету, и Bedrock-клиенты видят примерно то же самое. Опция allow-third-party-capes: true в конфиге Geyser включает плащи. Один нюанс: 4D-модели и анимированные Bedrock-скины Java не показывает. Java увидит только текстуру тела, без частиц и анимаций.
Можно ли пускать Bedrock на тот же 25565?
Нет. Bedrock работает по UDP и RakNet, Java по TCP. Это разные транспорты, и слушать их одним сокетом нельзя. Geyser держит отдельный UDP-порт (по умолчанию 19132). Если хочется привычный 25565 для Bedrock, можно изменить bedrock.port на любой UDP-порт, но клиентам Bedrock придётся вводить порт вручную, а в Featured Servers списке UDP/19132 стандарт.
Что делать если плагины ломаются на Bedrock?
Сначала проверить, есть ли у плагина Bedrock-совместимая версия или Geyser-bridge. Для популярных вещей (ItemsAdder, Citizens, ProtocolLib) такие версии есть. Для редких плагинов проще обернуть UI через Geyser Form API: Bedrock игрокам показывается нативная форма, Java остаётся со старым chest GUI. Это разовая работа на стороне сервера.
Что дальше
Связку Geyser плюс Floodgate можно ставить на любой Paper-SMP за полчаса. Главное не забыть про UDP-порт в фаерволе, exempt в анти-чите и проверку основных GUI с Bedrock-устройства.
Дальше имеет смысл прокачать три вещи. Первое: настроить групповые префиксы в LuckPerms, чтобы модерация видела платформу. Второе: собрать общий ресурс-пак, протестировать его на телефоне отдельно и убедиться, что CMD-предметы видны обеим платформам. Третье: подложить под UDP-порт хоть какую-то DDoS-защиту, потому что Bedrock-сервер на голом IP это магнит для RakNet-флуда.
Protege tu servidor contra ataques DDoS
Protección gratuita con configuración en 5 minutos. 1 TB de tráfico incluido.
Probar gratisArtículos relacionados
Как скрыть IP Minecraft сервера: полный гайд
Открытый IP сервера - главная причина успешных DDoS-атак. Разбираем, как именно атакующие находят ваш реальный IP, и что сделать, чтобы его невозможно было вычислить.
Minecraft сервер в России 2026 - хостинг, защита и особенности
Подробный гайд по запуску и защите Minecraft сервера в России в 2026 году. Обзор хостинг-провайдеров, особенности российских провайдеров, варианты DDoS-защиты, оплата в рублях через СБП и специфика комьюнити СНГ-серверов.
Chunky: пред-генерация чанков в Minecraft и как убрать лаги от новых регионов
Плагин Chunky генерирует чанки заранее, чтобы во время игры сервер только читал готовые регионы с диска. Команды, расчёты и реальные тайминги.