
Играйте в Minecraft в браузере с prismarine-web-client
prismarine-web-client (PrismarineJS/prismarine-web-client)
Клиент Minecraft для запуска в браузере
Хотели ли вы когда-нибудь присоединиться к серверу Minecraft со школьного Chromebook, заимствованного ноутбука или любого устройства без установленной игры? prismarine-web-client решает именно эту проблему. Он запускает настоящий клиент Minecraft в вкладке браузера и подключается к реальным серверам Minecraft, без локальной установки со стороны игрока.
Что такое prismarine-web-client
Это не упрощённый 2D клон и не какая-то аппроксимация Minecraft эпохи Flash. Это подлинный браузерный клиент, построенный на двух хорошо зарекомендовавших себя библиотеках PrismarineJS: mineflayer обрабатывает протокол Minecraft и логику клиента, а prismarine-viewer отображает 3D мир. Вместе они создают что-то, что действительно работает.
Проект имеет 539 звёзд на GitHub с лицензией MIT, что означает, что вы можете свободно использовать, форкировать и изменять его как угодно. Он написан на JavaScript, что является одной из причин, почему запуск его в браузере вообще возможен. Экосистема PrismarineJS существует уже много лет и питает множество инструментов автоматизации сообщества и ботов, поэтому это не какой-то выходной проект с разломанной цепочкой зависимостей.
На GitHub Pages размещена живая демонстрация. Откройте её в Chrome или Firefox на рабочем столе прямо сейчас и подключитесь к серверу без установки чего-либо. Это самый простой вариант использования, и честно говоря, хороший способ понять, с чем вы имеете дело, перед тем как беспокоиться о самостоятельном размещении.
Технология под капотом (и почему это умно)
Вот где становится по-настоящему интересно. Протокол Minecraft работает через TCP, а браузеры просто не могут открывать сырые сокеты TCP. Так как же браузерный клиент вообще может подключиться к реальному серверу Minecraft?

Ответ - слой прокси, который запускается локально. Ваш браузер подключается к этому прокси через WebSocket. Затем прокси переводит этот трафик WebSocket в TCP и перенаправляет всё на целевой сервер Minecraft. С точки зрения сервера, это просто очередной клиент, подключающийся обычным образом. Он не знает, что вы делаете это из вкладки браузера.
Эта архитектура умна, потому что большая часть кода клиента работает в вашем браузере (логика mineflayer, 3D рендеринг), а прокси обрабатывает единственное, что браузеры принципиально не могут делать. Это чистое разделение. Прокси легковесен и поставляется с npm пакетом, поэтому нечего дополнительно настраивать отдельно.
Стоит отметить: кто-то должен запустить этот прокси где-нибудь. В размещённой демонстрации есть прокси-сервер на стороне сервера. Для самостоятельного размещения он работает на вашей машине.
Установка самостоятельно
Если у вас установлен Node.js, вся установка займёт около минуты. Установите пакет глобально и запустите его:

npm install -g prismarine-web-client
prismarine-web-client<! - gh-code-end - >
После этого откройте http://localhost:8080 в браузере. Вы увидите экран подключения, запрашивающий адрес сервера и имя пользователя. Введите их и нажмите подключиться.
Есть несколько вещей, которые нужно понять перед началом. Это запускает прокси-сервер на вашей локальной машине. Любой на этой машине может использовать его через localhost, но он не будет доступен другим, если вы не откроете порт. Если вы хотите поделиться им с друзьями в локальной сети, вам нужно привязать адрес к вашему IP локальной сети и попросить их подключиться к адресу вашей машины на порту 8080. Возможно, но требует базовых знаний сетей.
Для разработки или если вы хотите разобраться в коде, клонируйте репозиторий и запустите:
<! - gh-code-start - >npm install
npm start<! - gh-code-end - >
Это запускает express и webpack в режиме отслеживания. Сохраните файл, он пересоберётся за несколько секунд, и вы обновляете страницу, чтобы увидеть изменения. Проект также предоставляет несколько полезных глобальных переменных на объекте window для отладки, включая bot, viewer и worldView. Если вы откроете DevTools Chrome и введёте bot.chat('test') в консоль, вы можете использовать внутриигровой чат прямо оттуда. Это приятный штрих для тех, кто хочет разобраться в том, как всё работает.
Что работает прямо сейчас
Версия 1.6.0 хорошо обрабатывает основной цикл исследований. Блоки отображаются корректно, движение работает в реальном времени, мобы и другие игроки отображаются, и вы можете размещать и разбивать блоки. Для случайного исследования или лёгкого строительства без полного клиента Java это действительно функционально.

