Формат файла квеста¶
Статический квест — это один JSON-файл в датапаке по пути data/<namespace>/quests/<id>.json, где <id> становится путём идентификатора квеста (<namespace>:<id>). Эта страница — точный справочник: какие поля бывают, какого они типа, что обязательно, а что нет.
Если ты только начинаешь — сначала прочти Быстрый старт и Структура квеста. Здесь же — словарь полей, к которому удобно возвращаться.
Минимальный валидный квест — это две служебные строки версии и заголовок:
Такой квест существует, выдаётся игроку и появляется в книге, но не завершается сам — у него нет задач (см. КВЕСТ-ЗАМЕТКА).
Версия формата: version и variant¶
Два обязательных числовых поля в начале файла. Они защищают от попытки загрузить квест в несовместимой версии мода.
| Поле | Что значит | Что будет при несовпадении |
|---|---|---|
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.
Если ожидаемое поле «не сработало» — в первую очередь проверь лог на такие предупреждения: чаще всего это опечатка в имени поля или вложенность на уровень выше/ниже нужного. Подробнее — в Частые вопросы и ошибки.
См. также¶
- Быстрый старт — первый квест за пять минут.
- Структура квеста — как этапы и задачи складываются в квест.
- Условия выполнения задачи и Хуки жизненного цикла задачи — содержимое полей
conditionиon. - Частые вопросы и ошибки — что делать, если квест не загрузился.