StorageInterface — различия между версиями

(добавлена 12 версия)
 
(не показано 28 промежуточных версий 5 участников)
Строка 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">Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью&nbsp;интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей. <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 позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью&nbsp;интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей.
 
<div class="mw-parser-output"><div class="mw-parser-output">
 
 
== Загрузка ==
 
== Загрузка ==
  
Строка 7: Строка 5:
 
|-
 
|-
 
| Версия
 
| Версия
| Ссылка
+
| style="width: 36px;" | Ссылка
| style="width: 280px;" | Список изменений
+
| style="width: 393px;" | Список изменений
| style="width: 350px;" | Дата релиза
+
| 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;" |
 +
*Библиотека поддерживает&nbsp;предметы с отрицательными ид
 +
*В интерфейс хранилища добавлены следующие поля:<br/> -&nbsp;liquidUnitRatio<br/> -&nbsp;getInputTank(side)<br/> -&nbsp;getOutputTank(side)<br/> -&nbsp;receiveLiquid(liquidStorage, liquid, amount)<br/> -&nbsp;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/> -&nbsp;getInputSlots(side)<br/> -&nbsp;getReceivingItemCount(item, side)<br/> -&nbsp;addItemToSlot(name, item, maxCount)<br/> -&nbsp;clearContainer()
 +
*Исправлен стандартный интерфейс TIleEntity
 +
 
 +
| style="width: 250px;" | 14.12.2020
 +
|-
 +
| '''8'''
 +
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v8 Скачать]
 +
| style="width: 393px;" |
 +
*Поддержка мультиплеера
 +
*Добавлены стандартные интерфейсы для всех видов контейнеров
 +
*Добавлены методы для получение интерфейсов хранилищ
 +
*Добавлены методы для установки валидации предметов и макс стака&nbsp;слотов в ItemContainer
 +
 
 +
| style="width: 250px;" | 10.12.2020
 +
|-
 +
| '''7'''
 +
| style="text-align: center; width: 36px;" | -
 +
| style="width: 393px;" |
 +
- В описании слота в интерфейсе хранилища теперь можно указать стороны, через которые с ним можно взаимодействовать
 +
 
 +
| style="width: 250px;" | 10.06.2020
 +
|-
 +
| '''6'''
 +
| style="width: 36px;" | [https://yadi.sk/d/TITakdpdsjIGug Скачать]
 +
| style="width: 393px;" | - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров.
 +
| style="width: 250px;" | 18.04.2020
 +
|-
 +
| '''5'''
 +
| style="width: 36px;" | [https://yadi.sk/d/Om5TRGdlhylfQA Скачать]
 +
| style="width: 393px;" | - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid
 +
| 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: 280px;" |  
+
| style="width: 393px;" |  
- Улучшена работа с жидкостями<br/> - В интерфейс добавлено поле liquidStorage
+
*Улучшена работа с жидкостями  
 +
*В интерфейс добавлено поле liquidStorage  
  
| style="width: 350px;" | 04.03.2020
+
| 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: 280px;" | релиз библиотеки
+
| style="width: 393px;" | - Релиз библиотеки
| style="width: 350px;" | 02.02.2020
+
| style="width: 250px;" | 02.02.2020
 
|}
 
|}
</div> </div>  
+
</div> <div class="mw-parser-output">&nbsp;</div> </div> </div> </div> </div>  
 
== Импорт ==
 
== Импорт ==
  
Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IndustrialCraft_2/blob/master/IndustrialCraft²/lib/StorageInterface.js StorageInterface.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).
+
Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IC_Libraries/blob/master/library/StorageInterface.js StorageInterface.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).
 +
 
 +
Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:
 +
<pre>IMPORT("StorageInterface");
 +
</pre>
 +
 
 +
== Интерфейсы хранилищ блоков ==
  
