RE:NODE

Minecraft10 мин чтения

Голосовой чат по расстоянию в Minecraft

Как добавить голосовой чат по расстоянию на сервер Minecraft с Simple Voice Chat: UDP-порт, voice_host, ключи конфига, группы, ограничения Bedrock и работа за прокси.

0 прочтений

Голосовой чат по расстоянию в Minecraft - это мод или плагин на сервере и соответствующий мод в клиенте каждого игрока. Большинство серверов используют Simple Voice Chat: на Paper он работает как плагин, а на Fabric, NeoForge и Forge - как мод, и ему нужна одна дополнительная вещь, которую большинство гайдов пропускают, - собственный UDP-порт, по умолчанию 24454, доступный из интернета. Установите серверную часть, откройте или выделите порт, укажите плагину адрес, который должны использовать игроки, если он отличается от игрового, и попросите каждого игрока поставить клиентский мод. Игроки Bedrock, заходящие через Geyser, пользоваться им не могут вообще, и это ограничение нужно понимать до того, как строить сообщество вокруг голоса.

Как работает голос по расстоянию#

Своего голосового чата в Minecraft нет, поэтому голосовые моды держат второй канал рядом с игровым соединением:

игровой протокол, TCPаудиопакеты, UDPкто где находитсязвук в радиусеКлиент игрокаигра + голосовой модСервер MinecraftTCP 25565Голосовой серверUDP 24454Игрок рядомслышит по расстоянию
Игровой и голосовой трафик идут разными путями

Клиентский мод захватывает ваш микрофон, кодирует звук в Opus и отправляет его по UDP на голосовой сервер, который работает внутри процесса сервера Minecraft. Сервер знает позицию каждого игрока, поэтому пересылает ваш звук только тем, кто в радиусе, а их клиенты воспроизводят его с вашего направления и с затуханием. Игровое соединение используется для согласования голосовой сессии - через него клиент узнаёт адрес и секрет для голосового канала, - но сам звук никогда не идёт по TCP-соединению игры.

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

Simple Voice Chat, Plasmo Voice и альтернативы#

ВариантСерверная частьКлиентская частьПримечания
Simple Voice ChatПлагин Paper или мод Fabric/NeoForge/ForgeНужен модСамый распространённый, много аддонов
Plasmo VoiceПлагин Paper или модНужен модДругая экосистема аддонов, свой конфиг
Discord или другие голосовые приложенияНичегоНичегоНет зависимости от расстояния, зато работает у всех

Simple Voice Chat (автор henkelmax) - вариант по умолчанию, потому что он есть на всех платформах, у него простой конфиг и он поддерживает не только расстояние, но и группы. Plasmo Voice - основная альтернатива с похожей архитектурой и собственным набором аддонов; принципы портов и подключения ниже относятся и к нему, только со своим файлом конфига и ключами.

Голос по расстоянию меняет то, как играется сервер. Серверы выживания становятся социальными так, как текстовому чату никогда не удаётся; ролевые и хоррор-карты превращаются в другие игры. Меняется и модерация - об этом ниже.

Установка Simple Voice Chat на сервер#

На Paper: скачайте сборку Simple Voice Chat для Bukkit/Paper под вашу версию Minecraft и положите jar в plugins/. На Fabric или NeoForge: сборка мода под ваш загрузчик кладётся в mods/, вместе с Fabric API, если на странице мода сказано, что он нужен.

Запустите сервер один раз. Конфиг создаётся здесь:

ПлатформаФайл конфига
Paper, Spigotplugins/voicechat/voicechat-server.properties
Fabric, NeoForge, Forgeconfig/voicechat/voicechat-server.properties

Важные ключи:

voicechat-server.properties
port=24454bind_address=voice_host=max_voice_distance=48.0whisper_distance=24.0codec=VOIPmtu_size=1024keep_alive=1000enable_groups=trueallow_recording=trueforce_voice_chat=false

За что отвечает каждый ключ:

  • `port` - UDP-порт, на котором слушает голосовой сервер. Последние версии принимают и -1, то есть «тот же номер порта, что у сервера Minecraft»; это работает, потому что игра использует на этом номере TCP, а голос - UDP. Полезно ли это, зависит от хостера, см. следующий раздел.
  • `bind_address` - на каком локальном адресе слушать. Пусто - на всех. Оставьте пустым, если только вы не знаете, что у машины несколько адресов и нужен конкретный.
  • `voice_host` - адрес, к которому клиенты должны подключаться для голоса, если он отличается от адреса, по которому они зашли в игру. Пусто означает «тот же хост, что у игры, на port». Подробно ниже.
  • `max_voice_distance` - на сколько блоков разносится обычная речь. По умолчанию 48. Меньшее значение делает разговоры локальнее, а людные спавны тише.
  • `whisper_distance` - радиус шёпота.
  • `codec` - VOIP, AUDIO или RESTRICTED_LOWDELAY. VOIP настроен на речь и является правильным значением по умолчанию.
  • `mtu_size` - максимальный размер пакета. Уменьшите, если голос подключается, но в некоторых сетях звук прерывается.
  • `enable_groups` - позволяет игрокам создавать группы, которые слышат друг друга независимо от расстояния. Популярная функция; отключите, если нужен строго голос по расстоянию.
  • `allow_recording` - можно ли клиентам записывать голос. Некоторые сообщества это отключают.
  • `force_voice_chat` - кикает игроков, зашедших без мода. Используйте, только если голос действительно необходим серверу.

