Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
− | <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"> | + | <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 позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей. | ||
+ | <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"> | ||
== Загрузка == | == Загрузка == | ||
Строка 5: | Строка 9: | ||
|- | |- | ||
| Версия | | Версия | ||
− | + | | Ссылка | |
− | | style="width: | + | | style="width: 280px;" | Список изменений |
− | | style="width: | + | | style="width: 350px;" | Дата релиза |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| '''6''' | | '''6''' | ||
− | + | | [https://yadi.sk/d/TITakdpdsjIGug Скачать] | |
− | | style="width: | + | | style="width: 280px;" | - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров. |
− | | style="width: | + | | style="width: 350px;" | 18.04.2020 |
|- | |- | ||
| '''5''' | | '''5''' | ||
− | + | | [https://yadi.sk/d/Om5TRGdlhylfQA Скачать] | |
− | | style="width: | + | | style="width: 280px;" | - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid |
− | | style="width: | + | | style="width: 350px;" | 09.03.2020 |
|- | |- | ||
| '''4''' | | '''4''' | ||
− | + | | [https://yadi.sk/d/1gBu4a-fEme-jA Скачать] | |
− | | style="width: | + | | style="width: 280px;" | |
− | + | - Улучшена работа с жидкостями<br/> - В интерфейс добавлено поле liquidStorage | |
− | |||
− | | style="width: | + | | style="width: 350px;" | 05.03.2020 |
|- | |- | ||
| '''3''' | | '''3''' | ||
− | + | | [https://drive.google.com/file/d/1Hsp2nLIER0wF-ZzDvdsy1btxWFhnebv1/view?usp=sharing Скачать] | |
− | | style="width: | + | | style="width: 280px;" | релиз библиотеки |
− | | style="width: | + | | style="width: 350px;" | 02.02.2020 |
|} | |} | ||
− | </div> | + | </div> </div> </div> </div> |
+ | </div> | ||
+ | </div> | ||
+ | |||
== Импорт == | == Импорт == | ||
− | Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/ | + | Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IndustrialCraft_2/blob/master/IndustrialCraft²/lib/StorageInterface.js StorageInterface.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать). |
− | |||
− | |||
− | |||
− | |||
+ | Для импорта библиотеки в мод в заголовочном файле (или если он остутвует в первом файле кода) следует добавить строку: | ||
+ | <pre>IMPORT("StorageInterface");</pre> | ||
+ | <div class="mw-parser-output"><div class="mw-parser-output"> | ||
== Интерфейсы хранилищ блоков == | == Интерфейсы хранилищ блоков == | ||
− | + | На данный момент интерфейсы привязываются только к tile entity, но в будущем по умолчанию интерфейсы будут прописаны у контейнеров из Майнкрафта, прежде всего печки. | |
− | |||
− | |||
− | |||
− | |||
− | + | Интерфейс для хранилища добавляется с помощью метода ''StorageInterface.createInterface(id блока, объект интерфейса).''<br/> Регистрация слотов в интерфейсе выглядит так: | |
<syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, { | <syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, { | ||
slots: { | slots: { | ||
"slot1": { | "slot1": { | ||
− | input: | + | input: true/false, // может ли слот принимать предметы |
− | output: | + | output: true/false, // может ли слот отдавать предметы |
− | + | isValid: function(item, side, tileEntity){ // может ли слот принять предмет item со стороны side | |
− | + | return true/false; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | return | ||
}, | }, | ||
− | // | + | canOutput: function(item, side, tileEntity){ // можно ли извлечь предмет из слота (item - предмет в слоте) |
− | + | return true/false; | |
− | return | ||
} | } | ||
}, | }, | ||
− | + | "slot2": { | |
− | |||
... | ... | ||
}, | }, | ||
... | ... | ||
− | } | + | } |
− | |||
− | |||
});</syntaxhighlight> | });</syntaxhighlight> | ||
− | |||
− | |||
− | + | <br/> Так же интерфейс хранилища обладает следующими функциями, которые могут быть перезаписаны в объекте интерфейса: | |
{| border="1" cellpadding="1" cellspacing="1" | {| border="1" cellpadding="1" cellspacing="1" | ||
Строка 136: | Строка 77: | ||
| Аргументы | | Аргументы | ||
| Описание | | Описание | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| '''isValidInput''' | | '''isValidInput''' | ||
Строка 151: | Строка 84: | ||
| '''addItem''' | | '''addItem''' | ||
| item, side, maxCount | | item, side, maxCount | ||
− | | Функция добавления предмета. Возвращает количество добавленных предметов | + | | Функция добавления предмета, может быть перезаписана. Возвращает количество добавленных предметов. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| '''getOutputSlots''' | | '''getOutputSlots''' | ||
| side | | side | ||
− | | | + | | Возвращяет слоты выхода, с которыми возможна работа с определённой стороны. |
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| '''canReceiveLiquid''' | | '''canReceiveLiquid''' | ||
| liquid, side | | liquid, side | ||
− | | Может ли | + | | Может ли tile entity принять жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает false. |
|- | |- | ||
| '''canTransportLiquid''' | | '''canTransportLiquid''' | ||
| liquid, side | | liquid, side | ||
− | | Может ли | + | | Может ли tile entity отдать жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает false. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | ''' | + | | '''addLiquid''' |
− | | | + | | liquid, amount |
− | | Функция | + | | Функция добавление жидкости. По умолчанию работает с liquidStorage. |
|- | |- | ||
− | | ''' | + | | '''getLiquid''' |
− | | | + | | liquid, amount |
− | | | + | | Функция извлечения жидкости. По умолчанию работает с liquidStorage. В функциях StorageInterface для передачи жидкости сначала извлекается весь возможный объём жидкости, а потом функция вызывается повторно с отрицательным ''amount ''для возвращения жидкости, которую не удалось передать. |
− | |||
− | |||
|- | |- | ||
− | | ''' | + | | '''getLiquidStored''' |
− | | side | + | | storage, side |
− | | | + | | Функция получения жидкости, хранящейся в tile entity. В функциях StorageInterface аргумент ''storage ''равен ''"input" ''если проверяется жидкость для добавления, и''"output"'' если для извлечения. |
− | |||
− | |||
|} | |} | ||
− | <div class="mw-parser-output">< | + | <div class="mw-parser-output"> </div> <div class="mw-parser-output">Интерфейс хранилища сохраняется в поле ''interface ''объекта 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"> </div> <div class="mw-parser-output">Добавление интерфейса для tile entity на примере железной печки из мода IndustrialCraft 2</div> <syntaxhighlight lang="JavaScript">StorageInterface.createInterface(BlockID.ironFurnace, { |
slots: { | slots: { | ||
"slotSource": { | "slotSource": { | ||
input: true, | input: true, | ||
− | |||
isValid: function(item, side){ | isValid: function(item, side){ | ||
− | return Recipes.getFurnaceRecipeResult(item.id, "iron"); | + | return side != 0 && Recipes.getFurnaceRecipeResult(item.id, "iron"); |
} | } | ||
}, | }, | ||
"slotFuel": { | "slotFuel": { | ||
− | input: true | + | input: true, |
− | |||
isValid: function(item, side){ | isValid: function(item, side){ | ||
− | return Recipes.getFuelBurnDuration(item.id, item.data) > 0; | + | return side != 1 && Recipes.getFuelBurnDuration(item.id, item.data) > 0; |
} | } | ||
}, | }, | ||
Строка 230: | Строка 127: | ||
} | } | ||
});</syntaxhighlight> | });</syntaxhighlight> | ||
− | <div | + | </div> <div class="mw-parser-output"><div class="mw-parser-output"> </div> </div> </div> |
− | + | == Методы для передачи предметов и жидкостей == | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | == | ||
{| border="1" cellpadding="1" cellspacing="1" | {| border="1" cellpadding="1" cellspacing="1" | ||
|- | |- | ||
− | + | | Название | |
− | + | | Аргументы | |
− | + | | Описание | |
|- | |- | ||
− | + | | '''getNearestContainers''' | |
− | + | | coords, side, sideExcluded | |
− | + | | Возвращает соседние с блоком на координатах ''coords ''контейнеры в виде массива. Если указан параметр ''side'', то вернёт контейнер с этой стороны. Если ''sideExcluded ''равен ''true'', то наоборот, все контейнеры кроме контейнера с указанной стороны. | |
|- | |- | ||
− | + | | '''getNearestLiquidStorages''' | |
− | + | | coords, side, sideExcluded | |
− | | | + | | Аналогична предыдущей, но возвращает все соседние tile entity, имеющие хранилища жидкостей. |
|- | |- | ||
− | + | | '''putItems''' | |
− | + | | items, containers | |
− | + | | Добавляет предметы из массива items в контейнеры из массива containers. Удобно использовать в связке с методом ''getNearestContainers'''''.''' | |
|- | |- | ||
− | + | | '''putItemToContainer''' | |
− | + | | item, container, side, maxCount | |
− | | | + | | Метод более низкого уровня, на котором основана работа предыдущего метода. Добавляет стак предметов в контейнер, но позволяет также указать максимальное количество предметов, которое может быть передано за раз. |
− | Добавляет стак предметов в контейнер | ||
− | |||
− | |||
− | |||
|- | |- | ||
− | + | | '''extractItemsFromContainer''' | |
− | | | + | | inputTile, container, side, maxCount, oneStack |
− | + | | | |
− | Позволяет извлечь предмет из контейнера и добавить его в tile entity | + | Позволяет извлечь предмет из контейнера и добавить его в tile entity.<br/> '''inputTile '''- tile entity, в который будут добавлены предметы<br/> '''container '''- контейнер, из которого будут извлечены предметы<br/> '''maxCount '''- сколько предметов извлечь [опционально]<br/> '''oneStack '''- если true, то будет извлечён только один стак предметов. |
− | |||
− | |||
|- | |- | ||
− | + | | '''transportLiquid''' | |
− | + | | liquid, maxAmount, outputTile, inputTile, outputSide | |
− | + | | | |
− | + | Передаёт жидкость из одного tile entity в другой.<br/> '''liquid '''- название жидкости<br/> '''maxAmount '''- максимальное количество, которое будет передано<br/> '''outputTile '''- tile entity, из которого будет передана жидкость<br/> '''inputTile '''- tile entity, в который будет передана жидкость<br/> '''outputSide '''- сторона, через которую передаётся жидкость | |
− | |||
− | |||
− | |||
− | Передаёт жидкость из одного | ||
− | |||
− | |||
|- | |- | ||
− | + | | '''extractLiquid''' | |
− | + | | liquid, maxAmount, inputTile, outputTile, inputSide | |
− | + | | | |
− | Похож на предыдущий, но позволяет извлечь жидкость из | + | Похож на предыдущий, но позволяет извлечь жидкость из tile entity<br/> '''liquid '''- в отличие от предыдущего метода жидкость может быть не указана, тогда извлечёт жидкость, которая хранится в ''outputTile''.<br/> '''inputSide '''- сторона, в которую будет поступать жидкость |
− | |||
− | |||
|- | |- | ||
− | + | | '''checkHoppers''' | |
− | + | | tileEntity | |
− | + | | Позволяет tile entity взаимодействовать с воронками. Для этого должна выполняться в функции тика tile entity. Требует интерфейса хранилища у tile entity для работы. | |
|- | |- | ||
− | + | | '''addItemToSlot''' | |
− | + | | item, slot, count | |
− | | | + | | Внутренний метод библиотеки для добавления предмета в слот. При использовании на нативном контейнере нужно также установить слот, используя ''container.setSlot.'' |
− | + | |} | |
+ | <div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"> </div> </div> </div> </div> </div> | ||
+ | == Обратная совместимость == | ||
− | + | Данная библиотека совместима с модами, использующими старый стандарт описания слотов tile entity через функцию ''getTransportSlots'', а так же добавляет эту функцию и функцию ''addTransportedItem ''для tile entity при создании его интерфейса. | |
− | + | </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div></div></div> | |
− | |||
− | </div> </div> </div> </div> |