Для импорта библиотеки в мод в заголовочном файле (или если он остутвует в первом файле кода) следует добавить строку:
+
Интерфейсы хранилищ объединяют в себе функции для работы с контейнерами и хранилищем жидкости и позволяют описать логику передачи предметов и жидкостей. В библиотеке есть стандартные интерфейсы для ванильных контейнеров и TileEntity, но вы можете зарегистрировать свой собственный для вашего TileEntity.
<pre>IMPORT("StorageInterface");</pre>
 
 
<div class="mw-parser-output"><div class="mw-parser-output">
 
<div class="mw-parser-output"><div class="mw-parser-output">
== Интерфейсы хранилищ блоков ==
+
=== Регистрация интерфейса&nbsp;хранилища ===
  
На данный момент интерфейсы привязываются только к tile entity, но в будущем по умолчанию интерфейсы будут прописаны у контейнеров из Майнкрафта, прежде всего печки.
+
''StorageInterface.createInterface(id блока, прототип интерфейса).''
  
Интерфейс для хранилища добавляется с помощью метода&nbsp;''StorageInterface.createInterface(id блока, объект интерфейса).''<br/> Регистрация слотов в интерфейсе выглядит так:
+
Все параметры слотов и функции прототипа интерфейса опциональны.<br/> Прототип интерфейса выглядит так:
 
<syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, {
 
<syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, {
 
     slots: {
 
     slots: {
 
         "slot1": {
 
         "slot1": {
             input: true/false, // может ли слот принимать предметы
+
             input: boolean, // может ли слот принимать предметы
             output: true/false, // может ли слот отдавать предметы
+
             output: boolean, // может ли слот отдавать предметы
             isValid: function(item, side, tileEntity){ // может ли слот принять предмет item со стороны side
+
             // Сторона блока, через которую доступен слот.
                 return true/false;
+
            // Значение - число или одна из настроек: "horizontal", "verctical", "down", "up".
 +
            side: int | string,
 +
            // Максимальное количество предметов в слоте
 +
           maxStack: int,
 +
            // Может ли слот принять предмет item со стороны side
 +
            isValid: function(item, side, tileEntity) {
 +
                 return boolean;
 
             },
 
             },
             canOutput: function(item, side, tileEntity){ // можно ли извлечь предмет из слота (item - предмет в слоте)
+
             // Можно ли извлечь предмет из слота (item - предмет в слоте)
                 return true/false;
+
            canOutput: function(item, side, tileEntity) {
 +
                 return boolean;
 
             }
 
             }
 
         },
 
         },
         "slot2": {
+
        // Все слоты с именем slot и индексами от 2 до 10 (slot2, ..., slot10).
 +
         "slot^2-10": {
 
             ...
 
             ...
 
         },
 
         },
 
         ...
 
         ...
     }
+
     },
 +
   liquidUnitRatio: 1, // количество вёдер жидкости в базовом юните жидкости
 +
   // функции интерфейса
 
});</syntaxhighlight>
 
});</syntaxhighlight>
 +
</div> </div>
 +
=== <br/> Функции интерфейса хранилища ===
  