Точные значения по умолчанию меняются от релиза к релизу; сгенерированный файл снабжён комментариями, и он главный источник для вашей версии. После изменений перезапустите сервер.

Порт и voice_host#

Если голос не подключается, это почти всегда проблема с портом. Клиент получает от сервера адрес голоса и шлёт туда UDP; если там ничего доступного не слушает, клиент показывает состояние «voice chat not connected», а игра при этом работает идеально.

На собственной машине откройте 24454/udp в файрволе и пробросьте его на роутере, если хостите дома. У хостера с панелью нужен выделенный порт для голоса, потому что каждый сервер может слушать только на выданных ему портах. В RE:NODE в тарифы Minecraft входит один порт, а ещё один добавляется на вкладке Network; укажите в port выданный вам номер.

Этот номер часто не 24454. Хостеры выделяют то, что свободно, так что голосовой порт у вас может быть 25632, а игра - на 25565. Укажите в port выделенный номер. Клиенты узнают его от сервера автоматически, так что игрокам ничего вводить не нужно.

voice_host нужен, когда адрес, по которому игроки заходят в игру, - не тот адрес, куда должен идти голос. Типичные случаи:

  1. SRV-запись или домен. Игроки заходят на mc.example.com, который через SRV разрешается в node.host.example:25565. Голос по умолчанию идёт на тот хост, к которому подключился клиент, - это работает, если у mc.example.com есть ещё и A-запись на ту же машину, и не работает, если есть только SRV. Укажите в voice_host адрес, который разрешается напрямую.
  2. Прокси перед сервером. Игроки подключаются к прокси, а голос работает на бэкенде. На каждом бэкенде укажите в voice_host публичный адрес бэкенда и его голосовой порт (следующий раздел).
  3. Туннель или сервис проброса. Игровой адрес принадлежит туннелю, а голосового порта там нет. Укажите в voice_host то место, где UDP-порт действительно доступен.
properties
voice_host=play.example.com:25632

voice_host может включать порт, и тогда он переопределяет port в том, что сообщается клиентам. Если вписываете сюда имя хоста, оно должно разрешаться в адрес сервера; почему одних SRV-записей недостаточно ни для чего, кроме самой игры, объясняется в статьях DNS-записи простыми словами и SRV-записи для Minecraft.

Клиенты, версии и игроки Bedrock#

Каждому игроку, которому нужен голос, нужен клиентский мод Simple Voice Chat под его версию Minecraft и загрузчик: Fabric (с Fabric API), NeoForge или Forge. Ванильные клиенты голосом пользоваться вообще не могут; играть они по-прежнему могут, но не слышат и не слышны, если только force_voice_chat не закрывает им вход.

  • Версии должны быть совместимы. Сетевой протокол мода время от времени меняется. Клиентский мод намного старше или новее серверного может подключиться к игре, но не запустить голос. Сообщите игрокам, какую версию ставить.
  • Модпаки, в которых Simple Voice Chat уже есть на клиенте, решают это за вас, и это одна из причин, почему голос так распространён на модовых серверах.
  • Серверам Paper всё равно нужен клиентский мод у каждого игрока; плагин - только серверная половина.

Игроки Bedrock им пользоваться не могут. Игроки, заходящие на Java-сервер через Geyser, сидят на клиентах Bedrock, которые не умеют загружать Java-моды. Клиентской установки для них нет. В голосе они будут немыми и глухими, а в сообществе, построенном вокруг голоса, фактически станут игроками второго сорта. Если значительная часть вашего сообщества играет с телефонов или консолей, единственный вариант, доступный всем, - голос в Discord или другом внешнем приложении. Другие вещи, которые не переносятся между платформами, перечислены в статье Geyser и Floodgate.

Голос за прокси#

В сети на Velocity или BungeeCord прокси пересылает трафик Minecraft, но не голосовой UDP. Есть два способа заставить это работать:

