Structures - Библиотека, упрощающая работу со структурами.
en | ru
Перед началом работы, требуется импортировать библиотеку.
IMPORT("Structures", "*"); // Импортировать все модули
// Или
IMPORT("Structures", "Structure"); // Импортировать модулю структур
IMPORT("Structures", "Rotate"); // Импортировать модуль поворотов
IMPORT("Structures", "TileEntityRandomize"); // Импортировать модуль TileEntityRandomize
IMPORT("Structures", "TileEntityFiller"); // Импортировать модуль TileEntityFiller
IMPORT("Structures", "DefaultTileEntityFiller"); // Импортировать DefaultTileEntityFiller
IMPORT("Structures", "APOFiller"); // Импортировать заполнитель из APOCraft
Создайте структуру с помощью конструктора Structure
let struct = new Structure();
Затем добавьте в структуру данные методами addBlock и addTileEntity
struct.addBlock(1, 1, 0, 5, 2);
struct.addBlock(0, 2, 0, 5, 2);
struct.addBlock(0, 3, 0, 5, 4);
struct.addBlock(0, 4, 0, 54, 0, "chest1");
struct.addTileEntity("chest1", new DefaultTileEntityFiller({
0:{ id:5, count:64 }
}));
Вызовите метод writeInFile
struct.writeInFile("structName");
Для установки структуры в мире используется метод build(x, y, z, rotates, random?, region?), где:
- int x - координата X
- int y - координата Y
- int z - координата Z
- Rotate|Array rotates - Поворот или массив поворотов. Из массива поворот будет выбран случайным образом
- java.util.Random random - Объект рандома для получения случайных значений
- BlockSource region
Callback.addCallback("ItemUse", function(coords, item, block, isExteral, player){
let region = BlockSourse.getDefaultForActor(player);
struct.build(coords.x,
coords.y,
coords.z, Structure.ROTATE_NONE, null, region);
})
{
"version":3,//int - версия структуры файла
"structures":[], // Массив блоков формата [int x, int y, int z, ItemInstance item, TileEntityRandomize? radom_te]
"tile_entities":{} // Список заполнителей TE
}
TileEntityRandomize является объектом формата "Шанс":"Имя заполнителя". Шанс указывается от 0 до 1.
{
"1":"test_te"
}
Заполнители TE имеют формат "Имя заполнителя":{Данные заполнителя}
"test_te":{ // Заполнитель TE с именем test_te
"type":"default_filler",// Тип заполнителя (ОБЯЗАТЕЛЬНО)
... // Данные заполнителя
}
DefaultTileEntityFiller заполняет TileEntity указаным содержимым. Поддерживает как нативные, так и кастомные TileEntity. В файле имеет следующий формат:
{
"type":"default_filler",
"slots":{},//Объект формата "Имя слота":ItemInstance.
"data":{} //Данные TileEntity
}
APOFiller перекочевал прямиком из A.P.O. Craft. Поддерживает только нативные TileEntity. В файле имеет следующий формат:
{
"type":"apo_filler",
"items":[// Массив предметов, которые могут быть сгенерированы внутри TileEntity
{
"id": 5, // int - ID предмета
"data": 1, // int - data предмета
"rarity": 1, // float - Шанс генерации предмета, от 0 до 1
"count": 4 // int | {"min":int, "max":int} - Количество генерируемого предмета. Если количество задано в виде объекта, то оно генерируется случайным образом.
},
]
}
/* TypeScript */
class CustomTileEntityFiller extends TileEntityFiller{
/**
* Заполнение TileEntity
*/
public fill(TE:ItemContainer | TileEntity | NativeTileEntity, random:java.lang.Random): void {}
/**
* Чтение заполнителя из файла
* @param json - object from File
*/
public parseJSON(json:ITileEntityFiller): void {}
/**
* Запись заполнителя в файл
*/
public toJSON(): ITileEntityFiller {
//Получить JSON от родительского заполнителя. (Обязательно)
let json = super.toJSON();
//Здесь добавить свои данные
return json;
}
}
//Регистрация заполнителя (Обязательно)
TileEntityFiller.register("custom_filler", CustomTileEntityFiller);
Для использования в JavaScript вы можете воспользоваться библиотекой extends
IMPORT("extends", "__extends");
function CustomTileEntityFiller(){
TileEntityFiller.call(this)
};
__extends(CustomTileEntityFiller, TileEntityFiller);
/**
* Заполнение TileEntity
*/
CustomTileEntityFiller.prototype.fill = function(TE, random){}
/**
* Чтение заполнителя из файла
* @param json - object from File
*/
CustomTileEntityFiller.prototype.parseJSON = function(json){}
/**
* Запись заполнителя в файл
*/
CustomTileEntityFiller.prototype.toJSON = function(){
//Получить JSON от родительского заполнителя. (Обязательно)
let json = TileEntityFiller.prototype.toJSON.call(this);
//Здесь добавить свои данные
return json;
}
//Регистрация заполнителя (Обязательно)
TileEntityFiller.register("custom_filler", CustomTileEntityFiller);