<br/> Так же интерфейс хранилища обладает следующими функциями, которые могут быть перезаписаны в объекте интерфейса:
+
Интерфейс хранилища обладает следующими функциями. Вы можете заменить их на свои в прототипе интерфейса при регистрации.
  
 
{| border="1" cellpadding="1" cellspacing="1"
 
{| border="1" cellpadding="1" cellspacing="1"
Строка 62: Строка 136:
 
| Аргументы
 
| Аргументы
 
| Описание
 
| Описание
 +
|-
 +
| '''getSlot'''
 +
| name
 +
| Возвращает слот контейнера.
 +
|-
 +
| '''setSlot'''
 +
| name, id, count, data, extra
 +
| Устанавливает предмет в слот контейнера.
 
|-
 
|-
 
| '''isValidInput'''
 
| '''isValidInput'''
Строка 69: Строка 151:
 
| '''addItem'''
 
| '''addItem'''
 
| item, side, maxCount
 
| item, side, maxCount
| Функция добавления предмета, может быть перезаписана. Возвращает количество добавленных предметов.
+
| Функция добавления предмета. Возвращает количество добавленных предметов.
 +
|-
 +
| '''addItemToSlot'''
 +
| name, item, maxCount
 +
| Добавляет предмет в слот контейнера, maxCount - максимальное количество предмета, которое будет добавлено.
 +
|-
 +
|
 +
'''getReceivingItemCount'''
 +
 
 +
| item, side
 +
| Возвращает сколько предметов из стака контейнер может принять.
 +
|-
 +
|
 +
'''getContainerSlots'''
 +
 
 +
| -
 +
| Возвращает все слоты контейнера
 +
|-
 +
| '''getInputSlots'''
 +
| side
 +
| Возвращяет названия слотов входа,&nbsp;доступных со стороны ''side''.
 
|-
 
|-
 
| '''getOutputSlots'''
 
| '''getOutputSlots'''
 
| side
 
| side
| Возвращяет слоты выхода, с которыми возможна работа с определённой стороны.
+
| Возвращает названия слотов выхода,&nbsp;доступных со стороны ''side''.
 +
|-
 +
| '''clearContainer'''
 +
| -
 +
| Очищает содержимое контейнера
 
|-
 
|-
 
| '''canReceiveLiquid'''
 
| '''canReceiveLiquid'''
 
| liquid, side
 
| liquid, side
| Может ли tile entity принять жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает false.
+
| Может ли&nbsp;TileEntity принять жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.
 
|-
 
|-
 
| '''canTransportLiquid'''
 
| '''canTransportLiquid'''
 
| liquid, side
 
| liquid, side
| Может ли tile entity отдать жидкость с именем ''liquid ''со стороны ''side''.&nbsp;По умолчанию возвращает false.
+
| Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''.&nbsp;По умолчанию возвращает true.
 +
|-
 +
| '''receiveLiquid'''
 +
| liquidStorage, liquid, amount
 +
|
 +
Функция добавление жидкости в хранилище.<br/> '''liquidStorage'''&nbsp;- хранилище, принимающее жидкость<br/> '''liquid '''- название жидкости<br/> '''amount '''- количество жидкости
 +
 
 
|-
 
|-
| '''addLiquid'''
+
| '''extractLiquid'''
| liquid, amount
+
| liquidStorage, liquid, amount
| Функция добавление жидкости. По умолчанию работает с liquidStorage.
+
| Функция извлечения жидкости из хранилища.
 
|-
 
|-
| '''getLiquid'''
+
| '''getInputTank'''
| liquid, amount
+
| side
| Функция извлечения жидкости.&nbsp;По умолчанию работает с liquidStorage.&nbsp;В функциях StorageInterface для передачи жидкости сначала извлекается весь возможный объём жидкости, а потом функция вызывается повторно с отрицательным ''amount&nbsp;''для возвращения жидкости, которую не удалось передать.
+
|  
 +
Возвращает входное&nbsp;хранилище жидкости TileEntity. По умолчанию возвращает&nbsp;liquidStorage.<br/> '''side&nbsp;'''- сторона с которой будет производиться работа
 +
 
 
|-
 
|-
| '''getLiquidStored'''
+
| '''getOutputTank'''
| storage, side
+
| side
| Функция получения жидкости, хранящейся в tile entity. В функциях StorageInterface аргумент ''storage&nbsp;''равен ''"input" ''если проверяется жидкость для добавления, и''"output"'' если для извлечения.
+
|  
 +
Возвращает выходное хранилище жидкости TileEntity.&nbsp;По умолчанию возвращает&nbsp;liquidStorage.<br/> '''side&nbsp;'''- сторона с которой будет производиться работа
 +
 
 
|}
 
|}
<div class="mw-parser-output">&nbsp;</div> <div class="mw-parser-output">Интерфейс хранилища&nbsp;сохраняется в поле ''interface ''объекта&nbsp;tile entity. В экземпляре интерфейса есть следующие указатели:</div> <div class="mw-parser-output">''tileEntity ''- на tile entity, к которому он привязан;</div> <div class="mw-parser-output">''container ''- на контейнер tile entity;</div> <div class="mw-parser-output">''liquidStorage ''- на хранилище жидкости tileEntity.</div> <div class="mw-parser-output">&nbsp;</div> <div class="mw-parser-output">Добавление интерфейса для tile entity на примере железной печки из мода IndustrialCraft 2</div> <syntaxhighlight lang="JavaScript">StorageInterface.createInterface(BlockID.ironFurnace, {
+
<div class="mw-parser-output"><br/> В экземпляре интерфейса также есть следующие поля:</div> <div class="mw-parser-output">''isNativeContainer ''- true если контейнер является ванильным, false если&nbsp;из TileEntity.</div> <div class="mw-parser-output">''container ''- контейнер;<br/> ''tileEntity ''- если создан для TileEntity.</div> <div class="mw-parser-output">&nbsp;</div> <div class="mw-parser-output">Регистрация интерфейса для TileEntity&nbsp;на примере железной печки из мода 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 side != 0 && Recipes.getFurnaceRecipeResult(item.id, "iron");
+
                 return Recipes.getFurnaceRecipeResult(item.id, "iron");
 
             }
 
             }
 
         },
 
         },
 
         "slotFuel": {
 
         "slotFuel": {
             input: true,  
+
             input: true,
 +
            side: "horizontal",
 
             isValid: function(item, side){
 
             isValid: function(item, side){
                 return side != 1 && Recipes.getFuelBurnDuration(item.id, item.data) > 0;
+
                 return Recipes.getFuelBurnDuration(item.id, item.data) > 0;
 
             }
 
             }
 
         },
 
         },
