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

Загрузка структур

В этой статье мы разберем класс для манипуляции структур из файлов StructurePool, в дальнейшем добавленные структуры можно будет в любой момент использовать по имени.

StructureLoader — устаревший класс, который раньше использовался для загрузки структур, но он все еще поддерживаются для обратной соввесимости.

Почему StructureLoader устарел?

Все мы любим назвать свой единственный блок в моде barrel, думая какие же мы уникальные в этом мире. Но вот проблема — версия игры обновилась, идентификатор теперь используется самой игрой, а блок из нашего мода больше не существует. Чтобы таких ситуаций не было со структурами, был создан специальный класс StructurePool.

Для начала создадим StructurePool, который в дальнейшем будем использовать:

let poolInstance = new StructurePool("my_mod:example_pool");
Указывайте уникальные имена

Важно, чтобы ваше имя StructurePool не совпадало с другими модами! Указывайте имя мода полностью, не сокращая его.

Укажем общую папку, откуда будут загружаться структуры в этот пул по умолчанию (это позволит загружать их сразу по имени, не расходуя время на указание полного пути):

poolInstance.setPathStructures(__dir__ + "structures");

Загрузка структуры

poolInstance.upload(/* относительный путь файла в папке структур, например example.struct */, /* формат структуры, по умолчанию используется DungeonUtility */);
Внимание

Загрузка структур происходит НЕ сразу после вызова upload. Событие StructureLoadOne вызывается после загрузки структур, для работы со структурами необходимо использовать именно его.

Получение структуры по имени, используется везде где нужна структура:

poolInstance.get(/* имя структуры */);

Пример использования

// создаем StructurePool; ОБРАТИТЕ ВНИМАНИЕ: у каждого мода должно быть свое уникальное имя StructurePool!
let examplePool = new StructurePool("my_mod:example_pool");

// устанавливаем путь к папке со структурами, в данном случае папка structures в главной директории мода
examplePool.setPathStructures(__dir__ + "structures");

// загружаем структуру test_structure.struct из папки указанной выше, структура будет доступна по имени test_structure
examplePool.upload("test_structure");
// загружаем структуру legacy_structure.struct из папки указанной выше, структура будет доступна по имени legacy_structure
// обратите внимание, что в данном примере используется формат файла Structures
examplePool.upload("legacy_structure", "Structures");
// загружаем структуру test_structure_folder.struct по относительному пути внутри папки, структура будет доступна по имени test_structure_folder
examplePool.upload("folder/test_structure_folder");

Callback.addCallback("StructureLoadOne", () => {
// получаем структуры, загруженные ранее, здесь с ними можно работать
examplePool.get("test_structure");
examplePool.get("legacy_structure");
examplePool.get("test_structure_folder");
});

Использование добавленных структур мы разберем в следующих статьях.