RE:NODE

Minecraft11 мин чтения

Хостинг Minecraft Bedrock и Java: какой сервер запускать

Две разные программы, а не два издания: порты, файлы настроек, аддоны и плагины, ресурсы, мост Geyser и почему миры не переносятся между ними.

Обновлено

0 прочтений

С точки зрения сервера Java и Bedrock - не две версии одной игры. Это отдельные программы, написанные на разных языках, говорящие на разных протоколах на разных портах, хранящие миры в разных форматах и расширяемые разными средствами. Ошибиться с выбором - это миграция, а не настройка. Короткий ответ: если ваши игроки на консолях, телефонах или в версии из Microsoft Store, вам нужен Bedrock или мост. Если они на настольных компьютерах и вам нужны плагины, привата, права и вся экосистема инструментов, вам нужна Java. Если игроки бывают обоих видов, практический ответ для большинства компаний - сервер Java на Paper с Geyser и Floodgate перед ним, и в этой статье честно сказано, что это даёт и чего не даёт.

Две программы, а не два издания#

Различия структурные, а не косметические. Эта таблица - весь довод в сжатом виде.

Сервер Java EditionBedrock Dedicated Server
Что этоJar, запускаемый JVMНативный бинарный файл bedrock_server
Работает наГде угодно, где есть JavaТолько Linux x86-64 и Windows
Порт по умолчанию25565 TCP19132 UDP (и 19133 для IPv6)
ИгрокиНастольный лаунчерКонсоли, мобильные, Windows 10/11, устройства Fire
РасширяетсяПлагинами, модами, датапакамиАддонами и scripting API
Удалённое администрированиеRCON, необязательный и встроенныйНет. Только ввод в консоль
Формат мираФайлы регионов Anvil (.mca)LevelDB
max-players по умолчанию2010
Терпимость к версиямВы сами выбираете, когда обновлятьсяКлиенты обновляются сами, и сервер должен следовать

Две строки этой таблицы вредят больше остальных. Отсутствие ARM и macOS у Bedrock означает, что бинарному файлу сервера важнее, где он живёт, чем jar-файлу Java. И клиенты обновляются сами: телефон или консоль игрока Bedrock обновляется без него, и когда протокол меняется, зайти нельзя, пока не обновится и сервер. Сервер Java может простоять на 1.20.1 год, а игроки просто ставят эту версию в лаунчере. Сервер Bedrock сидит на гонке за релизами, которую не контролирует.

Всё решает, кто играет#

Всё остальное вторично. Спросите компанию, что у кого есть.

  • Консоли - Xbox, PlayStation, Switch. Bedrock, и только Bedrock. Клиента Java для консоли нет и не будет. Заметьте также, что консольные клиенты не позволяют вписать произвольный адрес сервера в интерфейсе; чтобы попасть на сторонний сервер, нужен помощник с DNS-перенаправлением в той же сети или одно из мобильных приложений, которые его предоставляют. В клиентах Windows, мобильных и Fire есть обычная кнопка Add Server с полями адреса и порта.
  • Телефоны и планшеты. Bedrock.
  • Игроки на компьютере, купившие игру на Minecraft.com. Оба, поскольку покупка включает Java и Bedrock на Windows. Стоит спросить, какой из них они обычно запускают.
  • Все, кто ставит моды или хочет плагины. Java. Тут не о чем спорить.

Честно говоря, Bedrock - издание для тех, кто издание не выбирал, а Java - для тех, кто выбирал. Семейный сервер для двух взрослых и троих детей на планшетах - это сервер Bedrock. Сообщество выживания с приватами, экономикой и мостом в Discord - это сервер Java. Компания, где половина на одном и половина на другом, - интересный случай, и Geyser - ответ на него.

Порты, адреса и как впустить людей#

Bedrock использует UDP. Java использует TCP. Один этот факт порождает больше тикетов «сервер работает, но никто не может зайти», чем всё остальное вместе взятое, потому что правило файрвола, написанное для одного, ничего не делает для другого. Общий случай разобран в статье порты игровых серверов простыми словами, а почему игры делятся на эти два протокола - в статье TCP и UDP для игровых серверов.

ПортПротоколКто использует
25565TCPИгровой трафик Java Edition
25565UDPПротокол query в Java, если enable-query=true
25575TCPRCON в Java, если enable-rcon=true
19132UDPИгровой трафик Bedrock и его query
19133UDPBedrock по IPv6

Адрес - другая половина. Клиенты Java выполняют поиск SRV, и именно поэтому на сервер на нестандартном порту можно зайти, набрав просто домен без порта - формат записи описан в статье SRV-записи для Minecraft. Клиенты Bedrock записи SRV не учитывают. Игроку Bedrock нужно назвать хост и порт как два отдельных поля, так что аккуратному play.example.com всё равно нужно 19132 рядом, если сервер не слушает на порту по умолчанию. Учтите это при выборе порта, а саму запись A смотрите в статье как привязать домен к игровому серверу.

