Admin (обсуждение | вклад) |
|||
(не показано 12 промежуточных версий 3 участников) | |||
Строка 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"> |
Данная библиотека для 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"> | |
== Загрузка == | == Загрузка == | ||
Строка 8: | Строка 8: | ||
| Версия | | Версия | ||
| Ссылка | | Ссылка | ||
− | | Список изменений | + | | style="width: 280px;" | Список изменений |
− | | Дата релиза | + | | style="width: 350px;" | Дата релиза |
+ | |- | ||
+ | | '''6''' | ||
+ | | [https://yadi.sk/d/TITakdpdsjIGug Скачать] | ||
+ | | style="width: 280px;" | - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров. | ||
+ | | style="width: 350px;" | 18.04.2020 | ||
+ | |- | ||
+ | | '''5''' | ||
+ | | [https://yadi.sk/d/Om5TRGdlhylfQA Скачать] | ||
+ | | style="width: 280px;" | - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid | ||
+ | | style="width: 350px;" | 09.03.2020 | ||
+ | |- | ||
+ | | '''4''' | ||
+ | | [https://yadi.sk/d/1gBu4a-fEme-jA Скачать] | ||
+ | | style="width: 280px;" | | ||
+ | - Улучшена работа с жидкостями<br/> - В интерфейс добавлено поле liquidStorage | ||
+ | |||
+ | | style="width: 350px;" | 05.03.2020 | ||
|- | |- | ||
| '''3''' | | '''3''' | ||
| [https://drive.google.com/file/d/1Hsp2nLIER0wF-ZzDvdsy1btxWFhnebv1/view?usp=sharing Скачать] | | [https://drive.google.com/file/d/1Hsp2nLIER0wF-ZzDvdsy1btxWFhnebv1/view?usp=sharing Скачать] | ||
− | | релиз библиотеки | + | | style="width: 280px;" | релиз библиотеки |
− | | 02.02.2020 | + | | style="width: 350px;" | 02.02.2020 |
|} | |} | ||
− | + | </div> </div> </div> </div> </div> </div> | |
== Импорт == | == Импорт == | ||
Строка 23: | Строка 40: | ||
Для импорта библиотеки в мод в заголовочном файле (или если он остутвует в первом файле кода) следует добавить строку: | Для импорта библиотеки в мод в заголовочном файле (или если он остутвует в первом файле кода) следует добавить строку: | ||
<pre>IMPORT("StorageInterface");</pre> | <pre>IMPORT("StorageInterface");</pre> | ||
− | + | <div class="mw-parser-output"><div class="mw-parser-output"> | |
− | <div class="mw-parser-output"> | ||
== Интерфейсы хранилищ блоков == | == Интерфейсы хранилищ блоков == | ||
На данный момент интерфейсы привязываются только к tile entity, но в будущем по умолчанию интерфейсы будут прописаны у контейнеров из Майнкрафта, прежде всего печки. | На данный момент интерфейсы привязываются только к tile entity, но в будущем по умолчанию интерфейсы будут прописаны у контейнеров из Майнкрафта, прежде всего печки. | ||
− | Интерфейс для хранилища добавляется с помощью метода ''StorageInterface.createInterface(id блока, объект интерфейса)'' | + | Интерфейс для хранилища добавляется с помощью метода ''StorageInterface.createInterface(id блока, объект интерфейса).''<br/> Регистрация слотов в интерфейсе выглядит так: |
− | < | + | <syntaxhighlight lang="JavaScript">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": { | ||
+ | ... | ||
+ | }, | ||
+ | ... | ||
+ | } | ||
+ | });</syntaxhighlight> | ||
− | + | <br/> Так же интерфейс хранилища обладает следующими функциями, которые могут быть перезаписаны в объекте интерфейса: | |
− | |||
+ | {| border="1" cellpadding="1" cellspacing="1" | ||
+ | |- | ||
+ | | Название | ||
+ | | Аргументы | ||
+ | | Описание | ||
+ | |- | ||
+ | | '''isValidInput''' | ||
+ | | item, side, tileEntity | ||
+ | | Аналогична функции isValid слота, но действует на все слоты контейнера. По умолчанию возвращает true. | ||
+ | |- | ||
+ | | '''addItem''' | ||
+ | | item, side, maxCount | ||
+ | | Функция добавления предмета, может быть перезаписана. Возвращает количество добавленных предметов. | ||
+ | |- | ||
+ | | '''getOutputSlots''' | ||
+ | | side | ||
+ | | Возвращяет слоты выхода, с которыми возможна работа с определённой стороны. | ||
+ | |- | ||
+ | | '''canReceiveLiquid''' | ||
+ | | liquid, side | ||
+ | | Может ли tile entity принять жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает false. | ||
+ | |- | ||
+ | | '''canTransportLiquid''' | ||
+ | | liquid, side | ||
+ | | Может ли tile entity отдать жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает false. | ||
+ | |- | ||
+ | | '''addLiquid''' | ||
+ | | liquid, amount | ||
+ | | Функция добавление жидкости. По умолчанию работает с liquidStorage. | ||
+ | |- | ||
+ | | '''getLiquid''' | ||
+ | | liquid, amount | ||
+ | | Функция извлечения жидкости. По умолчанию работает с liquidStorage. В функциях StorageInterface для передачи жидкости сначала извлекается весь возможный объём жидкости, а потом функция вызывается повторно с отрицательным ''amount ''для возвращения жидкости, которую не удалось передать. | ||
+ | |- | ||
+ | | '''getLiquidStored''' | ||
+ | | storage, side | ||
+ | | Функция получения жидкости, хранящейся в tile entity. В функциях StorageInterface аргумент ''storage ''равен ''"input" ''если проверяется жидкость для добавления, и''"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: { | ||
+ | "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} | ||
+ | } | ||
+ | });</syntaxhighlight> | ||
+ | </div> <div class="mw-parser-output"><div class="mw-parser-output"> </div> </div> </div> | ||
<div class="mw-parser-output"> | <div class="mw-parser-output"> | ||
== Методы для передачи предметов и жидкостей == | == Методы для передачи предметов и жидкостей == | ||
Строка 64: | Строка 151: | ||
| inputTile, container, side, maxCount, oneStack | | inputTile, container, side, maxCount, oneStack | ||
| | | | ||
− | Позволяет извлечь предмет из контейнера и добавить его в tile entity.<br/> '''inputTile '''- tile entity, в который будут добавлены предметы<br/> '''container '''- контейнер, из которого будут извлечены предметы<br/> '''maxCount '''- сколько предметов | + | Позволяет извлечь предмет из контейнера и добавить его в tile entity.<br/> '''inputTile '''- tile entity, в который будут добавлены предметы<br/> '''container '''- контейнер, из которого будут извлечены предметы<br/> '''maxCount '''- сколько предметов может быть извлечено (по умолчанию не ограничено)<br/> '''oneStack '''- если true, то будет извлечён только один стак предметов. |
|- | |- | ||
Строка 87: | Строка 174: | ||
| Внутренний метод библиотеки для добавления предмета в слот. При использовании на нативном контейнере нужно также установить слот, используя ''container.setSlot.'' | | Внутренний метод библиотеки для добавления предмета в слот. При использовании на нативном контейнере нужно также установить слот, используя ''container.setSlot.'' | ||
|} | |} | ||
− | <div class="mw-parser-output" | + | <div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"> </div> </div> </div> </div> </div></div> |
== Обратная совместимость == | == Обратная совместимость == | ||
Данная библиотека совместима с модами, использующими старый стандарт описания слотов tile entity через функцию ''getTransportSlots'', а так же добавляет эту функцию и функцию ''addTransportedItem ''для tile entity при создании его интерфейса. | Данная библиотека совместима с модами, использующими старый стандарт описания слотов tile entity через функцию ''getTransportSlots'', а так же добавляет эту функцию и функцию ''addTransportedItem ''для tile entity при создании его интерфейса. | ||
− | </div> | + | </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> |
Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей.
Версия | Ссылка | Список изменений | Дата релиза |
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");
На данный момент интерфейсы привязываются только к tile entity, но в будущем по умолчанию интерфейсы будут прописаны у контейнеров из Майнкрафта, прежде всего печки.
Интерфейс для хранилища добавляется с помощью метода 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": {
...
},
...
}
});
Так же интерфейс хранилища обладает следующими функциями, которые могут быть перезаписаны в объекте интерфейса:
Название | Аргументы | Описание |
isValidInput | item, side, tileEntity | Аналогична функции isValid слота, но действует на все слоты контейнера. По умолчанию возвращает true. |
addItem | item, side, maxCount | Функция добавления предмета, может быть перезаписана. Возвращает количество добавленных предметов. |
getOutputSlots | side | Возвращяет слоты выхода, с которыми возможна работа с определённой стороны. |
canReceiveLiquid | liquid, side | Может ли tile entity принять жидкость с именем liquid со стороны side. По умолчанию возвращает false. |
canTransportLiquid | liquid, side | Может ли tile entity отдать жидкость с именем liquid со стороны side. По умолчанию возвращает false. |
addLiquid | liquid, amount | Функция добавление жидкости. По умолчанию работает с liquidStorage. |
getLiquid | liquid, amount | Функция извлечения жидкости. По умолчанию работает с liquidStorage. В функциях StorageInterface для передачи жидкости сначала извлекается весь возможный объём жидкости, а потом функция вызывается повторно с отрицательным amount для возвращения жидкости, которую не удалось передать. |
getLiquidStored | storage, side | Функция получения жидкости, хранящейся в tile entity. В функциях StorageInterface аргумент storage равен "input" если проверяется жидкость для добавления, и"output" если для извлечения. |
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}
}
});
Название | Аргументы | Описание |
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. |
transportLiquid | liquid, maxAmount, outputTile, inputTile, outputSide |
Передаёт жидкость из одного tile entity в другой. |
extractLiquid | liquid, maxAmount, inputTile, outputTile, inputSide |
Похож на предыдущий, но позволяет извлечь жидкость из tile entity |
checkHoppers | tileEntity | Позволяет tile entity взаимодействовать с воронками. Для этого должна выполняться в функции тика tile entity. Требует интерфейса хранилища у tile entity для работы. |
addItemToSlot | item, slot, count | Внутренний метод библиотеки для добавления предмета в слот. При использовании на нативном контейнере нужно также установить слот, используя container.setSlot. |
Данная библиотека совместима с модами, использующими старый стандарт описания слотов tile entity через функцию getTransportSlots, а так же добавляет эту функцию и функцию addTransportedItem для tile entity при создании его интерфейса.