Перейти к основному содержимому

ResourcePackManager (RSPM)

ResourcePackManager обнаруживает, объединяет, размещает и распространяет ресурс-паки от поддерживаемых плагинов и от вручную добавленных паков. Он также может преобразовать собранный Java-пак в ресурс-пак Bedrock, чтобы игроки GeyserMC видели то же пользовательское содержимое, что и игроки Java, и поставляется с первоклассной поддержкой прокси-сетей BungeeCord и Velocity.

Что он делает​

  • обнаруживает паки поддерживаемых плагинов и объединяет их в соответствии с priorityOrder
  • запускает собственный встроенный HTTP-сервер, чтобы самостоятельно хостить собранный пак (внешний файловый хост не требуется)
  • может откатиться на бесплатный хостинг MagmaGuy (авто-хост), когда self-host невозможен
  • может принудительно или по желанию запрашивать использование пака
  • следит за изменениями паков и автоматически пересобирает, когда источники стабилизируются
  • преобразует собранный Java-пак в ресурс-пак Bedrock для GeyserMC
  • регистрирует настоящие кастомные Bedrock-сущности в Geyser через встроенное расширение Geyser, поэтому смоделированные сущности (например, FreeMinecraftModels, EliteMobs) отображаются и анимируются для игроков Bedrock
  • работает в прокси-сетях: участвующие бэкенды создают Bedrock-паки, а прокси-плагин обнаруживает, загружает и объединяет их, затем раздаёт результат через Geyser
  • связывает сеть без единого ключа для вставки: прокси владеет сетевым ключом, сохраняет его в собственный файл network-key и автоматически отправляет каждому бэкенду при первом подключении туда игрока
  • умеет поддерживать себя в актуальном состоянии по всей сети: бэкенды предлагают универсальный jar плагина по аутентифицированному маршруту; прокси проверяет его структуру и версию, отказывается от понижения версии, сверяет переданные байты по SHA-256 и размещает его до следующего выключения

Архитектура в двух словах​

RSPM v2 — это многомодульная Maven-сборка, но поставляется он как единственный jar: ResourcePackManager.jar. Этот один jar содержит сразу плагин для Bukkit/Paper, плагин для Velocity и плагин для BungeeCord — Minecraft загружает ту точку входа, которая соответствует платформе, на которой он работает. Больше нет отдельных файлов ResourcePackManager-Velocity.jar / ResourcePackManager-BungeeCord.jar, которые нужно было бы извлекать.

Папка proxy-extension/ по-прежнему существует, но теперь означает другое: когда бэкенд замечает, что он стоит за прокси и ему ни разу не выдавали сетевой ключ, он выкладывает побайтово идентичную копию собственного работающего jar в plugins/ResourcePackManager/proxy-extension/ResourcePackManager.jar и просит вас скопировать именно этот файл на прокси. Это удобная копия jar, который у вас уже есть, а не отдельный артефакт под конкретную платформу.

Один и тот же jar играет две роли в зависимости от того, куда вы его положите:

  • Как серверный плагин (на каждом Paper/Spigot-бэкенде) — микширует Java-паки, запускает Bedrock-конвертер, хостит пак, открывает небольшой HTTP-сервер и отправляет паки Java-клиентам.
  • Как прокси-плагин (на прокси Velocity или BungeeCord) — забирает Bedrock-пак и маппинги каждого бэкенда, объединяет их в единый общесетевой пак и раздаёт Bedrock-клиентам через Geyser прокси.

На отдельном сервере достаточно установить jar на бэкенде. В прокси-сети тот же jar нужен на прокси и на бэкендах, которые предоставляют ресурс-паки. Зарегистрированные на прокси серверы без RSPM не задерживают раздачу паков. См. Обнаружение бэкендов.

Тот же jar также работает как расширение Geyser. Когда бэкенд обнаруживает локальную установку Geyser-Spigot, он кладёт ровно тот же универсальный ResourcePackManager.jar в Geyser-Spigot/extensions/, чтобы Geyser мог рендерить кастомные Bedrock-сущности RSPM; прокси-роль делает то же самое для Geyser на прокси. (В более старых версиях поставлялся отдельный ResourcePackManager-GeyserBridge.jar — этот файл упразднён и заменяется автоматически через очередь обновлений Geyser.) См. Расширение Geyser и кастомные сущности.