На панельном хостинге каждый тариф называет число выделяемых портов, и у тарифов Minecraft здесь он один. Дополнительные вы добавляете на вкладке Network, и именно так поступают, когда рядом с портом Java нужен порт Bedrock, веб-карта или query и RCON на отдельных номерах.

Конфигурация: два файла server.properties#

Оба сервера хранят настройки в файле с именем server.properties, и у этих двух файлов почти нет ничего общего. Копировать ключи из руководства по Java в конфигурацию Bedrock - популярный способ потерять вечер.

Java: server.properties
server-port=25565max-players=20view-distance=8simulation-distance=6online-mode=truewhite-list=falseenable-rcon=falsespawn-protection=16
Bedrock: server.properties
server-port=19132server-portv6=19133max-players=10view-distance=32tick-distance=4online-mode=trueallow-list=falsedefault-player-permission-level=membermax-threads=8

Несколько особенностей Bedrock, которые не очевидны из названий ключей:

  • `view-distance` по умолчанию равен `32`, это огромно, и это первое, что стоит уменьшить на загруженном сервере. tick-distance - радиус симуляции, по умолчанию 4, диапазон от 4 до 12; это аналог simulation-distance из Java, и он уже консервативен.
  • `allow-list` - более новое название того, что раньше называлось white-list, а файл называется allowlist.json, а не whitelist.json. В старых руководствах используются старые названия.
  • `default-player-permission-level` принимает visitor, member или operator. Операторы задаются в permissions.json по XUID из Xbox Live, а не по имени.
  • `max-threads` ограничивает число рабочих потоков; 0 означает использовать всё, что есть у машины.

У файлов Java ops.json, whitelist.json, banned-players.json и banned-ips.json есть прямые аналоги в Bedrock - permissions.json и allowlist.json, но идентификаторы различаются: Java использует UUID аккаунтов, Bedrock - XUID. Файл Java целиком разобран в статье все ключи server.properties.

Плагины, аддоны и от чего отказывается каждая сторона#

Здесь две экосистемы перестают быть сопоставимыми.

У Java есть плагины, происходящие от Bukkit, - пятнадцать лет накопленных инструментов: права, привата, журнал блоков с откатом, экономики, веб-карты, античит, профилировщики, мосты в Discord. Они работают только на стороне сервера, так что игроки заходят с немодифицированным клиентом. Отдельно есть моды, которые меняют саму игру и требуют, чтобы каждый игрок установил сборку. И есть датапаки, которые работают и на плагинных серверах, и на ванильном. Это разделение разобрано в статье Paper, Fabric или vanilla, а короткий список того, что окупается, - в статье плагины, которые стоит установить.

У Bedrock есть аддоны: behaviour packs и resource packs, которые кладут в behavior_packs/ и resource_packs/ и включают для каждого мира через world_behavior_packs.json. Они могут менять текстуры, перебалансировать, добавлять сущности и предметы и - через scripting API, то есть JavaScript, работающий внутри behaviour pack, - делать на удивление много настоящей логики. Чего они не могут - большей части того, что нужно администратору сервера. Нет официальной системы приватов, нет отката гриферства, нет прав, кроме трёх уровней, нет каркаса экономики.

Неофициальное серверное ПО для Bedrock существует - PocketMine-MP и Nukkit давно на рынке, - и у него действительно есть API плагинов. Загвоздка в том, что оба заново реализуют протокол с нуля, а значит, после каждого обновления отстают от официальных релизов и не реализуют каждую ванильную возможность. Для сети мини-игр это разумный компромисс, а для мира выживания - плохой.

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

Ресурсы, производительность и во что обходится каждый#

Bedrock написан на C++, а Java - нет, и это видно по памяти. Нет кучи, которую нужно настраивать, нет сборщика мусора, который нужно конфигурировать, нет -Xmx, который можно задать неверно. Серверу Bedrock для горстки игроков хватает от 1 до 2 ГБ; той же группе на Java нужно от 2 до 4 ГБ с учётом накладных расходов самой JVM.

ИгрокиBedrockJava (Paper)
2-51-2 GB2 GB
10-202-4 GB4 GB
20-404-6 GB6-8 GB

Не читайте эту таблицу как «Bedrock дешевле, запускайте Bedrock». Разница в памяти - один тариф, а разница в инструментах - это всё. Bedrock действительно выигрывает на самом малом конце: семейный сервер с числом игроков размером с планшет работает почти ни на чём.

Оба упираются в один поток симуляции и в объём одновременно загруженного мира, так что инстинкты настройки переносятся, хотя названия ключей - нет. Сначала уменьшайте дальность прорисовки, а потом покупайте память; это верно с обеих сторон. Арифметика для Java целиком - в статье сколько RAM нужно серверу Minecraft, и большая часть рассуждений применима к Bedrock, если убрать раздел про кучу.

Geyser и Floodgate: мост и его пробелы#

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

