(добавлена 12 версия) |
|||
(не показано 20 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
− | <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">Данная библиотека для 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"> |
− | Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей. | ||
− | |||
== Загрузка == | == Загрузка == | ||
Строка 7: | Строка 5: | ||
|- | |- | ||
| Версия | | Версия | ||
− | | Ссылка | + | | style="width: 36px;" | Ссылка |
− | | style="width: | + | | style="width: 393px;" | Список изменений |
− | | style="width: | + | | style="width: 250px;" | Дата релиза |
+ | |- | ||
+ | | '''12''' | ||
+ | | style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v12 Скачать] | ||
+ | | style="width: 393px;" | | ||
+ | *getOutputSlots возвращает пустые слоты tile entity | ||
+ | |||
+ | | style="width: 250px;" | 07.08.2021 | ||
+ | |- | ||
+ | | '''11''' | ||
+ | | style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v11 Скачать] | ||
+ | | style="width: 393px;" | | ||
+ | *Библиотека поддерживает предметы с отрицательными ид | ||
+ | *В интерфейс хранилища добавлены следующие поля:<br/> - liquidUnitRatio<br/> - getInputTank(side)<br/> - getOutputTank(side)<br/> - receiveLiquid(liquidStorage, liquid, amount)<br/> - extractLiquid(liquidStorage, liquid, amount)<br/> И удалены поля: addLiquid. getLiquid, getLiquidStored, getLiquidStorage | ||
+ | |||
+ | | style="width: 250px;" | 01.04.2021 | ||
+ | |- | ||
+ | | '''10''' | ||
+ | | style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v10 Скачать] | ||
+ | | style="width: 393px;" | | ||
+ | *Метод newStorage переименован в getInterface | ||
+ | *Исправлен стак предметов при использовании функций валидации и макс. стака в ItemContainer из библиотеки | ||
+ | |||
+ | | style="width: 250px;" | 09.01.2021 | ||
+ | |- | ||
+ | | '''9''' | ||
+ | | style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v9 Скачать] | ||
+ | | style="width: 393px;" | | ||
+ | *Новые методы для интерфейсов хранилищ:<br/> - getContainerSlots()<br/> - getInputSlots(side)<br/> - getReceivingItemCount(item, side)<br/> - addItemToSlot(name, item, maxCount)<br/> - clearContainer() | ||
+ | *Исправлен стандартный интерфейс TIleEntity | ||
+ | |||
+ | | style="width: 250px;" | 14.12.2020 | ||
|- | |- | ||
| '''8''' | | '''8''' | ||
− | | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v8 Скачать] | + | | style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v8 Скачать] |
− | | style="width: | + | | style="width: 393px;" | |
− | | style="width: | + | *Поддержка мультиплеера |
+ | *Добавлены стандартные интерфейсы для всех видов контейнеров | ||
+ | *Добавлены методы для получение интерфейсов хранилищ | ||
+ | *Добавлены методы для установки валидации предметов и макс стака слотов в ItemContainer | ||
+ | |||
+ | | style="width: 250px;" | 10.12.2020 | ||
|- | |- | ||
| '''7''' | | '''7''' | ||
− | | style="text-align: center;" | - | + | | style="text-align: center; width: 36px;" | - |
− | | style="width: | + | | style="width: 393px;" | |
− | | style="width: | + | - В описании слота в интерфейсе хранилища теперь можно указать стороны, через которые с ним можно взаимодействовать |
+ | |||
+ | | style="width: 250px;" | 10.06.2020 | ||
|- | |- | ||
| '''6''' | | '''6''' | ||
− | | [https://yadi.sk/d/TITakdpdsjIGug Скачать] | + | | style="width: 36px;" | [https://yadi.sk/d/TITakdpdsjIGug Скачать] |
− | | style="width: | + | | style="width: 393px;" | - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров. |
− | | style="width: | + | | style="width: 250px;" | 18.04.2020 |
|- | |- | ||
| '''5''' | | '''5''' | ||
− | | [https://yadi.sk/d/Om5TRGdlhylfQA Скачать] | + | | style="width: 36px;" | [https://yadi.sk/d/Om5TRGdlhylfQA Скачать] |
− | | style="width: | + | | style="width: 393px;" | - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid |
− | | style="width: | + | | style="width: 250px;" | 09.03.2020 |
|- | |- | ||
| '''4''' | | '''4''' | ||
− | | [https://yadi.sk/d/1gBu4a-fEme-jA Скачать] | + | | style="width: 36px;" | [https://yadi.sk/d/1gBu4a-fEme-jA Скачать] |
− | | style="width: | + | | style="width: 393px;" | |
− | + | *Улучшена работа с жидкостями | |
+ | *В интерфейс добавлено поле liquidStorage | ||
− | | style="width: | + | | style="width: 250px;" | 05.03.2020 |
|- | |- | ||
| '''3''' | | '''3''' | ||
− | | [https://drive.google.com/file/d/1Hsp2nLIER0wF-ZzDvdsy1btxWFhnebv1/view?usp=sharing Скачать] | + | | style="width: 36px;" | [https://drive.google.com/file/d/1Hsp2nLIER0wF-ZzDvdsy1btxWFhnebv1/view?usp=sharing Скачать] |
− | | style="width: | + | | style="width: 393px;" | - Релиз библиотеки |
− | | style="width: | + | | style="width: 250px;" | 02.02.2020 |
|} | |} | ||
− | </div> < | + | </div> <div class="mw-parser-output"> </div> </div> </div> </div> </div> |
== Импорт == | == Импорт == | ||
− | Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/ | + | Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IC_Libraries/blob/master/library/StorageInterface.js StorageInterface.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать). |
+ | |||
+ | Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку: | ||
+ | <pre>IMPORT("StorageInterface"); | ||
+ | </pre> | ||
− | |||
− | |||
− | |||
== Интерфейсы хранилищ блоков == | == Интерфейсы хранилищ блоков == | ||
Интерфейсы хранилищ объединяют в себе функции для работы с контейнерами и хранилищем жидкости и позволяют описать логику передачи предметов и жидкостей. В библиотеке есть стандартные интерфейсы для ванильных контейнеров и TileEntity, но вы можете зарегистрировать свой собственный для вашего TileEntity. | Интерфейсы хранилищ объединяют в себе функции для работы с контейнерами и хранилищем жидкости и позволяют описать логику передачи предметов и жидкостей. В библиотеке есть стандартные интерфейсы для ванильных контейнеров и TileEntity, но вы можете зарегистрировать свой собственный для вашего TileEntity. | ||
+ | <div class="mw-parser-output"><div class="mw-parser-output"> | ||
+ | === Регистрация интерфейса хранилища === | ||
− | + | ''StorageInterface.createInterface(id блока, прототип интерфейса).'' | |
− | + | Все параметры слотов и функции прототипа интерфейса опциональны.<br/> Прототип интерфейса выглядит так: | |
<syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, { | <syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, { | ||
slots: { | slots: { | ||
"slot1": { | "slot1": { | ||
− | input: | + | input: boolean, // может ли слот принимать предметы |
− | output: | + | output: boolean, // может ли слот отдавать предметы |
− | + | // Сторона блока, через которую доступен слот. | |
− | return | + | // Значение - число или одна из настроек: "horizontal", "verctical", "down", "up". |
+ | side: int | string, | ||
+ | // Максимальное количество предметов в слоте | ||
+ | maxStack: int, | ||
+ | // Может ли слот принять предмет item со стороны side | ||
+ | isValid: function(item, side, tileEntity) { | ||
+ | return boolean; | ||
}, | }, | ||
− | + | // Можно ли извлечь предмет из слота (item - предмет в слоте) | |
− | return | + | canOutput: function(item, side, tileEntity) { |
+ | return boolean; | ||
} | } | ||
}, | }, | ||
− | " | + | // Все слоты с именем slot и индексами от 2 до 10 (slot2, ..., slot10). |
+ | "slot^2-10": { | ||
... | ... | ||
}, | }, | ||
... | ... | ||
}, | }, | ||
+ | liquidUnitRatio: 1, // количество вёдер жидкости в базовом юните жидкости | ||
// функции интерфейса | // функции интерфейса | ||
});</syntaxhighlight> | });</syntaxhighlight> | ||
− | + | </div> </div> | |
=== <br/> Функции интерфейса хранилища === | === <br/> Функции интерфейса хранилища === | ||
Строка 95: | Строка 144: | ||
| name, id, count, data, extra | | name, id, count, data, extra | ||
| Устанавливает предмет в слот контейнера. | | Устанавливает предмет в слот контейнера. | ||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| '''isValidInput''' | | '''isValidInput''' | ||
Строка 107: | Строка 152: | ||
| item, side, maxCount | | item, side, maxCount | ||
| Функция добавления предмета. Возвращает количество добавленных предметов. | | Функция добавления предмета. Возвращает количество добавленных предметов. | ||
+ | |- | ||
+ | | '''addItemToSlot''' | ||
+ | | name, item, maxCount | ||
+ | | Добавляет предмет в слот контейнера, maxCount - максимальное количество предмета, которое будет добавлено. | ||
+ | |- | ||
+ | | | ||
+ | '''getReceivingItemCount''' | ||
+ | |||
+ | | item, side | ||
+ | | Возвращает сколько предметов из стака контейнер может принять. | ||
+ | |- | ||
+ | | | ||
+ | '''getContainerSlots''' | ||
+ | |||
+ | | - | ||
+ | | Возвращает все слоты контейнера | ||
+ | |- | ||
+ | | '''getInputSlots''' | ||
+ | | side | ||
+ | | Возвращяет названия слотов входа, доступных со стороны ''side''. | ||
|- | |- | ||
| '''getOutputSlots''' | | '''getOutputSlots''' | ||
| side | | side | ||
− | | | + | | Возвращает названия слотов выхода, доступных со стороны ''side''. |
+ | |- | ||
+ | | '''clearContainer''' | ||
+ | | - | ||
+ | | Очищает содержимое контейнера | ||
|- | |- | ||
| '''canReceiveLiquid''' | | '''canReceiveLiquid''' | ||
Строка 118: | Строка 187: | ||
| '''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": { | ||
input: true, | input: true, | ||
+ | side: "up", | ||
isValid: function(item, side){ | isValid: function(item, side){ | ||
− | return | + | return Recipes.getFurnaceRecipeResult(item.id, "iron"); |
} | } | ||
}, | }, | ||
"slotFuel": { | "slotFuel": { | ||
− | input: true, | + | input: true, |
+ | side: "horizontal", | ||
isValid: function(item, side){ | isValid: function(item, side){ | ||
− | return | + | return Recipes.getFuelBurnDuration(item.id, item.data) > 0; |
} | } | ||
}, | }, | ||
"slotResult": {output: true} | "slotResult": {output: true} | ||
} | } | ||
− | }); | + | });</syntaxhighlight> |
− | </syntaxhighlight> | + | <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.getInterface('''''container ''или ''tileEntity''''')''' - возвращает интерфейс хранилища для TileEntity или контейнера. | |
− | + | *'''StorageInterface.getStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища для контейнера на координатах | |
− | + | *'''StorageInterface.getLiquidStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс для TileEntity, хранящего жидкости, по координатам. | |
− | + | *'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side. | |
− | + | *'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс для соседнего TileEntity, хранящего жидкости, со стороны side | |
− | + | </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | </div> </div> </div> <div | ||
== Остальные методы StorageInterface == | == Остальные методы StorageInterface == | ||
Строка 241: | Строка 290: | ||
| style="width: 114px;" | liquid, maxAmount, inputStorage, outputStorage, inputSide | | style="width: 114px;" | liquid, maxAmount, inputStorage, outputStorage, inputSide | ||
| style="width: 458px;" | | | style="width: 458px;" | | ||
− | Похож на предыдущий, но позволяет извлечь жидкость из TileEntity<br/> '''liquid '''- название жидкости. Если не | + | Похож на предыдущий, но позволяет извлечь жидкость из TileEntity<br/> '''liquid '''- название жидкости. Если не указано, то извлечёт любую жидкость из ''outputStorage'', если она может быть принята в ''inputStorage.''<br/> '''inputStorage '''- интерфейс хранилища или TileEntity, принимающий жидкость<br/> '''outputStorage '''- интерфейс хранилища, из которого будет извлечена жидкость<br/> '''inputSide '''- сторона блока, которая будет принимать жидкость. |
Возвращает количество переданной жидкости. | Возвращает количество переданной жидкости. | ||
Строка 258: | Строка 307: | ||
|} | |} | ||
− | + | </div> </div> </div> </div> |
Версия | Ссылка | Список изменений | Дата релиза |
12 | Скачать |
|
07.08.2021 |
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. Возвращает количество переданных предметов. |