Строка 159: | Строка 159: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
</div> <div class="mw-parser-output"><div class="mw-parser-output"> | </div> <div class="mw-parser-output"><div class="mw-parser-output"> | ||
+ | <div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"> | ||
=== Методы для получения интерфесов хранилищ === | === Методы для получения интерфесов хранилищ === | ||
− | *StorageInterface.newStorage(container или tileEntity) - возвращает новый интерфейс хранилища для TileEntity или контейнера. | + | *'''StorageInterface.newStorage('''''container ''или ''tileEntity''''')''' - возвращает новый интерфейс хранилища для TileEntity или контейнера. |
− | *StorageInterface.getStorage(blockSource, x, y, z) - Возвращает интерфейс хранилища для блока, являющегося контейнером. | + | *'''StorageInterface.getStorage('''''blockSource, x, y, z''''')''' - Возвращает интерфейс хранилища для блока, являющегося контейнером. |
− | *StorageInterface.getLiquidStorage(blockSource, x, y, z) - возвращает интерфейс хранилища, если на указанных координатах находится TileEntity с хранилищем жидкости. | + | *'''StorageInterface.getLiquidStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища, если на указанных координатах находится TileEntity с хранилищем жидкости. |
− | *StorageInterface.getNeighbourStorage(blockSource, coords, side) - возвращает интерфейс хранилища для соседнего блока со стороны side. | + | *'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side. |
− | *StorageInterface.getNeighbourLiquidStorage(blockSource, coords, side) - возвращает интерфейс хранилища для соседнего блока со стороны side, если там находится TileEntity с хранилищем жидкости. | + | *'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side, если там находится TileEntity с хранилищем жидкости. |
− | </div> </div> </div> <div | + | </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> |
+ | |||
== Остальные методы StorageInterface == | == Остальные методы StorageInterface == | ||
Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей.
Версия | Ссылка | Список изменений | Дата релиза |
8 | Скачать | - Поддержка мультиплеера - Введены общие интерфейсы для всех контейнеров - Добавлены методы установки валидации предметов и макс стака для слотов в ItemContainer |
10.12.2020 |
7 | - | - В описании слота в интерфейсе хранилища теперь можно указать стороны, через которые с ним можно взаимодействовать | 10.06.2020 |
6 | Скачать | - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров. | 18.04.2020 |
5 | Скачать | - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid | 09.03.2020 |
4 | Скачать |
- Улучшена работа с жидкостями |
05.03.2020 |
3 | Скачать | релиз библиотеки | 02.02.2020 |
Для добавления библиотеки в мод ее файл (StorageInterface.js) нужно добавить в директорию lib/ в директории мода (если таковой нету, то ее нужно создать).
Для импорта библиотеки в мод в заголовочном файле (или если он остутвует в первом файле кода) следует добавить строку:
IMPORT("StorageInterface");
Интерфейсы хранилищ объединяют в себе функции для работы с контейнерами и хранилищем жидкости и позволяют описать логику передачи предметов и жидкостей. В библиотеке есть стандартные интерфейсы для ванильных контейнеров и TileEntity, но вы можете зарегистрировать свой собственный для вашего TileEntity.
StorageInterface.createInterface(id блока, прототип интерфейса).
Прототип интерфейса выглядит так:
StorageInterface.createInterface(id блока, {
slots: {
"slot1": {
input: true/false, // может ли слот принимать предметы
output: true/false, // может ли слот отдавать предметы
isValid: function(item, side, tileEntity){ // может ли слот принять предмет item со стороны side
return true/false;
},
canOutput: function(item, side, tileEntity){ // можно ли извлечь предмет из слота (item - предмет в слоте)
return true/false;
}
},
"slot2": {
...
},
...
},
// функции интерфейса
});
Интерфейс хранилища обладает следующими функциями. Вы можете заменить их на свои в прототипе интерфейса при регистрации.
Название | Аргументы | Описание |
getSlot | name | Возвращает слот контейнера. |
setSlot | name, id, count, data, extra | Устанавливает предмет в слот контейнера. |
clearContainer | - | Очищает содержимое контейнера |
isValidInput | item, side, tileEntity | Аналогична функции isValid слота, но действует на все слоты контейнера. По умолчанию возвращает true. |
addItem | item, side, maxCount | Функция добавления предмета. Возвращает количество добавленных предметов. |
getOutputSlots | side | Возвращяет названия доступных слотов выхода со стороны side. |
canReceiveLiquid | liquid, side | Может ли TileEntity принять жидкость с именем liquid со стороны side. По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости. |
canTransportLiquid | liquid, side | Может ли TileEntity отдать жидкость с именем liquid со стороны side. По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости. |
addLiquid | liquid, amount | Функция добавление жидкости. По умолчанию работает с liquidStorage. |
getLiquid | liquid, amount | Функция извлечения жидкости. По умолчанию работает с liquidStorage. |
getLiquidStored | storageName |
Функция получения жидкости, хранящейся в tile entity. Позволяет возвращать разные жидкости для входа и выхода. |
getLiquidStorage | storageName |
Возвращает хранилище жидкости. По умолчанию возвращает liquidStorage из TileEntity. Позволяет использовать альтернативные хранилища жидкостей. |
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 | coords, blockSource | Возвращает соседние контейнеры относительно блока на координатах coords в виде объекта, где ключами являются стороны блока. |
getNearestLiquidStorages | coords, blockSource | Работает аналогично предыдущему, но возвращает интерфейсы хранилищ для всех соседних TileEntity, имеющих хранилища жидкостей. |
putItems | items, containers | Добавляет предметы из массива items в контейнеры из объекта, возвращаемого методом getNearestContainers. |
putItemToContainer | item, container, side, maxCount |
Добавляет стак предметов в контейнер. Возвращает количество переданных предметов. |
extractItemsFromContainer | inputСontainer , outputContainer, side, maxCount, oneStack |
Позволяет извлечь предмет из контейнера и добавить его в tile entity или контейнер. Возвращает количество переданных предметов. |
extractItemsFromStorage | inputStorage, outputStorage, side, maxCount, oneStack | Аналогичен предыдущему, но принимает аргументами интерфейсы хранилищ. |
transportLiquid | liquid, maxAmount, outputStorage, inputStorage, outputSide |
Передаёт жидкость из одного TileEntity в другой. Возвращает количество переданной жидкости. |
extractLiquid | liquid, maxAmount, inputStorage, outputStorage, inputSide |
Похож на предыдущий, но позволяет извлечь жидкость из TileEntity Возвращает количество переданной жидкости. |
checkHoppers | tileEntity | Позволяет TileEntity взаимодействовать с воронками. Для этого должен вызываться в функции тика TileEntity . |
addItemToSlot | item, slot, maxCount |
Добавляет стак предметов в слот. Изменяет только объект слота, для корректной работы требуется установить слот через container.setSlot. Возвращает количество переданных предметов. |