Варианты хостинга​

Доставка Java-пака использует такой приоритет:

  1. Принудительный собственный хостинг (selfHostForce: true) — переопределяет autoHost и selfHostEnabled, пропускает проверки доступности и удалённую загрузку. В основном для тестирования. До объявления URL его проверка и запуск HTTP-сервера всё равно должны пройти успешно.
  2. При autoHost: true, preferSelfHost: true и selfHostEnabled: true RSPM сначала пробует собственный хостинг на отдельных серверах и бэкендах прокси. Проверяет адрес, сравнивает образцы пака, скачанные через localhost и точный URL игрока, и требует внешней доступности до объявления URL. Сбой или невозможность проверки приводит к удалённому хостингу. Прокси продолжает получать Bedrock-артефакты с HTTP-сервера бэкенда.
  3. Удалённый резерв — если собственный хостинг отключён или проверка не пройдена, RSPM повторно использует или загружает пак на magmaguy.com/rsp/ и объявляет этот URL. Удалённый сбой может привести к собственному хостингу при selfHostEnabled: true, но с теми же проверками. При отказе обоих автоматических путей новый URL доставки не объявляется.

Если и autoHost: false, и selfHostForce: false, RSPM записывает собранный zip в plugins/ResourcePackManager/output/, не пуша никакой URL.

См. Самостоятельный хостинг для полного дерева решений по доставке, разрешения портов и определения внешнего хоста.

В selfHostExternalUrl можно указать полный HTTP- или HTTPS-адрес обратного прокси или сервиса завершения TLS. Перенаправляйте запросы к /rspm.zip в RSPM: автоматическая раздача ресурс-пака продолжит работать.

Преобразование Java в Bedrock​

Bedrock-конвертер больше не ограничен только FreeMinecraftModels. Он рекурсивно обходит каждый файл определений предметов 1.21.4+ (assets/<namespace>/items/**/*.json) в собранном паке и производит Bedrock-геометрию, attachables и иконки инвентаря для того плагина, который их предоставил:

  • Игроки Bedrock видят 3D-предметы, кастомную броню и моделируемое снаряжение для любого плагина, чей пак использует формат определений предметов 1.21.4+.
  • Кастомные текстуры брони рендерятся у игроков Bedrock с использованием ванильной геометрии брони и Java-текстуры в качестве видимого слоя.
  • Иконки инвентаря для 3D-предметов программно рендерятся из Java-модели через трансформацию display.gui.
  • Bedrock-пак раздаётся вживую посессионно через API Geyser, поэтому правки текстур и моделей доходят до следующего подключающегося Bedrock-игрока без перезапуска сервера. Маппинги кастомных предметов по-прежнему требуют перезапуска, так как Geyser регистрирует их при старте.
  • 3D-предметы в руке получают позы от первого и третьего лица из трансформаций Java-модели display.firstperson_righthand и display.thirdperson_righthand, перенесённых на ванильный риг игрока Bedrock. Смещения настраивать не нужно.
  • 3D-предметы в руке, плагин которых поставляет служебный файл частиц (например, предметы FreeMinecraftModels с эффектами частиц), воспроизводят эти частицы для игроков Bedrock. Комплекты сущностей тоже могут поставлять файлы частиц Bedrock.

Текущие интеграции​

ResourcePackManager поставляется с готовыми записями интеграции для этих плагинов:

  • BackpackPlus
  • BetterHUD
  • BetterStructures
  • CannonRTP
  • EliteMobs
  • EternalTD
  • FreeMinecraftModels
  • InfiniteVehicles
  • ItemsAdder
  • MegaBlockSurvivors
  • MMOInventory
  • ModelEngine
  • Nexo
  • Nova
  • Oraxen
  • RealisticSurvival
  • ResurrectionChest
  • ValhallaMMO
  • vane-core

Каждая интеграция активируется только если плагин установлен и его настроенный локальный путь или удалённый URL пригодны для использования. Плагин также определяет Geyser (Geyser-Spigot на бэкенде, Geyser-Velocity / Geyser-BungeeCord на прокси) при запуске и связывает доставку Bedrock-пака с тем, который найдёт.

Куда идти дальше​