Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей.
Загрузка
Версия
|
Ссылка
|
Список изменений
|
Дата релиза
|
3
|
Скачать
|
релиз библиотеки
|
02.02.2020
|
Импорт
Для добавления библиотеки в мод ее файл (StorageInterface.js) нужно добавить в директорию lib/ в директории мода (если таковой нету, то ее нужно создать).
Для импорта библиотеки в мод в заголовочном файле (или если он остутвует в первом файле кода) следует добавить строку:
IMPORT("StorageInterface");
Интерфейсы хранилищ блоков
На данный момент интерфейсы привязываются только к tile entity, но в будущем по умолчанию интерфейсы будут прописаны у контейнеров из Майнкрафта, прежде всего печки.
Интерфейс для хранилища добавляется с помощью метода StorageInterface.createInterface(id блока, объект интерфейса) и в общем виде выглядит так:
StorageInterface.createInterface(id блока, {
slots: {
"slot1": {
input: bool, // может ли слот принимать предметы
output: bool, // может ли слот отдавать предметы
isValid: function(item, side, tileEntity){ // может ли слот принять предмет item со стороны side
return bool;
},
canOutput: function(item, side, tileEntity){ // можно ли извлечь предмет из слота (item - предмет в слоте)
return bool;
}
},
"slot2": {
...
},
...
},
isValidInput: function(item, side, tileEntity){ // аналогична функции isValid слота, но действует на все слоты контейнера
return true;
},
addItem: function(item, side, maxCount){ return int; }, // функция добавления предмета
getItems: function(side){ return []; }, // кастомная функция получения предметов для извлечения
// методы работы с хранилищем жидкости
canReceiveLiquid: function(liquid, side){ return false; }, // может ли tile entity принять жидкость (liquid - название жидкости)
canTransportLiquid: function(liquid, side){ return false; }, // может ли tile entity отдать жидкость (liquid - название жидкости)
addLiquid: function(luquid, amount){ // функция добавление жидкости
return this.tileEntity.liquidStorage.addLiquid(luquid, amount);
}
getLiquid: function(luquid, amount){ // функция извлечения жидкости
return this.tileEntity.liquidStorage.getLiquid(luquid, amount);
}
});
Здесь указаны все функции объекта интерфейса, которые можно задать этим методом. При их отсутствии добавляются функции по умолчанию, и для некоторых функций приведёт их код.
Добавление интерфейса для tile entity на примере железной печки из мода IndustrialCraft 2
StorageInterface.createInterface(BlockID.ironFurnace, {
slots: {
"slotSource": {input: true,
isValid: function(item, side){
return side != 0 && Recipes.getFurnaceRecipeResult(item.id, "iron");
}
},
"slotFuel": {input: true,
isValid: function(item, side){
return side != 1 && Recipes.getFuelBurnDuration(item.id, item.data) > 0;
}
},
"slotResult": {output: true}
}
});
Методы для передачи предметов и жидкостей
getNearestContainers
Обратная совместимость
Данная библиотека совместима с модами, используюшими старый стандарт описания слотов tile entity через функцию getTransportSlots и добавляет такую функцию для tile entity при создании его интерфейса.