(Добавлена 11-я версия) |
|||
Строка 1: | Строка 1: | ||
− | Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей. | + | <div class="mw-parser-output">Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей. <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"> | ||
== Загрузка == | == Загрузка == | ||
Строка 76: | Строка 73: | ||
| style="width: 250px;" | 02.02.2020 | | style="width: 250px;" | 02.02.2020 | ||
|} | |} | ||
− | </div> <div class="mw-parser-output"> </div> </div></div></div></div> | + | </div> <div class="mw-parser-output"> </div> </div> </div> </div> </div> |
− | |||
== Импорт == | == Импорт == | ||
Строка 85: | Строка 81: | ||
<pre>IMPORT("StorageInterface"); | <pre>IMPORT("StorageInterface"); | ||
</pre> | </pre> | ||
− | |||
== Интерфейсы хранилищ блоков == | == Интерфейсы хранилищ блоков == | ||
Строка 115: | Строка 110: | ||
} | } | ||
}, | }, | ||
− | // | + | // Все слоты с именем slot и индексами от 2 до 10 (slot2, ..., slot10). |
"slot^2-10": { | "slot^2-10": { | ||
... | ... | ||
Строка 121: | Строка 116: | ||
... | ... | ||
}, | }, | ||
+ | liquidUnitRatio: 1, // количество вёдер жидкости в базовом юните жидкости | ||
// функции интерфейса | // функции интерфейса | ||
});</syntaxhighlight> | });</syntaxhighlight> | ||
Строка 184: | Строка 180: | ||
| '''canTransportLiquid''' | | '''canTransportLiquid''' | ||
| liquid, side | | liquid, side | ||
− | | Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает true | + | | Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает true. |
|- | |- | ||
− | | ''' | + | | '''receiveLiquid''' |
− | | liquid, amount | + | | liquidStorage, liquid, amount |
− | | Функция добавление жидкости. | + | | |
+ | Функция добавление жидкости в хранилище.<br/> '''liquidStorage''' - хранилище, принимающее жидкость<br/> '''liquid '''- название жидкости<br/> '''amount '''- количество жидкости | ||
+ | |||
|- | |- | ||
− | | ''' | + | | '''extractLiquid''' |
− | | liquid, amount | + | | liquidStorage, liquid, amount |
− | | Функция извлечения жидкости | + | | Функция извлечения жидкости из хранилища. |
|- | |- | ||
− | | ''' | + | | '''getInputTank''' |
− | | | + | | side |
| | | | ||
− | + | Возвращает входное хранилище жидкости TileEntity. По умолчанию возвращает liquidStorage.<br/> '''side '''- сторона с которой будет производиться работа | |
|- | |- | ||
− | | ''' | + | | '''getOutputTank''' |
− | | | + | | side |
| | | | ||
− | Возвращает хранилище жидкости. По умолчанию возвращает | + | Возвращает выходное хранилище жидкости TileEntity. По умолчанию возвращает liquidStorage.<br/> '''side '''- сторона с которой будет производиться работа |
|} | |} | ||
− | <div class="mw-parser-output"> | + | <div class="mw-parser-output"><br/> В экземпляре интерфейса также есть следующие поля:</div> <div class="mw-parser-output">''isNativeContainer ''- true если контейнер является ванильным, false если из TileEntity.</div> <div class="mw-parser-output">''container ''- контейнер;<br/> ''tileEntity ''- если создан для TileEntity.</div> <div class="mw-parser-output"> </div> <div class="mw-parser-output">Регистрация интерфейса для TileEntity на примере железной печки из мода IndustrialCraft 2</div> <syntaxhighlight lang="JavaScript">StorageInterface.createInterface(BlockID.ironFurnace, { |
slots: { | slots: { | ||
"slotSource": { | "slotSource": { | ||
Строка 228: | Строка 226: | ||
=== Методы для получения интерфесов хранилищ === | === Методы для получения интерфесов хранилищ === | ||
− | *'''StorageInterface. | + | *'''StorageInterface.getInterface('''''container ''или ''tileEntity''''')''' - возвращает интерфейс хранилища для TileEntity или контейнера. |
− | *'''StorageInterface.getStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища для | + | *'''StorageInterface.getStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища для контейнера на координатах |
− | *'''StorageInterface.getLiquidStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс | + | *'''StorageInterface.getLiquidStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс для TileEntity, хранящего жидкости, по координатам. |
*'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side. | *'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side. | ||
− | *'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс | + | *'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс для соседнего TileEntity, хранящего жидкости, со стороны side |
− | + | </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> | |
== Остальные методы StorageInterface == | == Остальные методы StorageInterface == | ||
Строка 302: | Строка 300: | ||
|} | |} | ||
+ | </div> |
Версия | Ссылка | Список изменений | Дата релиза |
11 | Скачать |
|
01.04.2021 |
10 | Скачать |
|
09.01.2021 |
9 | Скачать |
|
14.12.2020 |
8 | Скачать |
|
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: boolean, // может ли слот принимать предметы
output: boolean, // может ли слот отдавать предметы
// Сторона блока, через которую доступен слот.
// Значение - число или одна из настроек: "horizontal", "verctical", "down", "up".
side: int | string,
// Максимальное количество предметов в слоте
maxStack: int,
// Может ли слот принять предмет item со стороны side
isValid: function(item, side, tileEntity) {
return boolean;
},
// Можно ли извлечь предмет из слота (item - предмет в слоте)
canOutput: function(item, side, tileEntity) {
return boolean;
}
},
// Все слоты с именем slot и индексами от 2 до 10 (slot2, ..., slot10).
"slot^2-10": {
...
},
...
},
liquidUnitRatio: 1, // количество вёдер жидкости в базовом юните жидкости
// функции интерфейса
});
Интерфейс хранилища обладает следующими функциями. Вы можете заменить их на свои в прототипе интерфейса при регистрации.
Название | Аргументы | Описание |
getSlot | name | Возвращает слот контейнера. |
setSlot | name, id, count, data, extra | Устанавливает предмет в слот контейнера. |
isValidInput | item, side, tileEntity | Аналогична функции isValid слота, но действует на все слоты контейнера. По умолчанию возвращает true. |
addItem | item, side, maxCount | Функция добавления предмета. Возвращает количество добавленных предметов. |
addItemToSlot | name, item, maxCount | Добавляет предмет в слот контейнера, maxCount - максимальное количество предмета, которое будет добавлено. |
getReceivingItemCount |
item, side | Возвращает сколько предметов из стака контейнер может принять. |
getContainerSlots |
- | Возвращает все слоты контейнера |
getInputSlots | side | Возвращяет названия слотов входа, доступных со стороны side. |
getOutputSlots | side | Возвращает названия слотов выхода, доступных со стороны side. |
clearContainer | - | Очищает содержимое контейнера |
canReceiveLiquid | liquid, side | Может ли TileEntity принять жидкость с именем liquid со стороны side. По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости. |
canTransportLiquid | liquid, side | Может ли TileEntity отдать жидкость с именем liquid со стороны side. По умолчанию возвращает true. |
receiveLiquid | liquidStorage, liquid, amount |
Функция добавление жидкости в хранилище. |
extractLiquid | liquidStorage, liquid, amount | Функция извлечения жидкости из хранилища. |
getInputTank | side |
Возвращает входное хранилище жидкости TileEntity. По умолчанию возвращает liquidStorage. |
getOutputTank | side |
Возвращает выходное хранилище жидкости TileEntity. По умолчанию возвращает liquidStorage. |
StorageInterface.createInterface(BlockID.ironFurnace, {
slots: {
"slotSource": {
input: true,
side: "up",
isValid: function(item, side){
return Recipes.getFurnaceRecipeResult(item.id, "iron");
}
},
"slotFuel": {
input: true,
side: "horizontal",
isValid: function(item, side){
return 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. Возвращает количество переданных предметов. |