Skip to content

Latest commit

 

History

History
172 lines (157 loc) · 7.36 KB

README.RU.md

File metadata and controls

172 lines (157 loc) · 7.36 KB

Structures 2.1

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

DefaultTileEntityFiller заполняет TileEntity указаным содержимым. Поддерживает как нативные, так и кастомные TileEntity. В файле имеет следующий формат:

{
    "type":"default_filler",
    "slots":{},//Объект формата "Имя слота":ItemInstance.
    "data":{} //Данные TileEntity
}

APOFiller

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);

Старые версии: