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

(добавлена 12 версия)
 
(не показано 6 промежуточных версий этого же участника)
Строка 1: Строка 1:
Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей.
+
<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">
<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">
 
 
== Загрузка ==
 
== Загрузка ==
  
Строка 9: Строка 8:
 
| style="width: 393px;" | Список изменений
 
| style="width: 393px;" | Список изменений
 
| style="width: 250px;" | Дата релиза
 
| 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'''
 
| '''9'''
Строка 58: Строка 80:
 
| style="width: 250px;" | 02.02.2020
 
| style="width: 250px;" | 02.02.2020
 
|}
 
|}
</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 class="mw-parser-output"><div class="mw-parser-output">
+
</div> <div class="mw-parser-output">&nbsp;</div> </div> </div> </div> </div>  
 
== Импорт ==
 
== Импорт ==
  
Строка 64: Строка 86:
  
 
Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:
 
Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:
<pre>IMPORT("StorageInterface");</pre>
+
<pre>IMPORT("StorageInterface");
<div class="mw-parser-output"><div class="mw-parser-output">&nbsp;</div> </div> </div> </div>
+
</pre>
<div class="mw-parser-output">
+
 
 
== Интерфейсы хранилищ блоков ==
 
== Интерфейсы хранилищ блоков ==
  
Строка 95: Строка 117:
 
             }
 
             }
 
         },
 
         },
         // Означает все слоты с индексами от 2 до 10 (slot2, slot3, ..., slot10).
+
         // Все слоты с именем slot и индексами от 2 до 10 (slot2, ..., slot10).
 
         "slot^2-10": {
 
         "slot^2-10": {
 
             ...
 
             ...
Строка 101: Строка 123:
 
         ...
 
         ...
 
     },
 
     },
 +
   liquidUnitRatio: 1, // количество вёдер жидкости в базовом юните жидкости
 
   // функции интерфейса
 
   // функции интерфейса
 
});</syntaxhighlight>
 
});</syntaxhighlight>
Строка 164: Строка 187:
 
| '''canTransportLiquid'''
 
| '''canTransportLiquid'''
 
| liquid, side
 
| liquid, side
| Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''.&nbsp;По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.
+
| Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''.&nbsp;По умолчанию возвращает true.
 
|-
 
|-
| '''addLiquid'''
+
| '''receiveLiquid'''
| liquid, amount
+
| liquidStorage, liquid, amount
| Функция добавление жидкости. По умолчанию работает с liquidStorage.
+
|  
 +
Функция добавление жидкости в хранилище.<br/> '''liquidStorage'''&nbsp;- хранилище, принимающее жидкость<br/> '''liquid '''- название жидкости<br/> '''amount '''- количество жидкости
 +
 
 
|-
 
|-
| '''getLiquid'''
+
| '''extractLiquid'''
| liquid, amount
+
| liquidStorage, liquid, amount
| Функция извлечения жидкости.&nbsp;По умолчанию работает с liquidStorage.
+
| Функция извлечения жидкости из хранилища.
 
|-
 
|-
| '''getLiquidStored'''
+
| '''getInputTank'''
| storageName
+
| side
 
|  
 
|  
Функция получения жидкости, хранящейся в tile entity. Позволяет возвращать разные жидкости для входа и выхода.<br/> '''storageName''' - "input" для получения жидкости на вход и "output" для жидкости на выход.
+
Возвращает входное&nbsp;хранилище жидкости TileEntity. По умолчанию возвращает&nbsp;liquidStorage.<br/> '''side&nbsp;'''- сторона с которой будет производиться работа
  
 
|-
 
|-
| '''getLiquidStorage'''
+
| '''getOutputTank'''
| storageName
+
| side
 
|  
 
|  
Возвращает хранилище жидкости.&nbsp;По умолчанию возвращает liquidStorage из TileEntity. Позволяет использовать альтернативные&nbsp;хранилища жидкостей.<br/> '''storageName''' - "input" для хранилища, принимающего жидкость, и "output" для отдающего.
+
Возвращает выходное хранилище жидкости TileEntity.&nbsp;По умолчанию возвращает&nbsp;liquidStorage.<br/> '''side&nbsp;'''- сторона с которой будет производиться работа
  
 
|}
 
|}
<div class="mw-parser-output">&nbsp;</div> <div class="mw-parser-output">В экземпляре интерфейса также есть следующие поля:</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, {
+
<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": {
Строка 208: Строка 233:
 
=== Методы для получения&nbsp;интерфесов хранилищ ===
 
=== Методы для получения&nbsp;интерфесов хранилищ ===
  
*'''StorageInterface.newStorage('''''container ''или ''tileEntity''''')''' - возвращает новый интерфейс хранилища для TileEntity или контейнера.  
+
*'''StorageInterface.getInterface('''''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,&nbsp;хранящего жидкости,&nbsp;по&nbsp;координатам.  
 
*'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side.  
 
*'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side.  
*'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side,&nbsp;если там находится TileEntity с хранилищем жидкости.
+
*'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс для соседнего TileEntity, хранящего жидкости,&nbsp;со стороны side
</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>  
 
 
 
== Остальные методы StorageInterface ==
 
== Остальные методы StorageInterface ==
  
Строка 283: Строка 307:
  
 
|}
 
|}
 +
</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).

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