Устранение неполадок Resource Pack Manager
Эта страница описывает только поведение, на данный момент подтверждённое в кодовой базе ResourcePackManager.
Самый полезный первый шаг для любой проблемы RSPM:
/rspm status
Он печатает версию, режим развёртывания (standalone vs network-backend), маскированный сетевой ключ, состояние Java + Bedrock-пака, активный путь доставки с URL, разрешённый внешний хост + авто-определённый публичный IP, все релевантные флаги конфига, напоминание о развёртывании прокси (сетевой прокси-jar — это тот же ResourcePackManager.jar) и обнаружение Floodgate / Geyser-Spigot. Такая же команда существует, когда jar работает на прокси, и печатает аналоги на стороне прокси (список бэкендов, результаты загрузки по каждому бэкенду, состояние объединённого пака).
Игроки не получают ресурс-пак
Сначала проверьте следующее:
autoHostдолжен быть включён, если вы хотите, чтобы ResourcePackManager автоматически пушил URL- собранный пак должен существовать, и хотя бы один путь доставки (self-host или удалённый) должен был успешно отработать
- игроки получают пак только при входе или через первоначальный broadcast загрузки, который срабатывает в момент готовности хостинга
При необходимости:
- Выполните
/rspm statusи посмотрите секцию «Hosting».Active deliveryпоказывает, используется ли сейчас self-host, удалённый, или ни один. - Если «active delivery: not yet ready» — сборка или загрузка ещё идут. Плагин громко предупреждает в консоли, когда игрок подключается слишком рано, и автоматически отправит пак, как только доставка будет готова.
- Если «active delivery: none — hosting disabled or failed» —
autoHostотключён, либо проверки self-host и удалённая загрузка обе не прошли. См. «Self-host sanity checks failed» и «Auto-hosting cannot reach the remote server» ниже. - Выполните
/rspm reload, следите в консоли за результатами загрузки / проверки self-host, затем перезайдите тестовым игроком.
Если вы хостите самостоятельно через свой внешний конвейер (autoHost: false), RSPM не пушит ваш кастомный URL за вас. В такой настройке вам всё ещё нужен собственный серверный процесс доставки пака.
ItemsAdder установлен, но его содержимое отсутствует в итоговом паке
Обычно это означает, что ItemsAdder всё ещё настроен так, что мешает ResourcePackManager читать или хостить его вывод.
Используйте:
/rspm itemsadder configure
Эта команда сейчас:
- включает
resource-pack.hosting.no-host.enabled - отключает
protection_1,protection_2иprotection_3 - устанавливает
resource-pack.zip.compress-json-files: false - запускает
/iareload, затем/iazip - примерно через 15 секунд перезагружает ResourcePackManager
Если команда сообщает, что ItemsAdder уже хостит собственный пак, сначала вручную отключите хостинг ItemsAdder и запустите команду снова.
Собранный пак некорректен или не загружается
Интеграция авто-хоста ResourcePackManager явно обрабатывает следующие типы серверных ошибок:
- отсутствуют требуемые файлы
- файл слишком большой
- неверный формат файла
- отсутствующая сессия
- удалённый сервер недоступен
Если вы столкнулись с одной из них:
- Выполните
/rspm reload, чтобы пересобрать пак. - Проверьте, не повреждён ли, не зашифрован ли или иначе нечитаем один из исходных паков.
- Проверьте, содержит ли итоговый собранный пак валидные
pack.mcmetaиpack.pngв корне.
Плагин пропускает паки, которые не может корректно извлечь, и пишет предупреждения в консоль, когда это происходит.
При ошибке SESSION_NOT_FOUND от удалённого авто-хоста RSPM очищает свой UUID сессии и пере-инициализируется на следующем keep-alive тике — ручное вмешательство не требуется.
Ассеты одного плагина перекрывают ассеты другого
Это контролируется параметром priorityOrder в:
plugins/ResourcePackManager/config.yml
Записи выше побеждают записи ниже.
Для не-объединяемых файлов ResourcePackManager заменяет файл с более низким приоритетом. Для объединяемых JSON-файлов он объединяет содержимое. Текущие объединяемые категории JSON:
sounds.json- языковые файлы
- ванильные JSON моделей предметов в
minecraft/models/item(нерекурсивное объединение: между паками комбинируется только массивoverrides, остальная часть файла следует правилу «побеждает наивысший приоритет») - файлы атласов
- файлы шрифтов
- определения моделей предметов формата 1.21.4+ в
items/(формат-зависимое объединение, учитывающее структуру дерева предикатов)
pack.mcmeta также объединяется особым образом: побеждает наивысший pack_format, диапазоны supported_formats расширяются (поддерживаются формы integer, массив из двух int и объект {min_inclusive, max_inclusive}), записи overlay объединяются, а нестандартные ключи верхнего уровня сохраняются. Записи overlay нормализуются для совместимости с 1.21.9+ добавлением полей min_format/max_format, если они отсутствуют. Источники базового атласа также сливаются в overlay-файлы атласа, чтобы overlay'и не затеняли базовые записи.
Если вам нужно изучить, что произошло при последнем объединении, проверьте:
plugins/ResourcePackManager/collision_log.txt
Текст GUI или элементы на основе шрифтов выглядят неправильно
Файлы шрифтов — одна из категорий JSON, которые ResourcePackManager объединяет, но это не гарантирует, что две разные шрифтовые системы будут хорошо работать вместе в Minecraft.
Если меню или HUD на основе шрифта выглядит неправильно:
- Измените
priorityOrderтак, чтобы пак, который вы хотите видеть победителем, был выше. - Выполните
/rspm reload. - Проверьте
collision_log.txt, чтобы убедиться, что коллизии произошли там, где вы ожидали.
Изменения ресурс-пака не появляются сразу
В ResourcePackManager есть watchdog для источников поддерживаемых паков.
Он ждёт, пока изменённый пак не останется неизменным в течение 3 секунд, и затем, как только все отслеживаемые паки стабильны, пересборка происходит немедленно.
Если вы активно перегенерируете пак другого плагина, дайте ему несколько секунд после окончания записи в файлы. Если сомневаетесь — выполните /rspm reload после того, как плагин-источник закончит.
Проверки self-host не прошли; откат на удалённый хостинг
Это сообщение — нормальное поведение, когда preferSelfHost: true (по умолчанию), и одна из трёх проверок исправности self-host не прошла:
- Уровень 1 (эвристика) — разрешённый внешний хост — это RFC1918 / loopback / link-local. Либо установите
selfHostExternalHostна ваше реальное публичное имя хоста, либо убедитесь, что плагин может достучаться до api.ipify.org / checkip.amazonaws.com. - Уровень 2 (локальная самопроверка) — HEAD-запрос на
http://127.0.0.1:<port>/rspm.zipне вернул 200 с непустым телом. Ловит коллизии при привязке порта или отсутствующие файлы пака. - Уровень 3 (проверка внешней доступности) — magmaguy.com попытался забрать ваш анонсированный URL и не смог. Чаще всего: HTTP-порт не проброшен на роутере / файрволе. URL проверки и причина записываются в лог.
Исправления (в порядке предпочтительности): откройте HTTP-порт на вашем файрволе + роутере, установите selfHostExternalHost на маршрутизируемое имя хоста, либо установите preferSelfHost: false, чтобы полностью пропустить self-host.
Когда сама проверка magmaguy.com недостижима (RSPM не может с ней связаться, чтобы спросить), self-host оставляется, а не отбраковывается — обоснование в том, что резервному пути magmaguy.com тоже нужен, поэтому отказ из-за невозможности проверки был бы парадоксальным.
См. Самостоятельный хостинг для полного дерева решений.
Авто-хостинг не может достучаться до удалённого сервера
Встроенный удалённый хост ResourcePackManager связывается с:
https://magmaguy.com/rsp/
Если это соединение не удаётся, плагин записывает предупреждения о связи и не может использовать удалённый резерв до успешного восстановления соединения.
Ваши варианты:
- починить исходящую HTTPS-связность сервера
- подождать, пока удалённый сервис снова станет доступным
- отключить
autoHostи самостоятельно хостить сгенерированный zip - открыть ваш HTTP-порт и оставить
preferSelfHost: true, чтобы RSPM использовал self-host вообще без необходимости в magmaguy.com (в этом сценарии также установитеselfHostExternalHostна ваше публичное имя хоста, чтобы внешняя проверка Уровня 3 была не нужна — RSPM оставляет self-host при IOException на проверке)
Я хочу хостить собранный пак через свой собственный веб-сервер
Поддерживаемый кодом сценарий:
- Установите
autoHost: false. - Установите
resourcePackRerouting, если хотите, чтобы ResourcePackManager записывал дополнительную копию в существующую папку. - Самостоятельно хостите
ResourcePackManager_RSP.zip.
resourcePackRerouting разрешается относительно каталога plugins, и целевая папка должна уже существовать.
Если вместо этого вы хотите использовать встроенный self-host HTTP-сервер RSPM (другое дело — та же JVM, что и плагин), см. Самостоятельный хостинг.
Мне нужно проверить, какие удалённые данные хранятся для этого сервера
Используйте:
/rspm data_compliance_request
Если есть активная удалённая сессия хостинга, ResourcePackManager скачивает ответ в:
plugins/ResourcePackManager/data_compliance
Если удалённой сессии нет (например, вы используете self-host), команда сообщит, что удалённых данных для запроса нет.
Bedrock-пак не генерируется
bedrockConversionEnabled по умолчанию true, поэтому он должен запускаться автоматически. Сначала запустите /rspm status — секция Bedrock Pack скажет вам, почему пака нет на диске:
- «No Bedrock target detected» — нет локального Geyser-Spigot, нет локального Floodgate и нет сетевого режима. Преобразование намеренно пропускается. Установите Floodgate (для прокси-настроек) или Geyser-Spigot (для отдельностоящих настроек) и выполните
/rspm reload. - «Network mode is active so this backend SHOULD produce a Bedrock pack. The file is missing» — обычно первый цикл сборки ещё не завершился (подождите ~30 с после загрузки), либо сканер нашёл ноль определений предметов в собранном паке, либо преобразование выбросило ошибку. Поищите в консоли предупреждения
[BedrockConverter]илиGeneric scanner: discovered 0 items definition files.
Если авто-определение Geyser не срабатывает:
- Задайте
bedrockGeyserFolderвconfig.ymlв путь к папке данных вашего Geyser (например,Geyser-Spigot). - Путь может быть абсолютным или относительным к каталогу
plugins.
Конвертер авто-определяет Geyser в plugins/Geyser-Spigot/, в любом варианте plugins/Geyser-*/ или в config/Geyser-*/ для установок Fabric/NeoForge.
Для логирования по каждому предмету / каждой кости установите bedrockConverterDebug: true и перезагрузите.
Игроки Bedrock видят предметы в руке в неправильной позиции
Это вопрос настройки, а не баг конвертации. Откройте plugins/ResourcePackManager/bedrock_display_offsets.yml и подкрутите нужную ось. Виды от первого и третьего лица независимы — настройка одного не влияет на другой. Bedrock-клиент перечитывает JSON attachable вживую без перезапуска, поэтому итерация быстрая. См. страницу преобразования Bedrock с полным списком параметров и описанием их назначения.
Кастомные текстуры брони отсутствуют у игроков Bedrock
Кастомная броня рендерится на Bedrock путём комбинирования ванильной геометрии брони с Java-текстурой в качестве видимого слоя. Чтобы это работало, пак исходного плагина должен определять equipment-файл в assets/<namespace>/equipment/<material>.json рядом с определением предмета. Если лог конвертации показывает предмет, но в игре текстура брони не появляется — убедитесь, что этот файл присутствует в собранном паке.
Прокси: «Floodgate key.pem missing» при загрузке прокси
Прокси-плагин не смог найти plugins/floodgate/key.pem на хосте прокси и перешёл в режим ожидания. RSPM выводит сетевую идентичность из этого файла, поэтому без него прокси не может связаться ни с одним бэкендом. Исправление:
- Установите Floodgate на прокси. Он и так нужен, чтобы Bedrock-игроки могли достучаться до прокси, поэтому это нужно независимо от RSPM.
- Убедитесь, что
plugins/floodgate/key.pemна прокси побайтово идентичен такому же файлу на каждом бэкенде. Скопируйте один каноническийkey.pemна каждый компонент (другие бэкенды + прокси) и перезапустите всё. Floodgate и так требует это для Bedrock-аутентификации, поэтому если Bedrock-игроки сейчас работают в вашей сети, это уже сделано.
Прокси: «no merged pack» после нескольких циклов опроса
После ~20 секунд пустых циклов опроса (4 цикла × 5 с по умолчанию) на прокси RSPM записывает однократный диагностический баннер, перечисляющий каждый опрошенный бэкенд, HTTP-URL, который он пытался запросить, и результат (200 / 304 / 404 / CONNECT_FAILED / и т. д.). Баннер объясняет наиболее распространённые исправления:
CONNECT_FAILEDна каждом бэкенде → прокси не может достучаться до HTTP-порта бэкенда. Проверьте, что адрес вvelocity.toml/config.yml— это адрес, до которого прокси действительно может дозваниться (а не, например, внутрисетевое Docker-имя, которое не резолвится из сети прокси), и что объявленный HTTP-порт бэкенда открыт между прокси и бэкендом. Баннер печатает точный URL, который он пробовал; до того как бэкенд объявил свой порт, прокси откатывается наmcPort + network-http-offset-v2, поэтому раннийCONNECT_FAILEDможет также означать, что этот запасной порт ещё недоступен.NOT_FOUND_404на каждом бэкенде → бэкенды работают, но не производят Bedrock-пак. Запустите/rspm statusна каждом бэкенде; диагностический блок Bedrock Pack скажет вам, почему.
Баннер срабатывает один раз за период «застоя», и строка «NetworkSync: recovered» записывается, когда хотя бы один бэкенд снова начинает возвращать контент. См. Прокси-сети для подробностей.
Прокси: Bedrock-игроки не видят моделей при первой загрузке прокси
Geyser регистрирует свою таблицу кастомных предметов только при запуске прокси. Если прокси стартовал раньше, чем хоть один бэкенд произвёл Bedrock-пак, Geyser работает с пустой таблицей маппингов и остаётся такой до конца сессии.
Исправление — перезапустить прокси после того, как бэкенд записал Wrote merged Geyser mappings: N entries. RSPM заранее раскладывает маппинги предыдущего запуска при загрузке прокси, поэтому это бьёт только на абсолютно новой установке — последующие загрузки имеют что-то готовое до того, как Geyser сканирует.
Бэкенд: «Backend HTTP server failed to bind on port X»
В сетевом режиме бэкенд выставляет свои Bedrock-выводы через небольшой HTTP-сервер. Если порт занят или недоступен, вы увидите многострочный блок [ERROR] в консоли. Исправления:
- Установите
selfHostPortв другое положительное значение вconfig.yml. - Или измените
networkHttpOffset-v2, чтобы сместить авто-выводимый порт от коллизии (например, RCON наmcPort + 1? установите 2 или 3). Вам не нужно обновлять прокси для совпадения: как только бэкенд успешно привязался, он автоматически объявляет прокси свой реальный HTTP-порт, поэтому собственныйnetwork-http-offset-v2прокси имеет значение только как догадка до объявления.
Пока HTTP-сервер бэкенда упал, Bedrock-пак этого бэкенда не доходит до прокси через прямую загрузку. Резервная ретрансляция magmaguy.com по-прежнему работает (бэкенд пушит свои файлы на ретранслятор, и прокси забирает их оттуда).
Очистка устаревшего конфига v1
Администраторы, обновляющиеся с RSPM v1, могут иметь мёртвый ключ networkHttpOffset (без -v2) в своём config.yml. RSPM v2 намеренно не читает старый ключ — вы получите дефолт v2 (1), записанный в конфиг при следующей загрузке автоматически. Мёртвый ключ v1 сидит в вашем конфиге как безвредный артефакт, пока вы не уберёте его вручную.