(Обновлена документация) |
|||
Строка 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"><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"><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"><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 позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей. | Данная библиотека для 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"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"> |
− | <div class="mw-parser-output"> | ||
== Загрузка == | == Загрузка == | ||
Строка 44: | Строка 43: | ||
| style="width: 350px;" | 02.02.2020 | | style="width: 350px;" | 02.02.2020 | ||
|} | |} | ||
− | + | </div> </div> </div> </div> </div> </div> </div> | |
− | </div> </div> </div> </div> </div> </div> | ||
− | </div> | ||
− | |||
== Импорт == | == Импорт == | ||
Строка 57: | Строка 53: | ||
== Интерфейсы хранилищ блоков == | == Интерфейсы хранилищ блоков == | ||
− | + | Интерфейсы хранилищ объединяют в себе функции для работы с контейнерами и хранилищем жидкости и позволяют описать логику передачи предметов и жидкостей. В библиотеке есть стандартные интерфейсы для ванильных контейнеров и TileEntity, но вы можете зарегистрировать свой собственный для вашего TileEntity. | |
− | + | '''Регистрация интерфейса хранилища''' | |
+ | |||
+ | ''StorageInterface.createInterface(id блока, прототип интерфейса).''<br/> <br/> Прототип интерфейса выглядит так: | ||
<syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, { | <syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, { | ||
slots: { | slots: { | ||
Строка 76: | Строка 74: | ||
}, | }, | ||
... | ... | ||
− | } | + | }, |
+ | // функции интерфейса | ||
});</syntaxhighlight> | });</syntaxhighlight> | ||
− | <br/> | + | <br/> '''Функции интерфейса хранилища''' |
+ | |||
+ | Интерфейс хранилища обладает следующими функциями. Вы можете заменить их на свои в прототипе интерфейса при регистрации. | ||
{| border="1" cellpadding="1" cellspacing="1" | {| border="1" cellpadding="1" cellspacing="1" | ||
Строка 86: | Строка 87: | ||
| Аргументы | | Аргументы | ||
| Описание | | Описание | ||
+ | |- | ||
+ | | '''getSlot''' | ||
+ | | name | ||
+ | | Возвращает слот контейнера. | ||
+ | |- | ||
+ | | '''setSlot''' | ||
+ | | name, id, count, data, extra | ||
+ | | Устанавливает предмет в слот контейнера. | ||
+ | |- | ||
+ | | '''clearContainer''' | ||
+ | | - | ||
+ | | Очищает содержимое контейнера | ||
|- | |- | ||
| '''isValidInput''' | | '''isValidInput''' | ||
Строка 93: | Строка 106: | ||
| '''addItem''' | | '''addItem''' | ||
| item, side, maxCount | | item, side, maxCount | ||
− | | Функция добавления предмета | + | | Функция добавления предмета. Возвращает количество добавленных предметов. |
|- | |- | ||
| '''getOutputSlots''' | | '''getOutputSlots''' | ||
| side | | side | ||
− | | Возвращяет | + | | Возвращяет названия доступных слотов выхода со стороны ''side''. |
|- | |- | ||
| '''canReceiveLiquid''' | | '''canReceiveLiquid''' | ||
| liquid, side | | liquid, side | ||
− | | Может ли | + | | Может ли TileEntity принять жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости. |
|- | |- | ||
| '''canTransportLiquid''' | | '''canTransportLiquid''' | ||
| liquid, side | | liquid, side | ||
− | | Может ли | + | | Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости. |
|- | |- | ||
| '''addLiquid''' | | '''addLiquid''' | ||
Строка 113: | Строка 126: | ||
| '''getLiquid''' | | '''getLiquid''' | ||
| liquid, amount | | liquid, amount | ||
− | | Функция извлечения жидкости. По умолчанию работает с liquidStorage | + | | Функция извлечения жидкости. По умолчанию работает с liquidStorage. |
|- | |- | ||
| '''getLiquidStored''' | | '''getLiquidStored''' | ||
− | | | + | | storageName |
− | | Функция получения жидкости, хранящейся в tile entity. | + | | |
+ | Функция получения жидкости, хранящейся в tile entity. Позволяет возвращать разные жидкости для входа и выхода.<br/> '''storageName''' - "input" для получения жидкости на вход и "output" для жидкости на выход. | ||
+ | |||
+ | |- | ||
+ | | '''getLiquidStorage''' | ||
+ | | storageName | ||
+ | | | ||
+ | Возвращает хранилище жидкости. По умолчанию возвращает liquidStorage из TileEntity. Позволяет использовать альтернативные хранилища жидкостей.<br/> '''storageName''' - "input" для хранилища, принимающего жидкость, и "output" для отдающего. | ||
+ | |||
|} | |} | ||
− | <div class="mw-parser-output"> </div> <div class="mw-parser-output"> | + | <div class="mw-parser-output"> </div> <div class="mw-parser-output">В экземпляре интерфейса также есть следующие поля:</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": { | ||
Строка 135: | Строка 156: | ||
"slotResult": {output: true} | "slotResult": {output: true} | ||
} | } | ||
− | });</syntaxhighlight> | + | }); |
− | </div> <div class="mw-parser-output"><div class="mw-parser-output"> </div> </div> </div> <div class="mw-parser-output"> | + | </syntaxhighlight> |
− | == | + | </div> <div class="mw-parser-output"><div class="mw-parser-output"> |
+ | '''Методы StorageInterface для получения интерфесов хранилищ''' | ||
+ | |||
+ | {| border="1" cellpadding="1" cellspacing="1" | ||
+ | |- | ||
+ | | style="width: 178px;" | Название | ||
+ | | style="width: 114px;" | Аргументы | ||
+ | | style="width: 458px;" | Описание | ||
+ | |- | ||
+ | | style="width: 178px;" | '''newStorage''' | ||
+ | | style="width: 114px;" | container или tileEntity | ||
+ | | style="width: 458px;" | Возвращает новый интерфейс хранилища для TileEntity или контейнера | ||
+ | |- | ||
+ | | style="width: 178px;" | '''getStorage''' | ||
+ | | style="width: 114px;" | blockSource, x, y, z | ||
+ | | style="width: 458px;" | | ||
+ | Возвращает интерфейс хранилища для блока, являющегося контейнером. | ||
+ | |||
+ | |- | ||
+ | | style="width: 178px;" | '''getLiquidStorage''' | ||
+ | | style="width: 114px;" | blockSource, x, y, z | ||
+ | | style="width: 458px;" | Возвращает интерфейс хранилища, если на указанных координатах находится TileEntity с хранилищем жидкости. | ||
+ | |- | ||
+ | | style="width: 178px;" | '''getNeighbourStorage''' | ||
+ | | style="width: 114px;" | blockSource, coords, side | ||
+ | | style="width: 458px;" | Возвращает интерфейс хранилища для соседнего блока со стороны side. | ||
+ | |- | ||
+ | | style="width: 178px;" | '''getNeighbourLiquidStorage''' | ||
+ | | style="width: 114px;" | blockSource, coords, side | ||
+ | | style="width: 458px;" | Возвращает интерфейс хранилища для соседнего блока со стороны side, если там находится TileEntity с хранилищем жидкости. | ||
+ | |} | ||
+ | </div> </div> </div> <div class="mw-parser-output"> | ||
+ | == Остальные методы StorageInterface == | ||
{| border="1" cellpadding="1" cellspacing="1" | {| border="1" cellpadding="1" cellspacing="1" | ||
|- | |- | ||
− | | Название | + | | style="width: 178px;" | Название |
− | | Аргументы | + | | style="width: 114px;" | Аргументы |
− | | Описание | + | | style="width: 458px;" | Описание |
|- | |- | ||
− | | '''getNearestContainers''' | + | | style="width: 178px;" | '''getNearestContainers''' |
− | | coords, | + | | style="width: 114px;" | coords, blockSource |
− | | Возвращает соседние | + | | style="width: 458px;" | Возвращает соседние контейнеры относительно блока на координатах ''coords ''в виде объекта, где ключами являются стороны блока. |
|- | |- | ||
− | | '''getNearestLiquidStorages''' | + | | style="width: 178px;" | '''getNearestLiquidStorages''' |
− | | coords, | + | | style="width: 114px;" | coords, blockSource |
− | | | + | | style="width: 458px;" | Работает аналогично предыдущему, но возвращает интерфейсы хранилищ для всех соседних TileEntity, имеющих хранилища жидкостей. |
|- | |- | ||
− | | '''putItems''' | + | | style="width: 178px;" | '''putItems''' |
− | | items, containers | + | | style="width: 114px;" | items, containers |
− | | Добавляет предметы из массива items в контейнеры из | + | | style="width: 458px;" | Добавляет предметы из массива items в контейнеры из объекта, возвращаемого методом ''getNearestContainers'''''.''' |
|- | |- | ||
− | | '''putItemToContainer''' | + | | style="width: 178px;" | '''putItemToContainer''' |
− | | item, container, side, maxCount | + | | style="width: 114px;" | item, container, side, maxCount |
− | | | + | | style="width: 458px;" | |
+ | Добавляет стак предметов в контейнер.<br/> '''maxCount '''- максимальное количество предметов, которое может быть передано за раз (по умолчанию 64). | ||
+ | |||
+ | Возвращает количество переданных предметов. | ||
+ | |||
|- | |- | ||
− | | '''extractItemsFromContainer''' | + | | style="width: 178px;" | '''extractItemsFromContainer''' |
− | | | + | | style="width: 114px;" | inputСontainer , outputContainer, side, maxCount, oneStack |
− | | | + | | style="width: 458px;" | |
− | Позволяет извлечь предмет из контейнера и добавить его в tile entity.<br/> ''' | + | Позволяет извлечь предмет из контейнера и добавить его в tile entity или контейнер.<br/> '''inputStorage '''- TileEntity или контейнер, в который будут добавлены предметы<br/> '''outputContainer '''- контейнер, из которого будут извлечены предметы<br/> '''maxCount '''- сколько предметов может быть извлечено (по умолчанию не ограничено)<br/> '''oneStack '''- если true, то извлечёт только один стак предметов. |
+ | |||
+ | Возвращает количество переданных предметов. | ||
|- | |- | ||
− | | '''transportLiquid''' | + | | style="width: 178px;" | '''extractItemsFromStorage''' |
− | | liquid, maxAmount, | + | | style="width: 114px;" | inputStorage, outputStorage, side, maxCount, oneStack |
− | | | + | | style="width: 458px;" | Аналогичен предыдущему, но принимает аргументами интерфейсы хранилищ. |
− | Передаёт жидкость из одного | + | |- |
+ | | style="width: 178px;" | '''transportLiquid''' | ||
+ | | style="width: 114px;" | liquid, maxAmount, outputStorage, inputStorage, outputSide | ||
+ | | style="width: 458px;" | | ||
+ | Передаёт жидкость из одного TileEntity в другой.<br/> '''liquid '''- название жидкости<br/> '''maxAmount '''- максимальное количество, которое будет передано<br/> '''outputStorage '''- интерфейс хранилища или TileEntity, из которого будет передана жидкость<br/> '''inputStorage '''- интерфейс хранилища, принимающего жидкость<br/> '''outputSide '''- сторона блока, через которую передаётся жидкость. | ||
+ | |||
+ | Возвращает количество переданной жидкости. | ||
|- | |- | ||
− | | '''extractLiquid''' | + | | style="width: 178px;" | '''extractLiquid''' |
− | | liquid, maxAmount, | + | | style="width: 114px;" | liquid, maxAmount, inputStorage, outputStorage, inputSide |
− | | | + | | style="width: 458px;" | |
− | Похож на предыдущий, но позволяет извлечь жидкость из | + | Похож на предыдущий, но позволяет извлечь жидкость из TileEntity<br/> '''liquid '''- название жидкости. Если не указно, то извлечёт любую жидкость из ''outputStorage'', если она может быть принята в ''inputStorage.''<br/> '''inputStorage '''- интерфейс хранилища или TileEntity, принимающий жидкость<br/> '''outputStorage '''- интерфейс хранилища, из которого будет извлечена жидкость<br/> '''inputSide '''- сторона блока, которая будет принимать жидкость. |
+ | |||
+ | Возвращает количество переданной жидкости. | ||
|- | |- | ||
− | | '''checkHoppers''' | + | | style="width: 178px;" | '''checkHoppers''' |
− | | tileEntity | + | | style="width: 114px;" | tileEntity |
− | | Позволяет | + | | style="width: 458px;" | Позволяет TileEntity взаимодействовать с воронками. Для этого должен вызываться в функции тика TileEntity . |
|- | |- | ||
− | | '''addItemToSlot''' | + | | style="width: 178px;" | '''addItemToSlot''' |
− | | item, slot, | + | | style="width: 114px;" | item, slot, maxCount |
− | | | + | | style="width: 458px;" | |
+ | Добавляет стак предметов в слот. Изменяет только объект слота, для корректной работы требуется установить слот через ''container.setSlot.''<br/> '''maxCount '''- максимальное количество, которое будет передано в слот (по умолчанию 64). | ||
+ | |||
+ | Возвращает количество переданных предметов. | ||
+ | |||
|} | |} | ||
− | </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> | + | </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> |
Данная библиотека для 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}
}
});
Методы StorageInterface для получения интерфесов хранилищ
Название | Аргументы | Описание |
newStorage | container или tileEntity | Возвращает новый интерфейс хранилища для TileEntity или контейнера |
getStorage | blockSource, x, y, z |
Возвращает интерфейс хранилища для блока, являющегося контейнером. |
getLiquidStorage | blockSource, x, y, z | Возвращает интерфейс хранилища, если на указанных координатах находится TileEntity с хранилищем жидкости. |
getNeighbourStorage | blockSource, coords, side | Возвращает интерфейс хранилища для соседнего блока со стороны side. |
getNeighbourLiquidStorage | blockSource, coords, side | Возвращает интерфейс хранилища для соседнего блока со стороны side, если там находится TileEntity с хранилищем жидкости. |
Название | Аргументы | Описание |
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. Возвращает количество переданных предметов. |