Перейти к содержанию

Формат файла квеста

Статический квест — это один JSON-файл в датапаке по пути data/<namespace>/quests/<id>.json, где <id> становится путём идентификатора квеста (<namespace>:<id>). Эта страница — точный справочник: какие поля бывают, какого они типа, что обязательно, а что нет.

Если ты только начинаешь — сначала прочти Быстрый старт и Структура квеста. Здесь же — словарь полей, к которому удобно возвращаться.

Минимальный валидный квест — это две служебные строки версии и заголовок:

{
    "version": 3,
    "variant": 1,
    "title": "Слух о пропавшем караване"
}

Такой квест существует, выдаётся игроку и появляется в книге, но не завершается сам — у него нет задач (см. КВЕСТ-ЗАМЕТКА).


Версия формата: version и variant

Два обязательных числовых поля в начале файла. Они защищают от попытки загрузить квест в несовместимой версии мода.

{
    "version": 3,
    "variant": 1
}
Поле Что значит Что будет при несовпадении
version Несовместимая версия формата. Меняется, когда правки ломают старые файлы: добавлено/убрано обязательное поле, изменён тип поля, убрано одно из допустимых значений поля. Квест не загрузится — в лог попадёт ошибка несовместимости.
variant Совместимая версия формата. Меняется, когда правки обратно совместимы: добавлено/убрано необязательное поле или добавлено новое допустимое значение поля. Квест загрузится, но в лог попадёт предупреждение: часть новых возможностей может быть проигнорирована.

Практическое правило: указывай текущие значения мода — version: 3, variant: 1. Если после обновления мода квест перестал грузиться — первым делом сверь эти числа.


Поля квеста

Указываются на верхнем уровне файла.

Поле Тип Обязательное По умолчанию Описание
version int да Версия формата (см. выше). Сейчас 3.
variant int да Вариант формата (см. выше). Сейчас 1.
title Text да Заголовок квеста. См. Текстовые поля и стилизация.
description Text нет Описание квеста.
icon Identifier нет inkquest:default Иконка квеста в HUD и книге. Атлас textures/icons/<path>.png.
index int нет 0 Порядок сортировки в книге: меньше — выше.
repeatable bool нет false Можно ли выдать квест повторно после завершения. См. Повторяемые квесты.
pin_mode auto | off | force нет auto Режим автозакрепления при автовыдаче по зависимости. См. Закрепление.
after список групп Identifier нет Зависимости от других квестов. См. Зависимости между квестами.
require объект нет Доп. условия разблокировки (tags, predicate). Игнорируется без after. См. Зависимости между квестами.
tasks объект taskId → задача нет Словарь задач квеста. См. Поля задачи.
stages список списков taskId нет Этапы: каждый этап — список ID задач, первая — обязательная. См. Активный этап.
$schema string нет Путь к JSON-схеме для редактора. Модом игнорируется.

tasks задаёт, какие задачи существуют, а stages — как они расставлены по этапам. Задача, объявленная в tasks, но не попавшая ни в один этап stages, в квесте не участвует (её можно посмотреть командой /quest list tasks <id> unused).

Пример со всеми основными полями

{
    "version": 3,
    "variant": 1,
    "title": "Пропавший караван",
    "description": "Торговцы не вернулись в срок. Кто-то должен выяснить, что случилось.",
    "icon": "inkquest:note",
    "index": 10,
    "after": [["story:prologue"]],
    "require": { "tags": ["joined_guild"] },
    "tasks": {
        "find_tracks": {
            "title": "Найти следы каравана",
            "description": "Дорога на восток — последнее, где их видели."
        },
        "talk_to_witness": {
            "title": "Поговорить со свидетелем"
        }
    },
    "stages": [
        ["find_tracks", "talk_to_witness"]
    ]
}

Поля задачи

Каждая задача — это запись в объекте tasks, где ключ записи — её taskId (без namespace, например find_tracks).

Поле Тип Обязательное По умолчанию Описание
title Text да Заголовок задачи.
description Text нет Описание задачи.
condition объект нет Условия автозавершения: success и/или failure. См. Условия выполнения задачи.
on объект нет Хуки жизненного цикла: load, tick, pinned_tick, unload, success, failure. См. Хуки жизненного цикла задачи.
buttons список из success | failure | skip нет Кнопки ручного завершения в книге. См. Условия выполнения задачи.
"find_tracks": {
    "title": "Найти следы каравана",
    "description": "Дорога на восток — последнее, где их видели.",
    "condition": {
        "success": { "type": "predicate", "predicate": "story:at_caravan_site" }
    },
    "on": {
        "success": { "functions": ["story:caravan/found"], "tags": ["found_tracks"] }
    }
}

Текстовые поля и стилизация

Поля title и description — как у квеста, так и у задачи — принимают Minecraft JSON text component. Допустимы три формы записи:

"title": "Обычная строка"
"title": {"translate": "my.key"}
"title": ["Текст ", {"translate": "my.key"}, " продолжение"]

Что работает:

  • Простые строки.
  • Стили: color, bold, italic, underlined, strikethrough, obfuscated, font, insertion, clickEvent, hoverEvent.
  • {"translate": "..."} — с полем with или без.
  • {"keybind": "..."} — показывает актуальную клавишу игрока.
  • Вложенные массивы и поле extra.

Что не работает в HUD и книге:

Компонент Проблема
{"score": {...}} Показывается пустым.
{"selector": "..."} Показывается пустым.
{"nbt": "..."} Показывается пустым.

Эти компоненты подставляют значение только в чате и командах; в книге и HUD оно остаётся пустым — это ограничение реализации.

Чтобы показать игроку числовой прогресс, не используй score-компонент в тексте — задай условие score. Оно рисует прогресс-бар напрямую и этих ограничений не имеет. См. Условия выполнения задачи.


Неизвестные и лишние поля

Мод не падает на опечатках, но и не угадывает их. Любой ключ, которого нет в списках выше, игнорируется, а в лог сервера попадает предупреждение вида Unknown key "<ключ>" in <quest|task|…> — it will be ignored — часть in … показывает, на каком уровне лежит лишний ключ. Также мод предупреждает, если задан require без after.

Если ожидаемое поле «не сработало» — в первую очередь проверь лог на такие предупреждения: чаще всего это опечатка в имени поля или вложенность на уровень выше/ниже нужного. Подробнее — в Частые вопросы и ошибки.


См. также