Строка 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"> |
Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей. | Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей. | ||
Строка 28: | Строка 28: | ||
На данный момент интерфейсы привязываются только к tile entity, но в будущем по умолчанию интерфейсы будут прописаны у контейнеров из Майнкрафта, прежде всего печки. | На данный момент интерфейсы привязываются только к tile entity, но в будущем по умолчанию интерфейсы будут прописаны у контейнеров из Майнкрафта, прежде всего печки. | ||
− | + | Интерфейс для хранилища добавляется с помощью метода ''StorageInterface.createInterface(id блока, объект интерфейса)'' и в общем виде выглядит так: | |
− | <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">StorageInterface.createInterface(id блока, {<br/> slots: {<br/> "slot1": {<br/> input: bool, // может ли слот принимать предметы<br/> output: bool, // может ли слот отдавать предметы<br/> isValid: function(item, side, tileEntity){ // может ли слот принять предмет item со стороны side<br/> return bool;<br/> },<br/> canOutput: function(item, side, tileEntity){ // можно ли извлечь предмет из слота (item - предмет в слоте)<br/> return bool;<br/> }<br/> },<br/> "slot2": {<br/> ...<br/> },<br/> ...<br/> },<br/> isValidInput: function(item, side, tileEntity){ // аналогична функции isValid слота, но действует на все слоты контейнера<br/> return true;<br/> },<br/> addItem: function(item, side, maxCount){ return int; }, // | + | <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">StorageInterface.createInterface(id блока, {<br/> slots: {<br/> "slot1": {<br/> input: bool, // может ли слот принимать предметы<br/> output: bool, // может ли слот отдавать предметы<br/> isValid: function(item, side, tileEntity){ // может ли слот принять предмет item со стороны side<br/> return bool;<br/> },<br/> canOutput: function(item, side, tileEntity){ // можно ли извлечь предмет из слота (item - предмет в слоте)<br/> return bool;<br/> }<br/> },<br/> "slot2": {<br/> ...<br/> },<br/> ...<br/> },<br/> isValidInput: function(item, side, tileEntity){ // аналогична функции isValid слота, но действует на все слоты контейнера<br/> return true;<br/> },<br/> addItem: function(item, side, maxCount){ return int; }, // функция добавления предмета<br/> getItems: function(side){ return []; }, // кастомная функция получения предметов для извлечения<br/> <br/> // методы работы с хранилищем жидкости<br/> canReceiveLiquid: function(liquid, side){ return false; }, // может ли tile entity принять жидкость (liquid - название жидкости)<br/> canTransportLiquid: function(liquid, side){ return false; }, // может ли tile entity отдать жидкость (liquid - название жидкости)<br/> addLiquid: function(luquid, amount){ // функция добавление жидкости<br/> return this.tileEntity.liquidStorage.addLiquid(luquid, amount);<br/> }<br/> getLiquid: function(luquid, amount){ // функция извлечения жидкости<br/> return this.tileEntity.liquidStorage.getLiquid(luquid, amount);<br/> }<br/> });</div> |
− | + | Здесь указаны все функции объекта интерфейса, которые можно задать этим методом. При их отсутствии добавляются функции по умолчанию, и для некоторых функций приведёт их код. | |
Добавление интерфейса для tile entity на примере железной печки из мода IndustrialCraft 2 | Добавление интерфейса для tile entity на примере железной печки из мода IndustrialCraft 2 | ||
<div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">StorageInterface.createInterface(BlockID.ironFurnace, {<br/> slots: {<br/> "slotSource": {input: true,<br/> isValid: function(item, side){<br/> return side != 0 && Recipes.getFurnaceRecipeResult(item.id, "iron");<br/> }<br/> },<br/> "slotFuel": {input: true, <br/> isValid: function(item, side){<br/> return side != 1 && Recipes.getFuelBurnDuration(item.id, item.data) > 0;<br/> }<br/> },<br/> "slotResult": {output: true}<br/> }<br/> });</div> | <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">StorageInterface.createInterface(BlockID.ironFurnace, {<br/> slots: {<br/> "slotSource": {input: true,<br/> isValid: function(item, side){<br/> return side != 0 && Recipes.getFurnaceRecipeResult(item.id, "iron");<br/> }<br/> },<br/> "slotFuel": {input: true, <br/> isValid: function(item, side){<br/> return side != 1 && Recipes.getFuelBurnDuration(item.id, item.data) > 0;<br/> }<br/> },<br/> "slotResult": {output: true}<br/> }<br/> });</div> | ||
+ | == Методы для передачи предметов и жидкостей == | ||
+ | |||
+ | getNearestContainers | ||
+ | |||
== Обратная совместимость == | == Обратная совместимость == | ||
Данная библиотека совместима с модами, используюшими старый стандарт описания слотов tile entity через функцию getTransportSlots и добавляет такую функцию для tile entity при создании его интерфейса. | Данная библиотека совместима с модами, используюшими старый стандарт описания слотов tile entity через функцию getTransportSlots и добавляет такую функцию для tile entity при создании его интерфейса. | ||
− | </div> </div> | + | </div> </div> </div> |
Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей.
Версия | Ссылка | Список изменений | Дата релиза |
3 | Скачать | релиз библиотеки | 02.02.2020 |
Для добавления библиотеки в мод ее файл (StorageInterface.js) нужно добавить в директорию lib/ в директории мода (если таковой нету, то ее нужно создать).
Для импорта библиотеки в мод в заголовочном файле (или если он остутвует в первом файле кода) следует добавить строку:
IMPORT("StorageInterface");
На данный момент интерфейсы привязываются только к tile entity, но в будущем по умолчанию интерфейсы будут прописаны у контейнеров из Майнкрафта, прежде всего печки.
Интерфейс для хранилища добавляется с помощью метода StorageInterface.createInterface(id блока, объект интерфейса) и в общем виде выглядит так:
Здесь указаны все функции объекта интерфейса, которые можно задать этим методом. При их отсутствии добавляются функции по умолчанию, и для некоторых функций приведёт их код.
Добавление интерфейса для tile entity на примере железной печки из мода IndustrialCraft 2
getNearestContainers
Данная библиотека совместима с модами, используюшими старый стандарт описания слотов tile entity через функцию getTransportSlots и добавляет такую функцию для tile entity при создании его интерфейса.