Голос на каждом бэкенде с прямым доступом. Каждый бэкенд запускает Simple Voice Chat на своём выделенном UDP-порту, а voice_host указывает на публичный адрес и порт этого бэкенда. Когда игрок переходит на другой сервер, его клиент переподключает голос к новому бэкенду. Это самая простая схема у хостера с панелью, где каждый бэкенд - отдельный сервер со своими портами.

Голос через прокси. В последних версиях Simple Voice Chat есть поддержка прокси, которая пересылает голос через прокси, и игрокам нужно достучаться только до адреса прокси. Сверьтесь с документацией мода для вашей версии: нужна соответствующая сборка на прокси и правильная настройка voice_host на бэкендах, а прокси добавляется в путь звука.

В обоих случаях голос привязан к бэкенду: игроки в лобби не слышат игроков на выживании. Группы тоже не работают между серверами. Остальная настройка сети описана в руководстве по сети на Velocity.

Трафик, CPU и ресурсы#

Для сервера голос - лёгкая нагрузка. Каждый говорящий игрок отправляет поток маленьких пакетов Opus, десятки килобит в секунду, а сервер копирует каждый пакет игрокам в радиусе. Молчащие игроки почти ничего не отправляют. Сервер не декодирует и не смешивает звук, он пересылает пакеты. Нагрузка на основной поток пренебрежимо мала, потому что голосовой сервер работает в своих потоках.

Где это накапливается:

  • Людные спавны. Тридцать игроков в одном месте в радиусе друг друга означают, что каждый пакет уходит двадцати девяти людям. Трафик растёт примерно как квадрат размера толпы. Помогает меньший max_voice_distance.
  • Группы пересылают звук каждому участнику независимо от расстояния.

Даже так сервер на сто игроков с голосом по меркам игровых серверов даёт скромную нагрузку на канал. Сравнение с другими играми - в статье трафик на одного игрока.

Модерация, аддоны и права#

Голос модерировать сложнее, чем текст: лога нет, и единственные доказательства - записи. Заложите это в план:

  • Права. На Paper у плагина есть узлы прав вроде voicechat.listen, voicechat.speak и voicechat.groups, которые можно снять с группы или отдельного игрока через LuckPerms - по сути голосовой мут.
  • Правила. Напишите правила для голоса: никакой музыки через микрофон, никакого крика, никаких оскорблений. Игроки должны знать, что жалобы на голос рассматриваются так же серьёзно, как жалобы на чат.
  • Доказательства. С allow_recording=true игроки могут записывать и присылать фрагменты. Это полезно для модерации и одновременно касается приватности; упомяните это в правилах.

Популярные аддоны из той же экосистемы - AudioPlayer (собственные музыкальные пластинки и козьи рога, звучащие через голос) и Voice Chat Interaction (голос активирует скалк-сенсоры), плюс клиентские звуковые моды, добавляющие реверберацию и заглушение звука препятствиями. Серверные аддоны ставятся рядом с основным плагином или модом; клиентские - выбор каждого игрока.

Устранение проблем#

Значок голоса у всех показывает «not connected». Порт недоступен. Проверьте выделенный порт, проверьте, что port с ним совпадает, что это UDP, и перезапустите. Поищите в консоли сервера при запуске строку, где голосовой сервер сообщает, на каком порту слушает.

Работает у игроков из той же сети, у остальных нет. Домашний хостинг с пробросом порта только для TCP, или voice_host указывает на локальный адрес.

Работает по IP, но не по домену. У домена только SRV-запись. Укажите в voice_host имя хоста с A-записью или IP.

Подключается, но звук прерывается. Потеря пакетов или фрагментация. Уменьшите mtu_size и проверьте соединение самого игрока - как это определить, показано в статье задержка, джиттер и потеря пакетов.

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

Голос пропадает после перехода между серверами в сети. У нового бэкенда неверный voice_host или не выделен порт.

FAQ#

Какой порт использует Simple Voice Chat?

По умолчанию UDP 24454, задаётся через port в voicechat-server.properties. На хостинге это обычно тот дополнительный порт, который вам выделили, и сервер автоматически сообщает клиентам правильный.

Нужно ли игрокам что-то устанавливать?

Да. Каждому игроку, которому нужен голос, нужен клиентский мод Simple Voice Chat под его версию Minecraft и загрузчик. Игроки без него могут играть, но не слышат и не могут говорить.

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

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

Вызывает ли голосовой чат лаги на сервере?

Ни в одной нормальной конфигурации. Голосовой сервер работает вне основного потока и только пересылает пакеты. Он расходует часть канала, и расход растёт с размером толпы, но на TPS это не влияет.

Можно ли использовать Simple Voice Chat на сервере Paper без модов?

Серверная часть - обычный плагин Paper, так что серверу загрузчик модов не нужен. А вот игрокам по-прежнему нужен клиентский мод, то есть модовый клиент, например Fabric с установленным модом.


Комментарии

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

0/2000