Загрузка структур
В этой статье мы разберем класс для манипуляции структур из файлов 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");
});
Использование добавленных структур мы разберем в следующих статьях.