Чего ещё нет: управление инвентарём, сундуки и контейнеры, звуки и большинство боевых взаимодействий. В дорожной карте проекта всё это указано как планируемое. Так что если вы представляете себе полный выживаемый геймплей с крафтом, чарованием и торговлей жителями, версия 1.6.0 это не покроет.
Это не критика. Отображение мира Minecraft в реальном времени в вкладке браузера, подключённого к живому серверу, само по себе технически впечатляет. Разрыв между "рабочим клиентом исследования" и "полной паритетностью с Java клиентом" огромен, и то, что они отправили, твёрдо для того, что они ставят перед собой.
Одно практическое использование, пока вы уже в режиме браузера: если вы столкнётесь с блоками, которые не узнаёте, инструмент поиска блоков на Minecraft.How полезен для быстрого поиска без необходимости переключаться на другое приложение.
Что вас может потрясти
Совместимость версий - это самая большая проблема. prismarine-web-client работает со специфическими версиями протокола Minecraft через слой mineflayer снизу. Если сервер, к которому вы подключаетесь, работает на версии, которая не поддерживается, вы получите ошибку подключения без чёткого объяснения. Проверьте GitHub проекта, какие версии поддерживает текущий релиз, потому что этот список меняется по мере того, как команда PrismarineJS обновляет поддержку протокола.

Несколько других распространённых проблем, которые стоит знать заранее:
- Аутентификация на премиум-серверах. Серверы в онлайн-режиме (те, которые проверяют вашу учётную запись в Mojang/Microsoft) более сложны для подключения через эту настройку. Демонстрация и большинство самостоятельно размещённых развёртываний работают чище с офлайн-серверами, где вы выбираете любое имя пользователя и подключаетесь прямо.
- Производительность в занятых местах. Это настоящий 3D рендер, работающий в вкладке браузера. Плотная местность, большое количество сущностей и переполненные серверы заметно нагружают процессор браузера сильнее, чем открытые площади с несколькими сущностями.
- Только браузеры на рабочем столе. Chrome и Firefox на рабочем столе - это подтвержденные платформы. Поддержка мобильного браузера отсутствует, и учитывая сложность схемы управления и требования к рендерингу, она не появится в ближайшее время.
- Держите прокси в работе. Если вы самостоятельно размещаете и процесс падает, страница браузера не может ни к чему подключиться. Если вы регулярно используете это, настройка его как постоянного фонового сервиса стоит дополнительного шага.
Одно, в чём я ошибался раньше при попытке: я предполагал, что это работает только с крошечными локальными или личными серверами. Он подключается к любому серверу, который прокси может достичь через TCP, включая более крупные публичные, если версия Minecraft совпадает и аутентификация не является препятствием.
Стоит ли вашего времени или нет
Это полностью зависит от того, что вам это нужно. Как решение "играйте в Minecraft где угодно без установки клиента", оно работает в пределах своих текущих ограничений. Исследование и базовое взаимодействие с блоками действительно используемы. Полный режим выживания, пока нет.

Для администраторов серверов, желающих быстро войти на свой сервер с машины без установленной игры, это на самом деле очень практично. Без лаунчера, без запроса учётной записи на офлайн-серверах, просто откройте браузер и подключитесь. Проверка того, как выглядит сборка или правильно ли появляются мобы, не требует полного опыта клиента.
И пока вы уже в браузере, если вы ищете скин для использования на сервере, браузер скинов на Minecraft.How имеет хорошую коллекцию для исследования.
Основные альтернативы, о которых стоит знать: Eaglercraft - самый известный браузерный проект Minecraft, хотя вокруг него есть своя история и вопросы совместимости. Для чистого просмотра мира без игры стоит отдельно знать prismarine-viewer как отдельную библиотеку. И mineflayer, на котором построен этот проект, это инструмент для создания скриптов ботов Minecraft, а не для ручной игры.
Для проекта с открытым исходным кодом, лицензированного MIT и делающего что-то технически столь интересное, 539 звёзд кажется, что он остаётся под радаром. Если вариант использования подходит, пять минут, чтобы его попробовать, потрачены хорошо.
<! - gh-polish-start - > <! - gh-polish-end - >