Строка 112: Строка 230:
 
     }
 
     }
 
});</syntaxhighlight>
 
});</syntaxhighlight>
</div> <div class="mw-parser-output"><div class="mw-parser-output">&nbsp;</div> </div> </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">
== Методы для передачи предметов и жидкостей ==
+
=== Методы для получения&nbsp;интерфесов хранилищ ===
 +
 
 +
*'''StorageInterface.getInterface('''''container ''или ''tileEntity''''')''' - возвращает интерфейс хранилища для TileEntity или контейнера.
 +
*'''StorageInterface.getStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища для контейнера на координатах
 +
*'''StorageInterface.getLiquidStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс для TileEntity,&nbsp;хранящего жидкости,&nbsp;по&nbsp;координатам.
 +
*'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side.
 +
*'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс для соседнего TileEntity, хранящего жидкости,&nbsp;со стороны side
 +
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div>  
 +
== Остальные методы 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, side, sideExcluded
+
| style="width: 114px;" | coords, blockSource
| Возвращает соседние с блоком на координатах ''coords ''контейнеры в виде массива. Если указан параметр ''side'', то вернёт контейнер с этой стороны. Если ''sideExcluded ''равен ''true'', то наоборот, все контейнеры кроме контейнера с указанной стороны.
+
| style="width: 458px;" | Возвращает соседние контейнеры относительно блока на координатах ''coords ''в виде объекта, где ключами являются стороны блока.
 
|-
 
|-
| '''getNearestLiquidStorages'''
+
| style="width: 178px;" | '''getNearestLiquidStorages'''
| coords, side, sideExcluded
+
| style="width: 114px;" | coords, blockSource
| Аналогична предыдущей, но возвращает все соседние tile entity, имеющие хранилища жидкостей.
+
| style="width: 458px;" | Работает аналогично предыдущему, но возвращает интерфейсы хранилищ для всех соседних TileEntity, имеющих хранилища жидкостей.
 
|-
 
|-
| '''putItems'''
+
| style="width: 178px;" | '''putItems'''
| items, containers
+
| style="width: 114px;" | items, containers
| Добавляет предметы из массива items в контейнеры из массива containers. Удобно использовать в связке с методом&nbsp;''getNearestContainers'''''.'''
+
| style="width: 458px;" | Добавляет предметы из массива items в контейнеры из объекта, возвращаемого методом&nbsp;''getNearestContainers'''''.'''
 
|-
 
