update doc/*/content-packs.md

This commit is contained in:
MihailRis
2025-11-09 21:31:36 +03:00
parent 652f652e55
commit 50af44c9de
2 changed files with 151 additions and 3 deletions
+77 -2
View File
@@ -50,5 +50,80 @@
Изображение контент-пака добавляется в виде файла *icon.png* в папку пака (не в textures). Рекомендованный размер изображения: 128x128
Новые блоки добавляются в под-папку **blocks**, предметы в **items**, текстуры в **textures**
С примером файловой структуры лучше ознакомиться через базовый пакет (*res/content/base*)
# Файловая система
Каждый загруженный пак монтируется к внутренней файловой системе как новая точка входа, имя которой совпадает с id пака.
Это значит, что для доступа к файлам пака не требуется использование дополнительных функций:
```lua
print(file.read("пак:package.json")) -- выведет содержимое package.json пака
```
Также это является одной из причин того, что некоторые id зарезервированы от использования.
Точки входа монтируются как read-only. Для получения доступа к записи существует функция pack.request_writeable.
Подробнее про библиотеку [file](scripting/builtins/libfile.md).
# Структура контент-пака
Пусть вас не пугает следующий текст, ведь минимальный пак содержит только package.json.
- Контент:
- `block_materials/` - определения материалов блоков
- `blocks/` - определения блоков
- `items/` - определения предметов
- `generators/` - генераторы мира
- `entities/` - определения сущностей
- `skeletons/` - определения скелетов сущностей
- `presets/` - пресеты (может использоваться и паками в своих целях)
- `text3d/` - 3D текст
- `weather/` - погода
- Код:
- `modules/` - скриптовые модули
- `scripts/` - скрипты контента, мира
- `components/` - компоненты сущностей
- Ассеты (ресурсы клиентской стороны):
- `fonts/` - шрифты
- `models/` - 3D модели
- `textures/` - текстуры
- `shaders/` - шейдеры
- `effects/` - эффекты пост-обработки
- `sounds/` - звуки и музыка
- `texts/` - файлы локализации
- GUI:
- `layouts/` - макеты UI
- `pages/` - макеты страниц меню (элемент pagebox)
- Конфигурация:
- `config/` - файлы конфигурации
- `defaults.toml` - переопределения стандартных привязок к контенту, такие как сущность игрока, генератор по-умолчанию и т.д.
- `bindings.toml` - привязки к клавишам / мыши
- `user-props.toml` - пользовательские свойства определений контента
- `devtools/` - вспомогательные файлы внутренних инструментов отладки
- `content.json` - генерируемые автоматически списки контента, используемое для проверки корректности индексов в мире и конвертации при несовпадении
- `icon.png` - иконка пака
- `package.json` - файл опеределения пака
- `preload.json` - списки предзагрузки ассетов, которые не загружаются автоматически, не следует указывать ассеты без надобности
- `resources.json` - списки определений [ресурсов](resources.md) (не путать с ассетами)
- `resource-aliases.json` - файлы объявления псевдонимов для [ресурсов](resources.md)
> [!WARNING]
> Ручное редактирование `content.json` противопоказано и скорее всего приведёт к необратимой поломке миров.
# Источники контента
Поиск контент-паков производится среди **источников контента**, являющихся путями в файловой системе движка.
Приоритет источника определяет порядок сканирования: если один и тот же пак найден в нескольких источниках,
будет выбран тот, что принадлежит источнику с наивысшим приоритетом.
Источники контента в порядке убывания приоритета:
- `world:content` - контент папке с миром (`мир/content/`)
- `user:content` - контент в папке пользователя (`$HOME/.voxeng/content/`)
- `project:content` - контент в папке с проектом (`проект/content/`)
- `res:content` - встроенный контент, поставляемый вместе с ядром движка (`res/content/`)
Т.е. если в `world:content` и в `user:content` есть один и тот же пак, будет выбрана версия из `world:content`.
Версия пака, при этом, на данный момент, не учитывается.