TCP 25565UDP 19132Игроки Javaнастольный лаунчерИгроки Bedrockконсоль, телефон, Win10Geyserслушает UDP 19132Floodgateаккаунт Java не нуженСервер PaperTCP 25565
Один сервер Paper, оба вида клиентов

Geyser работает как плагин на Paper, как плагин на прокси Velocity или BungeeCord, как мод на Fabric или NeoForge либо отдельно на собственной машине. Проще всего путь плагина: положите jar в plugins/, запустите один раз, чтобы сгенерировался config.yml, задайте bedrock.port и режим аутентификации, перезапустите. Floodgate требует key.pem, общий с Geyser, и по умолчанию ставит перед именами игроков Bedrock точку, чтобы они не пересекались с именами Java. Практическое требование к хостингу - дополнительный порт: Geyser нужен UDP 19132 в дополнение к порту TCP сервера Java, добавленный на вкладке Network.

Чего он не делает - и каждый из этих пунктов стоит проверить, прежде чем что-либо обещать:

  • Моды не переводятся. Geyser говорит на ванильном протоколе Java. Сервер Forge или Fabric с собственным содержимым таким способом недоступен.
  • Модели предметов и некоторые интерфейсы плагинов сыроваты. Плагины с меню инвентаря, кастомные головы и графика предметов на основе ресурс-паков - обычные источники жалобы «на моём телефоне выглядит неправильно».
  • Движение отличается. Правила движения и установки блоков в Bedrock не идентичны правилам Java, и античит-плагины на основе движения дают ложные срабатывания на игроках Bedrock, пока их не настроят под это.
  • Ресурс-паки - отдельный конвейер. Ресурс-пак Java - не ресурс-пак Bedrock, так что визуальное соответствие означает поддержку двух.

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

Миры не переносятся между ними#

Anvil и LevelDB на диске разные и различаются тем, что могут выразить. Скопировать папку мира из одного в другой нельзя, а существующие конвертеры работают с потерями.

Люди пользуются Chunker, конвертером в браузере, и Amulet, настольным редактором миров. Оба переносят рельеф и большинство блоков. Обычно не переживает перенос следующее:

  1. Командные блоки и функции. Синтаксис команд пересекается, но не совпадает, и всё хитрое придётся переписывать.
  2. Данные плагинов и модов. Привата, магазины, журналируемые блоки и кастомные предметы живут в базах данных и NBT, о которых другое издание не имеет понятия.
  3. Блоки без аналога. Два издания разошлись в горстке блоков и состояний блоков, и конвертер выбирает что-то разумное.
  4. Крайние случаи NBT сущностей и инвентаря. Именованные предметы, кастомные зелья и всё, что плагин записал вручную.

Считайте конвертацию односторонней миграцией с ручной починкой после, а не синхронизацией. Конвертируйте копию, пройдитесь по важным постройкам и храните оригинальный мир вечно. Привычка, благодаря которой это переживаемо, описана в статье резервные копии, которые действительно восстанавливаются, и перед началом стоит сделать заблокированную копию, а не копию в той же папке.

Ещё одна причина решить заранее - гонка версий. Сервер Java обновляется, когда вы решите, по процедуре и с откатом. Сервер Bedrock обновляется, когда выпускает Mojang, потому что клиенты уже обновились.

FAQ#

Могут ли игроки Bedrock и Java заходить на один сервер?

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

Дешевле ли запускать сервер Bedrock, чем Java?

Немного. Кучи JVM нет, так что небольшой сервер Bedrock помещается в 1-2 ГБ там, где Java нужно 2-4. Разница обычно в один тариф, что меньше, чем звучит, рядом с разницей в том, что вы можете делать с сервером.

Почему моя Xbox не видит сервер?

В консольных клиентах нет поля для произвольного адреса сервера. Игроки используют либо помощник с DNS-перенаправлением в той же сети, либо сопутствующее мобильное приложение, которое его предоставляет, либо Realm. В клиентах Windows, мобильных и Fire есть обычный пункт Add Server с хостом и портом.

Что открывать - TCP или UDP?

Java - это TCP на 25565. Bedrock - UDP на 19132, а его слушатель IPv6 - UDP на 19133. Правило, написанное не для того протокола, - самая частая причина того, что сервер прекрасно запустился, а достучаться до него никто не может.

Можно ли преобразовать мой мир Bedrock в Java?

С конвертером вроде Chunker или Amulet - в основном да. Рельеф и обычные блоки переживают. Командные блоки, данные кастомных сущностей и всё, что записал плагин или аддон, - нет. Конвертируйте копию, как следует проверьте её и храните оригинал.

Поддерживает ли Bedrock плагины?

Официально нет. Аддоны - behaviour packs, resource packs и scripting API - это поддерживаемый способ менять игру, и содержимое они покрывают гораздо лучше, чем администрирование. Стороннее серверное ПО вроде PocketMine-MP и Nukkit плагины предлагает, ценой отставания от официальных релизов.


Комментарии

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

0/2000