|-
| '''putItemToContainer'''
+
| style="width: 178px;" | '''putItemToContainer'''
| item, container, side, maxCount
+
| style="width: 114px;" | item, container, side, maxCount
| Метод более низкого уровня, на котором основана работа предыдущего метода. Добавляет стак предметов в контейнер, но позволяет также указать максимальное количество предметов, которое может быть передано за раз.
+
| style="width: 458px;" |
 +
Добавляет стак предметов в контейнер.<br/> '''maxCount '''- максимальное количество предметов, которое может быть передано за раз&nbsp;(по умолчанию 64).
 +
 
 +
Возвращает количество переданных предметов.
 +
 
 
|-
 
|-
| '''extractItemsFromContainer'''
+
| style="width: 178px;" | '''extractItemsFromContainer'''
| inputTile, container, side, maxCount, oneStack
+
| style="width: 114px;" | inputСontainer , outputContainer, side, maxCount, oneStack
|  
+
| style="width: 458px;" |  
Позволяет извлечь предмет из контейнера и добавить его в tile entity.<br/> '''inputTile&nbsp;'''- tile entity, в который будут добавлены предметы<br/> '''container '''- контейнер, из которого будут извлечены предметы<br/> '''maxCount '''- сколько предметов извлечь [опционально]<br/> '''oneStack '''- если true, то будет извлечён только один стак предметов.
+
Позволяет извлечь предмет из контейнера и добавить его в tile entity или контейнер.<br/> '''inputStorage&nbsp;'''- TileEntity или контейнер, в который будут добавлены предметы<br/> '''outputContainer '''- контейнер, из которого будут извлечены предметы<br/> '''maxCount '''- сколько предметов может быть извлечено (по умолчанию не ограничено)<br/> '''oneStack '''- если true, то извлечёт&nbsp;только один стак предметов.
 +
 
 +
Возвращает количество переданных предметов.
  
 
|-
 
|-
| '''transportLiquid'''
+
| style="width: 178px;" | '''extractItemsFromStorage'''
| liquid, maxAmount, outputTile, inputTile, outputSide
+
| style="width: 114px;" | inputStorage, outputStorage, side, maxCount, oneStack
|  
+
| style="width: 458px;" | Аналогичен предыдущему, но принимает аргументами интерфейсы хранилищ.
Передаёт жидкость из одного tile entity в другой.<br/> '''liquid&nbsp;'''- название жидкости<br/> '''maxAmount&nbsp;'''- максимальное количество, которое будет передано<br/> '''outputTile&nbsp;'''- tile entity, из которого будет передана жидкость<br/> '''inputTile&nbsp;'''- tile entity, в который будет передана жидкость<br/> '''outputSide&nbsp;'''- сторона, через которую передаётся жидкость
+
|-
 +
| style="width: 178px;" | '''transportLiquid'''
 +
| style="width: 114px;" | liquid, maxAmount, outputStorage, inputStorage, outputSide
 +
| style="width: 458px;" |  
 +
Передаёт жидкость из одного TileEntity в другой.<br/> '''liquid&nbsp;'''- название жидкости<br/> '''maxAmount&nbsp;'''- максимальное количество, которое будет передано<br/> '''outputStorage&nbsp;'''- интерфейс хранилища или TileEntity, из которого будет передана жидкость<br/> '''inputStorage&nbsp;'''- интерфейс хранилища, принимающего жидкость<br/> '''outputSide&nbsp;'''- сторона блока, через которую передаётся жидкость.
 +
 
 +
Возвращает количество переданной жидкости.
  
 
|-
 
