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

ResourcePackManager (RSPM)

ResourcePackManager обнаруживает, объединяет, размещает и распространяет ресурс-паки от поддерживаемых плагинов и от вручную добавленных паков. Он также может преобразовать собранный Java-пак в ресурс-пак Bedrock, чтобы игроки GeyserMC видели то же пользовательское содержимое, что и игроки Java, и поставляется с первоклассной поддержкой прокси-сетей BungeeCord, Waterfall и 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/Waterfall — 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/Waterfall) — забирает Bedrock-пак и маппинги каждого бэкенда, объединяет их в единый общесетевой пак и раздаёт Bedrock-клиентам через Geyser прокси.

Отдельностоящему серверу нужен только jar на бэкенде. Прокси-сети нужен тот же jar на каждом бэкенде И копия на прокси.

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

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

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

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

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

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

Преобразование 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 регистрирует их при старте.
  • Двенадцать пользовательских параметров для смещений отображения предмета в руке (шесть для первого лица, шесть для третьего) в bedrock_display_offsets.yml.

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

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-пака с тем, который найдёт.

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