|-
| '''extractLiquid'''
+
| style="width: 178px;" | '''extractLiquid'''
| liquid, maxAmount, inputTile, outputTile, inputSide
+
| style="width: 114px;" | liquid, maxAmount, inputStorage, outputStorage, inputSide
|  
+
| style="width: 458px;" |  
Похож на предыдущий, но позволяет извлечь жидкость из tile entity<br/> '''liquid '''- в отличие от предыдущего метода жидкость может быть не указана, тогда извлечёт жидкость, которая хранится в&nbsp;''outputTile''.<br/> '''inputSide '''- сторона, в&nbsp;которую будет поступать жидкость
+
Похож на предыдущий, но позволяет извлечь жидкость из TileEntity<br/> '''liquid '''- название жидкости. Если не указано, то извлечёт любую жидкость&nbsp;из&nbsp;''outputStorage'',&nbsp;если она может быть принята в&nbsp;''inputStorage.''<br/> '''inputStorage&nbsp;'''- интерфейс хранилища или TileEntity,&nbsp;принимающий жидкость<br/> '''outputStorage&nbsp;'''- интерфейс хранилища, из которого будет извлечена жидкость<br/> '''inputSide '''- сторона блока, которая будет принимать жидкость.
 +
 
 +
Возвращает количество переданной жидкости.
  
 
|-
 
|-
| '''checkHoppers'''
+
| style="width: 178px;" | '''checkHoppers'''
| tileEntity
+
| style="width: 114px;" | tileEntity
| Позволяет tile entity взаимодействовать с воронками. Для этого должна выполняться в функции тика tile entity. Требует интерфейса хранилища у tile entity для работы.
+
| style="width: 458px;" | Позволяет TileEntity взаимодействовать с воронками. Для этого должен вызываться в функции тика TileEntity .
 
|-
 
|-
| '''addItemToSlot'''
+
| style="width: 178px;" | '''addItemToSlot'''
| item, slot, count
+
| style="width: 114px;" | item, slot, maxCount
| Внутренний метод библиотеки для добавления предмета в слот. При использовании на нативном контейнере нужно также установить слот, используя&nbsp;''container.setSlot.''
+
| style="width: 458px;" |
 +
Добавляет стак предметов&nbsp;в слот. Изменяет только объект слота, для корректной работы требуется установить слот через&nbsp;''container.setSlot.''<br/> '''maxCount '''- максимальное количество, которое будет передано в слот&nbsp;(по умолчанию 64).
 +
 
 +
Возвращает количество переданных предметов.
 +
 
 
|}
 
|}
<div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output">&nbsp;</div> </div> </div> </div> </div>
+
</div> </div> </div> </div>
== Обратная совместимость ==
 
 
 
Данная библиотека совместима с модами, использующими старый стандарт описания слотов tile entity&nbsp;через функцию&nbsp;''getTransportSlots'', а так же&nbsp;добавляет эту функцию&nbsp;и функцию ''addTransportedItem ''для tile entity при создании его интерфейса.
 
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div></div></div>
 

Текущая версия на 13:40, 3 октября 2022

Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей.

Загрузка[править]

Версия Ссылка Список изменений Дата релиза
12 Скачать
  • getOutputSlots возвращает пустые слоты tile entity
07.08.2021
11 Скачать
  • Библиотека поддерживает предметы с отрицательными ид
  • В интерфейс хранилища добавлены следующие поля:
    - liquidUnitRatio
    - getInputTank(side)
    - getOutputTank(side)
    - receiveLiquid(liquidStorage, liquid, amount)
    - extractLiquid(liquidStorage, liquid, amount)
    И удалены поля: addLiquid. getLiquid, getLiquidStored, getLiquidStorage
01.04.2021
10 Скачать
  • Метод newStorage переименован в getInterface
  • Исправлен стак предметов при использовании функций валидации и макс. стака в ItemContainer из библиотеки
09.01.2021
9 Скачать
  • Новые методы для интерфейсов хранилищ:
    - getContainerSlots()
    - getInputSlots(side)
    - getReceivingItemCount(item, side)
    - addItemToSlot(name, item, maxCount)
    - clearContainer()
  • Исправлен стандартный интерфейс TIleEntity
14.12.2020
8 Скачать
  • Поддержка мультиплеера
  • Добавлены стандартные интерфейсы для всех видов контейнеров
  • Добавлены методы для получение интерфейсов хранилищ
  • Добавлены методы для установки валидации предметов и макс стака слотов в ItemContainer
10.12.2020
7 -

- В описании слота в интерфейсе хранилища теперь можно указать стороны, через которые с ним можно взаимодействовать

10.06.2020
6 Скачать - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров. 18.04.2020
5 Скачать - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid 09.03.2020
4 Скачать
  • Улучшена работа с жидкостями
  • В интерфейс добавлено поле liquidStorage
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

Функция добавление жидкости в хранилище.
liquidStorage - хранилище, принимающее жидкость
liquid - название жидкости
amount - количество жидкости

extractLiquid liquidStorage, liquid, amount Функция извлечения жидкости из хранилища.
getInputTank side

Возвращает входное хранилище жидкости TileEntity. По умолчанию возвращает liquidStorage.
side - сторона с которой будет производиться работа

getOutputTank side

Возвращает выходное хранилище жидкости TileEntity. По умолчанию возвращает liquidStorage.
side - сторона с которой будет производиться работа


В экземпляре интерфейса также есть следующие поля:
isNativeContainer - true если контейнер является ванильным, false если из TileEntity.
container - контейнер;
tileEntity - если создан для TileEntity.
 
Регистрация интерфейса для TileEntity на примере железной печки из мода IndustrialCraft 2
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}
    }
});

Методы для получения интерфесов хранилищ[править]

  • 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

Остальные методы StorageInterface[править]

Название Аргументы Описание
getNearestContainers coords, blockSource Возвращает соседние контейнеры относительно блока на координатах coords в виде объекта, где ключами являются стороны блока.
getNearestLiquidStorages coords, blockSource Работает аналогично предыдущему, но возвращает интерфейсы хранилищ для всех соседних TileEntity, имеющих хранилища жидкостей.
putItems items, containers Добавляет предметы из массива items в контейнеры из объекта, возвращаемого методом getNearestContainers.
putItemToContainer item, container, side, maxCount

Добавляет стак предметов в контейнер.
maxCount - максимальное количество предметов, которое может быть передано за раз (по умолчанию 64).

Возвращает количество переданных предметов.

extractItemsFromContainer inputСontainer , outputContainer, side, maxCount, oneStack

Позволяет извлечь предмет из контейнера и добавить его в tile entity или контейнер.
inputStorage - TileEntity или контейнер, в который будут добавлены предметы
outputContainer - контейнер, из которого будут извлечены предметы
maxCount - сколько предметов может быть извлечено (по умолчанию не ограничено)
oneStack - если true, то извлечёт только один стак предметов.

Возвращает количество переданных предметов.

extractItemsFromStorage inputStorage, outputStorage, side, maxCount, oneStack Аналогичен предыдущему, но принимает аргументами интерфейсы хранилищ.
transportLiquid liquid, maxAmount, outputStorage, inputStorage, outputSide

Передаёт жидкость из одного TileEntity в другой.
liquid - название жидкости
maxAmount - максимальное количество, которое будет передано
outputStorage - интерфейс хранилища или TileEntity, из которого будет передана жидкость
inputStorage - интерфейс хранилища, принимающего жидкость
outputSide - сторона блока, через которую передаётся жидкость.

Возвращает количество переданной жидкости.

extractLiquid liquid, maxAmount, inputStorage, outputStorage, inputSide

Похож на предыдущий, но позволяет извлечь жидкость из TileEntity
liquid - название жидкости. Если не указано, то извлечёт любую жидкость из outputStorage, если она может быть принята в inputStorage.
inputStorage - интерфейс хранилища или TileEntity, принимающий жидкость
outputStorage - интерфейс хранилища, из которого будет извлечена жидкость
inputSide - сторона блока, которая будет принимать жидкость.

Возвращает количество переданной жидкости.

checkHoppers tileEntity Позволяет TileEntity взаимодействовать с воронками. Для этого должен вызываться в функции тика TileEntity .
addItemToSlot item, slot, maxCount

Добавляет стак предметов в слот. Изменяет только объект слота, для корректной работы требуется установить слот через container.setSlot.
maxCount - максимальное количество, которое будет передано в слот (по умолчанию 64).

Возвращает количество переданных предметов.