https://wiki.mineprogramming.org/api.php?action=feedcontributions&user=MineExplorer&feedformat=atommineprogramming wiki - Вклад участника [ru]2024-03-28T08:51:13ZВклад участникаMediaWiki 1.30.0https://wiki.mineprogramming.org/index.php?title=InnerCore/Naming_Standart&diff=2616InnerCore/Naming Standart2023-08-23T18:42:27Z<p>MineExplorer: </p>
<hr />
<div><div class="mw-parser-output"><div class="mw-parser-output">Для упрощения интеграции модов&nbsp;членами сообщества [https://www.mineprogramming.org/ #mineprogramming] был разработан единый '''стандарт именования InnerCore'''. Стандарт подразумевает использования одинаковых строковых ID предметов, блоков, инструментов и материалов в разных модификациях. С развитием сообщества планируется расширение данного стандарта для максимального покрытия требований модов.</div> <div class="mw-parser-output">Стандарт разработан на основе мода [https://icmods.mineprogramming.org/mod?id=22 Industrial Craft 2], поскольку данная модификация стала одной из первых и содержит многие предметы и блоки, подлежащие интеграции.</div> <div class="mw-parser-output"><div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
== Строковые ID ==<br />
<br />
=== Общее ===<br />
<br />
Все имена должны начинаться с маленькой буквы, затем каждое новое слово с заглавной буквы без пробелов и/или слэшей. Пример:&nbsp;''plateReinforcedIridium''. Также в большей части случаев порядок слов определяется возрастанием точности описания, например: ''oreCopper ''(руд много, медная одна). </div><br />
<div class="mw-parser-output"><br />
=== Ингредиенты для крафтов ===<br />
<br />
Все ингредиенты для крафтов должны именоваться следующим образом:&nbsp;''plateCopper'' (с маленькой буквы объект, затем с большой буквы материал).<br />
<br />
На данный момент используются следующие ингредиенты (список необходимо дополнять):<br />
<br />
*[https://icmods.mineprogramming.org/mod?id=22 Industrial Craft 2] <br />
**casing <br />
**crushed <br />
**dust <br />
**ingot <br />
**plate <br />
<br />
Используются также следующие ингридиенты, не отвечающие вышеуказанному стандарту, но являющиеся стандартными по&nbsp;историческим&nbsp;и субъективным причинам:<br />
<br />
*[https://icmods.mineprogramming.org/mod?id=22 Industrial Craft 2] <br />
**Chunk (''iridiumChunk'', ''coalChunk'') <br />
**Fibre (''carbonFibre'') <br />
**Mesh (''carbonMesh'') <br />
**Plate (''carbonPlate'') <br />
</div> <br />
=== Руды и блоки ===<br />
<br />
Руды и блоки&nbsp;именуются таким же образом: ''oreCopper'',&nbsp;''blockSilver''.<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Инструменты и броня ===<br />
<br />
Инструменты и броня из различных материалов именуются наоборот:&nbsp;''bronzePickaxe'',&nbsp;''diamondDrill.''<br />
</div> <br />
=== Уровни ===<br />
Уровни предметов, в первую очередь basic и advanced, прописываются последним словом. Пример:&nbsp;''machineBlockAdvanced.''</div> </div><br />
<br />
== Названия текстур ==<br />
<br />
Названия текстур должны соответствовать названию предметов и блоков, но вместо заглавных букв используется нижнее подчеркивание. Несмотря на то, что без индексов текстуры также подгружаются и работают, следует их писать во избежание конфликтов любого рода.&nbsp;Пример: ore_copper_0.jpg.<br />
</div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/StorageInterface&diff=2613InnerCore/Libs/StorageInterface2022-10-03T11:40:09Z<p>MineExplorer: добавлена 12 версия</p>
<hr />
<div><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"><br />
== Загрузка ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Версия<br />
| style="width: 36px;" | Ссылка<br />
| style="width: 393px;" | Список изменений<br />
| style="width: 250px;" | Дата релиза<br />
|-<br />
| '''12'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v12 Скачать]<br />
| style="width: 393px;" | <br />
*getOutputSlots возвращает пустые слоты tile entity <br />
<br />
| style="width: 250px;" | 07.08.2021<br />
|-<br />
| '''11'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v11 Скачать]<br />
| style="width: 393px;" | <br />
*Библиотека поддерживает&nbsp;предметы с отрицательными ид <br />
*В интерфейс хранилища добавлены следующие поля:<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 <br />
<br />
| style="width: 250px;" | 01.04.2021<br />
|-<br />
| '''10'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v10 Скачать]<br />
| style="width: 393px;" | <br />
*Метод newStorage переименован в getInterface <br />
*Исправлен стак предметов при использовании функций валидации и макс. стака в ItemContainer из библиотеки <br />
<br />
| style="width: 250px;" | 09.01.2021<br />
|-<br />
| '''9'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v9 Скачать]<br />
| style="width: 393px;" | <br />
*Новые методы для интерфейсов хранилищ:<br/> - getContainerSlots()<br/> -&nbsp;getInputSlots(side)<br/> -&nbsp;getReceivingItemCount(item, side)<br/> -&nbsp;addItemToSlot(name, item, maxCount)<br/> -&nbsp;clearContainer() <br />
*Исправлен стандартный интерфейс TIleEntity <br />
<br />
| style="width: 250px;" | 14.12.2020<br />
|-<br />
| '''8'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v8 Скачать]<br />
| style="width: 393px;" | <br />
*Поддержка мультиплеера <br />
*Добавлены стандартные интерфейсы для всех видов контейнеров <br />
*Добавлены методы для получение интерфейсов хранилищ <br />
*Добавлены методы для установки валидации предметов и макс стака&nbsp;слотов в ItemContainer <br />
<br />
| style="width: 250px;" | 10.12.2020<br />
|-<br />
| '''7'''<br />
| style="text-align: center; width: 36px;" | -<br />
| style="width: 393px;" | <br />
- В описании слота в интерфейсе хранилища теперь можно указать стороны, через которые с ним можно взаимодействовать<br />
<br />
| style="width: 250px;" | 10.06.2020<br />
|-<br />
| '''6'''<br />
| style="width: 36px;" | [https://yadi.sk/d/TITakdpdsjIGug Скачать]<br />
| style="width: 393px;" | - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров.<br />
| style="width: 250px;" | 18.04.2020<br />
|-<br />
| '''5'''<br />
| style="width: 36px;" | [https://yadi.sk/d/Om5TRGdlhylfQA Скачать]<br />
| style="width: 393px;" | - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid<br />
| style="width: 250px;" | 09.03.2020<br />
|-<br />
| '''4'''<br />
| style="width: 36px;" | [https://yadi.sk/d/1gBu4a-fEme-jA Скачать]<br />
| style="width: 393px;" | <br />
*Улучшена работа с жидкостями <br />
*В интерфейс добавлено поле liquidStorage <br />
<br />
| style="width: 250px;" | 05.03.2020<br />
|-<br />
| '''3'''<br />
| style="width: 36px;" | [https://drive.google.com/file/d/1Hsp2nLIER0wF-ZzDvdsy1btxWFhnebv1/view?usp=sharing Скачать]<br />
| style="width: 393px;" | - Релиз библиотеки<br />
| style="width: 250px;" | 02.02.2020<br />
|}<br />
</div> <div class="mw-parser-output">&nbsp;</div> </div> </div> </div> </div> <br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IC_Libraries/blob/master/library/StorageInterface.js StorageInterface.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).<br />
<br />
Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<pre>IMPORT("StorageInterface");<br />
</pre><br />
<br />
== Интерфейсы хранилищ блоков ==<br />
<br />
Интерфейсы хранилищ объединяют в себе функции для работы с контейнерами и хранилищем жидкости и позволяют описать логику передачи предметов и жидкостей. В библиотеке есть стандартные интерфейсы для ванильных контейнеров и TileEntity, но вы можете зарегистрировать свой собственный для вашего TileEntity.<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Регистрация интерфейса&nbsp;хранилища ===<br />
<br />
''StorageInterface.createInterface(id блока, прототип интерфейса).''<br />
<br />
Все параметры слотов и функции прототипа интерфейса опциональны.<br/> Прототип интерфейса выглядит так:<br />
<syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, {<br />
slots: {<br />
"slot1": {<br />
input: boolean, // может ли слот принимать предметы<br />
output: boolean, // может ли слот отдавать предметы<br />
// Сторона блока, через которую доступен слот.<br />
// Значение - число или одна из настроек: "horizontal", "verctical", "down", "up".<br />
side: int | string,<br />
// Максимальное количество предметов в слоте<br />
maxStack: int,<br />
// Может ли слот принять предмет item со стороны side<br />
isValid: function(item, side, tileEntity) {<br />
return boolean;<br />
},<br />
// Можно ли извлечь предмет из слота (item - предмет в слоте)<br />
canOutput: function(item, side, tileEntity) {<br />
return boolean;<br />
}<br />
},<br />
// Все слоты с именем slot и индексами от 2 до 10 (slot2, ..., slot10).<br />
"slot^2-10": {<br />
...<br />
},<br />
...<br />
},<br />
liquidUnitRatio: 1, // количество вёдер жидкости в базовом юните жидкости<br />
// функции интерфейса<br />
});</syntaxhighlight><br />
</div> </div> <br />
=== <br/> Функции интерфейса хранилища ===<br />
<br />
Интерфейс хранилища обладает следующими функциями. Вы можете заменить их на свои в прототипе интерфейса при регистрации.<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Название<br />
| Аргументы<br />
| Описание<br />
|-<br />
| '''getSlot'''<br />
| name<br />
| Возвращает слот контейнера.<br />
|-<br />
| '''setSlot'''<br />
| name, id, count, data, extra<br />
| Устанавливает предмет в слот контейнера.<br />
|-<br />
| '''isValidInput'''<br />
| item, side, tileEntity<br />
| Аналогична функции isValid слота, но действует на все слоты контейнера. По умолчанию возвращает true.<br />
|-<br />
| '''addItem'''<br />
| item, side, maxCount<br />
| Функция добавления предмета. Возвращает количество добавленных предметов.<br />
|-<br />
| '''addItemToSlot'''<br />
| name, item, maxCount<br />
| Добавляет предмет в слот контейнера, maxCount - максимальное количество предмета, которое будет добавлено.<br />
|-<br />
| <br />
'''getReceivingItemCount'''<br />
<br />
| item, side<br />
| Возвращает сколько предметов из стака контейнер может принять.<br />
|-<br />
| <br />
'''getContainerSlots'''<br />
<br />
| -<br />
| Возвращает все слоты контейнера<br />
|-<br />
| '''getInputSlots'''<br />
| side<br />
| Возвращяет названия слотов входа,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''getOutputSlots'''<br />
| side<br />
| Возвращает названия слотов выхода,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''clearContainer'''<br />
| -<br />
| Очищает содержимое контейнера<br />
|-<br />
| '''canReceiveLiquid'''<br />
| liquid, side<br />
| Может ли&nbsp;TileEntity принять жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''canTransportLiquid'''<br />
| liquid, side<br />
| Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''.&nbsp;По умолчанию возвращает true.<br />
|-<br />
| '''receiveLiquid'''<br />
| liquidStorage, liquid, amount<br />
| <br />
Функция добавление жидкости в хранилище.<br/> '''liquidStorage'''&nbsp;- хранилище, принимающее жидкость<br/> '''liquid '''- название жидкости<br/> '''amount '''- количество жидкости<br />
<br />
|-<br />
| '''extractLiquid'''<br />
| liquidStorage, liquid, amount<br />
| Функция извлечения жидкости из хранилища.<br />
|-<br />
| '''getInputTank'''<br />
| side<br />
| <br />
Возвращает входное&nbsp;хранилище жидкости TileEntity. По умолчанию возвращает&nbsp;liquidStorage.<br/> '''side&nbsp;'''- сторона с которой будет производиться работа<br />
<br />
|-<br />
| '''getOutputTank'''<br />
| side<br />
| <br />
Возвращает выходное хранилище жидкости TileEntity.&nbsp;По умолчанию возвращает&nbsp;liquidStorage.<br/> '''side&nbsp;'''- сторона с которой будет производиться работа<br />
<br />
|}<br />
<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, {<br />
slots: {<br />
"slotSource": {<br />
input: true,<br />
side: "up",<br />
isValid: function(item, side){<br />
return Recipes.getFurnaceRecipeResult(item.id, "iron");<br />
}<br />
},<br />
"slotFuel": {<br />
input: true,<br />
side: "horizontal",<br />
isValid: function(item, side){<br />
return Recipes.getFuelBurnDuration(item.id, item.data) > 0;<br />
}<br />
},<br />
"slotResult": {output: true}<br />
}<br />
});</syntaxhighlight><br />
<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"><br />
=== Методы для получения&nbsp;интерфесов хранилищ ===<br />
<br />
*'''StorageInterface.getInterface('''''container ''или ''tileEntity''''')''' - возвращает интерфейс хранилища для TileEntity или контейнера. <br />
*'''StorageInterface.getStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища для контейнера на координатах <br />
*'''StorageInterface.getLiquidStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс для TileEntity,&nbsp;хранящего жидкости,&nbsp;по&nbsp;координатам. <br />
*'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side. <br />
*'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс для соседнего TileEntity, хранящего жидкости,&nbsp;со стороны side <br />
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <br />
== Остальные методы StorageInterface ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| style="width: 178px;" | Название<br />
| style="width: 114px;" | Аргументы<br />
| style="width: 458px;" | Описание<br />
|-<br />
| style="width: 178px;" | '''getNearestContainers'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Возвращает соседние контейнеры относительно блока на координатах ''coords ''в виде объекта, где ключами являются стороны блока.<br />
|-<br />
| style="width: 178px;" | '''getNearestLiquidStorages'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Работает аналогично предыдущему, но возвращает интерфейсы хранилищ для всех соседних TileEntity, имеющих хранилища жидкостей.<br />
|-<br />
| style="width: 178px;" | '''putItems'''<br />
| style="width: 114px;" | items, containers<br />
| style="width: 458px;" | Добавляет предметы из массива items в контейнеры из объекта, возвращаемого методом&nbsp;''getNearestContainers'''''.'''<br />
|-<br />
| style="width: 178px;" | '''putItemToContainer'''<br />
| style="width: 114px;" | item, container, side, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов в контейнер.<br/> '''maxCount '''- максимальное количество предметов, которое может быть передано за раз&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromContainer'''<br />
| style="width: 114px;" | inputСontainer , outputContainer, side, maxCount, oneStack<br />
| style="width: 458px;" | <br />
Позволяет извлечь предмет из контейнера и добавить его в tile entity или контейнер.<br/> '''inputStorage&nbsp;'''- TileEntity или контейнер, в который будут добавлены предметы<br/> '''outputContainer '''- контейнер, из которого будут извлечены предметы<br/> '''maxCount '''- сколько предметов может быть извлечено (по умолчанию не ограничено)<br/> '''oneStack '''- если true, то извлечёт&nbsp;только один стак предметов.<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromStorage'''<br />
| style="width: 114px;" | inputStorage, outputStorage, side, maxCount, oneStack<br />
| style="width: 458px;" | Аналогичен предыдущему, но принимает аргументами интерфейсы хранилищ.<br />
|-<br />
| style="width: 178px;" | '''transportLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, outputStorage, inputStorage, outputSide<br />
| style="width: 458px;" | <br />
Передаёт жидкость из одного TileEntity в другой.<br/> '''liquid&nbsp;'''- название жидкости<br/> '''maxAmount&nbsp;'''- максимальное количество, которое будет передано<br/> '''outputStorage&nbsp;'''- интерфейс хранилища или TileEntity, из которого будет передана жидкость<br/> '''inputStorage&nbsp;'''- интерфейс хранилища, принимающего жидкость<br/> '''outputSide&nbsp;'''- сторона блока, через которую передаётся жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, inputStorage, outputStorage, inputSide<br />
| style="width: 458px;" | <br />
Похож на предыдущий, но позволяет извлечь жидкость из TileEntity<br/> '''liquid '''- название жидкости. Если не указано, то извлечёт любую жидкость&nbsp;из&nbsp;''outputStorage'',&nbsp;если она может быть принята в&nbsp;''inputStorage.''<br/> '''inputStorage&nbsp;'''- интерфейс хранилища или TileEntity,&nbsp;принимающий жидкость<br/> '''outputStorage&nbsp;'''- интерфейс хранилища, из которого будет извлечена жидкость<br/> '''inputSide '''- сторона блока, которая будет принимать жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''checkHoppers'''<br />
| style="width: 114px;" | tileEntity<br />
| style="width: 458px;" | Позволяет TileEntity взаимодействовать с воронками. Для этого должен вызываться в функции тика TileEntity .<br />
|-<br />
| style="width: 178px;" | '''addItemToSlot'''<br />
| style="width: 114px;" | item, slot, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов&nbsp;в слот. Изменяет только объект слота, для корректной работы требуется установить слот через&nbsp;''container.setSlot.''<br/> '''maxCount '''- максимальное количество, которое будет передано в слот&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|}<br />
</div> </div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/EnergyNet&diff=2609InnerCore/Libs/EnergyNet2021-12-06T00:27:51Z<p>MineExplorer: </p>
<hr />
<div>Данная библиотека для Inner Core представляет собой инструмент для быстрого создания новых типов энергии и имеет большой функционал для работы с ними. <br />
== Загрузка ==<br />
<br />
Последняя версия (v9) - [https://github.com/MineExplorer/IC_Libraries/releases/tag/energy-net-v9 скачать]<br/> Файлы:<br/> energy-net.js - сама библиотека<br/> energy-net.d.ts - заголовочный файл (API)<br />
<br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''(energy-net.js)'' нужно добавить в папку ''lib/'' в директории мода (если таковой нету, то ее нужно создать).Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<syntaxhighlight lang="JavaScript">IMPORT("EnergyNet");<br />
</syntaxhighlight><br />
<br />
== Модули и классы ==<br />
<br />
#''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии <br />
#''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity <br />
#''EnergyGridBuilder'' - модуль построения энергосетей <br />
#''EnergyNet'' - модуль, хранящий энергосети <br />
#''EnergyNode'' - базовый класс энергоузла <br />
#''EnergyGrid'' - класс узла блока-проводника <br />
<br />
== Механика передачи энергии ==<br />
<br />
Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого строится граф (энергосеть), в которым механизмы и блоки-проводники являются узлами. Энергия передаётся пакетами от блока-источника по всем узлам, с которыми он соединён. Каждый пакет имеет определённое количество энергии и напряжение (количество энергии, которое в нём было изначально).<br />
<br />
В целях оптимизации провода одного типа, соединенные друг с другом, объединяются в один энергоузел, в то время как каждый блок-механизм имеет свой энергоузел.<br />
<br />
== Создание нового типа энергии ==<br />
<br />
''EnergyTypeRegistry.assureEnergyType("name", value)'' - создает новый тип энергии и возвращает его, если такой тип энергии уже существует, новый создан не будет, а вернется уже существующий, таким образом если 2 мода создают один тип энергии, он будет общий.<br />
<br />
<u>Параметры:</u><br />
<br />
*''name'' - уникальное название энергии, обычно используется сокращение (''"Eu" - energy units, "RF" - redstone flux'' и т.п.) <br />
*''value'' - сколько ''Eu'' (единиц энергии ''IndustrialCraft'') содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. ''Энергия Eu принята за эталон.'' <br />
<br />
Возвращает функция тип с данным именем (созданный или импортированный), который обладает следующими методами и значениями:<br />
<br />
*<''energyType''>''.name'' - имя данного типа энергии. <br />
*<''energyType''>''.registerWire(id, value, energyGridClass?)'' – регистрирует провод с данным id. Параметры: <br />
**''value'' - лимит на размер пакета энергии (напряжение), который блок может проводить. При превышении максимального напряжения размер пакета уменьшается до лимита провода и вызывается функция onOverload в классе провода. <br />
**''energyGridClass'' - опционально, позволяет задать свой класс провода, который должен быть наследован от класса ''EnergyGrid''. <br />
<br />
'''Пример:'''<br />
<syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку (см. выше)<br />
<br />
// создаем тип энергии redstone flux<br />
var energyRF = EnergyTypeRegistry.assureEnergyType("RF", 0.25);<br />
// регистрируем блок-проводник для данного типа энергии<br />
energyRF.registerWire(BlockID.RFconduct, 2000);<br />
</syntaxhighlight><br />
<br />
== Привязка типов энергии к TileEntity ==<br />
<br />
''EnergyTileRegistry.addEnergyTypeForId(blockId, energyType)'' - добавляет в tile entity объект класса [[InnerCore/Libs/EnergyNet#Объект_EnergyNode|EnergyNode]], который может быть получен через ''this.energyNode'' в функциях tile entity, а так же дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.<br/> <u>Параметры:</u><br />
<br />
*''blockId'' – id блока, на который был зарегистрирован нужный tile entity. <br />
*''energyType'' - тип энергии, который требуется к нему привязать. <br />
<br />
Новые события:<br />
<br />
*''energyTick: function(type, node) { /* … */ }'' - вызывается каждый тик для энергоузла tile entity.<br/> Параметры: <br />
**''type'' - название типа энергии, для которого вызвано это событие. <br />
**''node'' - энергоузел механизма, позволяет добавлять энергию <br />
*''energyReceive: function(type, amount, voltage) { /* … */ }'' – вызывается при приёме пакета энергии данным tile entity. Должна возвращать количество энергии, которое удалось добавить.<br/> Параметры: <br />
**''type'' - название типа энергии <br />
**''amount'' – количество энергии <br />
**''voltage'' – напряжение энергии <br />
*''canReceiveEnergy: function(side, type) {return boolean;}'' – определяет, может ли tile entity получать энергию данного типа и с каких сторон. Вызывается при попытке соединения tile entity к энергосети. По умолчанию возвращает ''true''. <br />
*''canExtractEnergy: function(side, type) {return boolean;}'' – определяет, с каких сторон tile entity может выдавать энергию. По умолчанию возвращает ''true''. <br />
*''isConductor': function(type) {return boolean;}'' – определяет, может ли tile entity проводить энергию данного типа. По умолчанию возвращает ''false''. <br />
<br />
== Объект EnergyNode ==<br />
<br />
Данный объект представляет собой узел энергосети.<br/> <u>Основные методы:</u><br />
<br />
*''add(amount, voltage)'' - добавляет в сеть данное кол-во энергии ''(amount)'', возвращает, какое кол-во энергии добавить не удалось из-за переполнения (0, если вся энергия добавлена). Если значение ''voltage'' (напряжение) не указано, то оно будет равно ''amount''. <br />
*''addCoords(x, y, z)'' - добавляет блок на координатах x, y, z в список блоков энергоузла (позволяет, например, сделать проводящим энергию блоки обшивки в многоблочном механизме) <br />
*''removeCoords(x, y, z)'' - удаляет блок из энергоузла <br />
*''addConnection(node)'' - добавляет выходящее соединение с другим узлом <br />
*''removeConnection(node) ''- удаляет соединение с узлом <br />
*''resetConnections()'' - удаляет все соединения с другими узлами <br />
*''destroy()'' - удаляет энергоузел. <br />
<br />
== Работа с энергетическими сетями ==<br />
<br />
''EnergyNet.getNodeOnCoords(blockSource, x, y, z)'' – возвращает узел на данных координатах, если он существует. Используется в IndustrialCraft для нанесения урона от оголённых проводов и для мультиметра.<br />
<br />
== Примеры ==<br />
<br />
=== Генератор ===<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет вырабатывать энергию.<br />
TileEntity.registerPrototype(BlockID.RFgenerator, {<br />
canReceiveEnergy: function(){<br />
return false; // не может получать энергию<br />
},<br />
energyTick: function(type, src) {<br />
src.add(10); // генерирует 10 RF за тик.<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFgenerator, energyRF);</syntaxhighlight><br />
<br />
=== Потребитель ===<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFconsumer", который будет потреблять энергию для производства алмазов.<br />
TileEntity.registerPrototype(BlockID.RFconsumer, {<br />
defaultValues: {<br />
progress: 0 // сохраняемое значение прогресса работы<br />
},<br />
canExtractEnergy: function(side, type) {<br />
return false; // не может отдавать энергию<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
this.data.progress += amount; // увеличиваем прогресс производства алмаза.<br />
return amount; // и возвращаем сколько забрали энергии<br />
},<br />
tick: function(){<br />
if(this.data.progress >= 10000){<br />
this.data.progress = 0;<br />
World.drop(this.x, this.y +1, this.z, 264, 1); // дропнуть алмаз на координатах tile entity.<br />
}<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRF);<br />
</syntaxhighlight><br />
<br />
=== Хранилище ===<br />
<br />
Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе два хранилища будут бесконечно обмениваться энергией друг с другом, уменьшая количество энергии, отдаваемое другим tile enity.<br />
<syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху.<br />
TileEntity.registerPrototype(BlockID.RFstorage, {<br />
defaultValues: {<br />
energy: 0 // сохраняемое значение, обозначающее запасенную энергию<br />
},<br />
canReceiveEnergy: function(side, type) {<br />
return side != 0; // side != 0 выведет true, если сторона любая, кроме нижней.<br />
} ,<br />
canExtractEnergy: function(side, type) {<br />
return side == 0; // выведет true при подключении блока для выхода энергии с нижней стороны.<br />
},<br />
getCapacity: function(){<br />
return 2e6; // установим лимит хранилища энергии в 2 миллиона (2e6 - это способ записи числа 2000000)<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
amount = Math.min(amount, 1000); // устанавливаем максимальное количество энергии, которое может принять механизм равным 1000.<br />
var add = Math.min(amount, this.getCapacity() - this.data.energy); // уменьшаем количество энергии, так, чтобы хранилище не переполнялось;<br />
this.data.energy += add; // добавляем энергию в хранилище<br />
return add; // и возвращаем сколько забрали энергии<br />
},<br />
energyTick: function(type, src){<br />
var output = Math.min(1000, this.data.energy); // определяем, сколько энергии блок может отдать<br />
this.data.energy += src.add(output) - output; // прибавляем к хранилищу количество энергии, которое осталось после отправки пакета, и вычитаем сколько отправляли.<br />
},<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRF);</syntaxhighlight></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/EnergyNet&diff=2608InnerCore/Libs/EnergyNet2021-12-06T00:17:34Z<p>MineExplorer: удалены лишние переносы строк</p>
<hr />
<div>Данная библиотека для Inner Core представляет собой инструмент для быстрого создания новых типов энергии и имеет большой функционал для работы с ними. <br />
== Загрузка ==<br />
<br />
Последняя версия (v9) - [https://github.com/MineExplorer/IC_Libraries/releases/tag/energy-net-v9 скачать]<br/> Файлы:<br/> energy-net.js - сама библиотека<br/> energy-net.d.ts - заголовочный файл (API)<br />
<br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''(energy-net.js)'' нужно добавить в папку ''lib/'' в директории мода (если таковой нету, то ее нужно создать).Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<syntaxhighlight lang="JavaScript">IMPORT("EnergyNet");<br />
</syntaxhighlight><br />
<br />
== Модули и классы ==<br />
<br />
#''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии <br />
#''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity <br />
#''EnergyGridBuilder'' - модуль построения энергосетей и взаимодействия с ними <br />
#''EnergyNet'' - модуль для хранения и получения энергосетей <br />
#''EnergyNode'' - базовый класс энергоузла <br />
#''EnergyGrid'' - класс узла блока-проводника <br />
<br />
== Механика передачи энергии ==<br />
<br />
Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого строится граф (энергосеть), в которым механизмы и блоки-проводники являются узлами. Энергия передаётся пакетами от блока-источника по всем узлам, с которыми он соединён. Каждый пакет имеет определённое количество энергии и напряжение (количество энергии, которое в нём было изначально).<br />
<br />
В целях оптимизации провода одного типа, соединенные друг с другом, объединяются в один энергоузел, в то время как каждый блок-механизм имеет свой энергоузел.<br />
<br />
== Создание нового типа энергии ==<br />
<br />
''EnergyTypeRegistry.assureEnergyType("name", value)'' - создает новый тип энергии и возвращает его, если такой тип энергии уже существует, новый создан не будет, а вернется уже существующий, таким образом если 2 мода создают один тип энергии, он будет общий.<br />
<br />
<u>Параметры:</u><br />
<br />
*''name'' - уникальное название энергии, обычно используется сокращение (''"Eu" - energy units, "RF" - redstone flux'' и т.п.) <br />
*''value'' - сколько ''Eu'' (единиц энергии ''IndustrialCraft'') содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. ''Энергия Eu принята за эталон.'' <br />
<br />
Возвращает функция тип с данным именем (созданный или импортированный), который обладает следующими методами и значениями:<br />
<br />
*<''energyType''>''.name'' - имя данного типа энергии. <br />
*<''energyType''>''.registerWire(id, value, energyGridClass?)'' – регистрирует провод с данным id. Параметры: <br />
**''value'' - лимит на размер пакета энергии (напряжение), который блок может проводить. При превышении максимального напряжения размер пакета уменьшается до лимита провода и вызывается функция onOverload в классе провода. <br />
**''energyGridClass'' - опционально, позволяет задать свой класс провода, который должен быть наследован от класса ''EnergyGrid''. <br />
<br />
'''Пример:'''<br />
<syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку (см. выше)<br />
<br />
// создаем тип энергии redstone flux<br />
var energyRF = EnergyTypeRegistry.assureEnergyType("RF", 0.25);<br />
// регистрируем блок-проводник для данного типа энергии<br />
energyRF.registerWire(BlockID.RFconduct, 2000);<br />
</syntaxhighlight><br />
<br />
== Привязка типов энергии к TileEntity ==<br />
<br />
''EnergyTileRegistry.addEnergyTypeForId(blockId, energyType)'' - добавляет в tile entity объект класса [[InnerCore/Libs/EnergyNet#Объект_EnergyNode|EnergyNode]], который может быть получен через ''this.energyNode'' в функциях tile entity, а так же дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.<br/> <u>Параметры:</u><br />
<br />
*''blockId'' – id блока, на который был зарегистрирован нужный tile entity. <br />
*''energyType'' - тип энергии, который требуется к нему привязать. <br />
<br />
Новые события:<br />
<br />
*''energyTick: function(type, node) { /* … */ }'' - вызывается каждый тик для энергоузла tile entity.<br/> Параметры: <br />
**''type'' - название типа энергии, для которого вызвано это событие. <br />
**''node'' - энергоузел механизма, позволяет добавлять энергию <br />
*''energyReceive: function(type, amount, voltage) { /* … */ }'' – вызывается при приёме пакета энергии данным tile entity. Должна возвращать количество энергии, которое удалось добавить.<br/> Параметры: <br />
**''type'' - название типа энергии <br />
**''amount'' – количество энергии <br />
**''voltage'' – напряжение энергии <br />
*''canReceiveEnergy: function(side, type) {return boolean;}'' – определяет, может ли tile entity получать энергию данного типа и с каких сторон. Вызывается при попытке соединения tile entity к энергосети. По умолчанию возвращает ''true''. <br />
*''canExtractEnergy: function(side, type) {return boolean;}'' – определяет, с каких сторон tile entity может выдавать энергию. По умолчанию возвращает ''true''. <br />
*''isConductor': function(type) {return boolean;}'' – определяет, может ли tile entity проводить энергию данного типа. По умолчанию возвращает ''false''. <br />
<br />
== Объект EnergyNode ==<br />
<br />
Данный объект представляет собой узел энергосети.<br/> <u>Основные методы:</u><br />
<br />
*''add(amount, voltage)'' - добавляет в сеть данное кол-во энергии ''(amount)'', возвращает, какое кол-во энергии добавить не удалось из-за переполнения (0, если вся энергия добавлена). Если значение ''voltage'' (напряжение) не указано, то оно будет равно ''amount''. <br />
*''addCoords(x, y, z)'' - добавляет блок на координатах x, y, z в список блоков энергоузла (позволяет, например, сделать проводящим энергию блоки обшивки в многоблочном механизме) <br />
*''removeCoords(x, y, z)'' - удаляет блок из энергоузла <br />
*''addConnection(node)'' - добавляет выходящее соединение с другим узлом <br />
*''removeConnection(node) ''- удаляет соединение с узлом <br />
*''resetConnections()'' - удаляет все соединения с другими узлами <br />
*''destroy()'' - удаляет энергоузел. <br />
<br />
== Работа с энергетическими сетями ==<br />
<br />
''EnergyNet.getNodeOnCoords(blockSource, x, y, z)'' – возвращает узел на данных координатах, если он существует. Используется в IndustrialCraft для нанесения урона от оголённых проводов и для мультиметра.<br />
<br />
== Примеры ==<br />
<br />
=== Генератор ===<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет вырабатывать энергию.<br />
TileEntity.registerPrototype(BlockID.RFgenerator, {<br />
canReceiveEnergy: function(){<br />
return false; // не может получать энергию<br />
},<br />
energyTick: function(type, src) {<br />
src.add(10); // генерирует 10 RF за тик.<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFgenerator, energyRF);</syntaxhighlight><br />
<br />
=== Потребитель ===<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFconsumer", который будет потреблять энергию для производства алмазов.<br />
TileEntity.registerPrototype(BlockID.RFconsumer, {<br />
defaultValues: {<br />
progress: 0 // сохраняемое значение прогресса работы<br />
},<br />
canExtractEnergy: function(side, type) {<br />
return false; // не может отдавать энергию<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
this.data.progress += amount; // увеличиваем прогресс производства алмаза.<br />
return amount; // и возвращаем сколько забрали энергии<br />
},<br />
tick: function(){<br />
if(this.data.progress >= 10000){<br />
this.data.progress = 0;<br />
World.drop(this.x, this.y +1, this.z, 264, 1); // дропнуть алмаз на координатах tile entity.<br />
}<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRF);<br />
</syntaxhighlight><br />
<br />
=== Хранилище ===<br />
<br />
Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе два хранилища будут бесконечно обмениваться энергией друг с другом, уменьшая количество энергии, отдаваемое другим tile enity.<br />
<syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху.<br />
TileEntity.registerPrototype(BlockID.RFstorage, {<br />
defaultValues: {<br />
energy: 0 // сохраняемое значение, обозначающее запасенную энергию<br />
},<br />
canReceiveEnergy: function(side, type) {<br />
return side != 0; // side != 0 выведет true, если сторона любая, кроме нижней.<br />
} ,<br />
canExtractEnergy: function(side, type) {<br />
return side == 0; // выведет true при подключении блока для выхода энергии с нижней стороны.<br />
},<br />
getCapacity: function(){<br />
return 2e6; // установим лимит хранилища энергии в 2 миллиона (2e6 - это способ записи числа 2000000)<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
amount = Math.min(amount, 1000); // устанавливаем максимальное количество энергии, которое может принять механизм равным 1000.<br />
var add = Math.min(amount, this.getCapacity() - this.data.energy); // уменьшаем количество энергии, так, чтобы хранилище не переполнялось;<br />
this.data.energy += add; // добавляем энергию в хранилище<br />
return add; // и возвращаем сколько забрали энергии<br />
},<br />
energyTick: function(type, src){<br />
var output = Math.min(1000, this.data.energy); // определяем, сколько энергии блок может отдать<br />
this.data.energy += src.add(output) - output; // прибавляем к хранилищу количество энергии, которое осталось после отправки пакета, и вычитаем сколько отправляли.<br />
},<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRF);</syntaxhighlight></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/EnergyNet&diff=2607InnerCore/Libs/EnergyNet2021-12-06T00:11:28Z<p>MineExplorer: </p>
<hr />
<div>Данная библиотека для Inner Core представляет собой инструмент для быстрого создания новых типов энергии и имеет большой функционал для работы с ними. <br />
== Загрузка ==<br />
<br />
Последняя версия (v9) - [https://github.com/MineExplorer/IC_Libraries/releases/tag/energy-net-v9 скачать]<br/> Файлы:<br/> energy-net.js - сама библиотека<br/> energy-net.d.ts - заголовочный файл (API)<br />
<br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''(energy-net.js)'' нужно добавить в папку ''lib/'' в директории мода (если таковой нету, то ее нужно создать).Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<syntaxhighlight lang="JavaScript">IMPORT("EnergyNet");<br />
</syntaxhighlight><br />
<br />
== Модули и классы ==<br />
<br />
#''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии <br />
#''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity <br />
#''EnergyGridBuilder'' - модуль построения энергосетей и взаимодействия с ними <br />
#''EnergyNet'' - модуль для хранения и получения энергосетей <br />
#''EnergyNode'' - базовый класс энергоузла <br />
#''EnergyGrid'' - класс узла блока-проводника <br />
<br />
== Механика передачи энергии ==<br />
<br />
Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого строится граф (энергосеть), в которым механизмы и блоки-проводники являются узлами. Энергия передаётся пакетами от блока-источника по всем узлам, с которыми он соединён. Каждый пакет имеет определённое количество энергии и напряжение (количество энергии, которое в нём было изначально).<br />
<br />
В целях оптимизации провода одного типа, соединенные друг с другом, объединяются в один энергоузел, в то время как каждый блок-механизм имеет свой энергоузел.<br />
<br />
== Создание нового типа энергии ==<br />
<br />
''EnergyTypeRegistry.assureEnergyType("name", value)'' - создает новый тип энергии и возвращает его, если такой тип энергии уже существует, новый создан не будет, а вернется уже существующий, таким образом если 2 мода создают один тип энергии, он будет общий.<br />
<br />
<u>Параметры:</u><br />
<br />
*''name'' - уникальное название энергии, обычно используется сокращение (''"Eu" - energy units, "RF" - redstone flux'' и т.п.) <br />
*''value'' - сколько ''Eu'' (единиц энергии ''IndustrialCraft'') содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. ''Энергия Eu принята за эталон.'' <br />
<br />
Возвращает функция тип с данным именем (созданный или импортированный), который обладает следующими методами и значениями:<br />
<br />
*<''energyType''>''.name'' - имя данного типа энергии. <br />
*<''energyType''>''.registerWire(id, value, energyGridClass?)'' – регистрирует провод с данным id. Параметры: <br />
**''value'' - лимит на размер пакета энергии (напряжение), который блок может проводить. При превышении максимального напряжения размер пакета уменьшается до лимита провода и вызывается функция onOverload в классе провода. <br />
**''energyGridClass'' - опционально, позволяет задать свой класс провода, который должен быть наследован от класса ''EnergyGrid''. <br />
<br />
'''Пример:'''<br />
<syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку (см. выше)<br />
<br />
// создаем тип энергии redstone flux<br />
var energyRF = EnergyTypeRegistry.assureEnergyType("RF", 0.25);<br />
// регистрируем блок-проводник для данного типа энергии<br />
energyRF.registerWire(BlockID.RFconduct, 2000);<br />
</syntaxhighlight><br />
<br />
== Привязка типов энергии к TileEntity ==<br />
<br />
''EnergyTileRegistry.addEnergyTypeForId(blockId, energyType)'' - добавляет в tile entity объект класса [[InnerCore/Libs/EnergyNet#Объект_EnergyNode|EnergyNode]], который может быть получен через ''this.energyNode'' в функциях tile entity, а так же дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.<br/> <u>Параметры:</u><br />
<br />
*''blockId'' – id блока, на который был зарегистрирован нужный tile entity. <br />
*''energyType'' - тип энергии, который требуется к нему привязать. <br />
<br />
Новые события:<br />
<br />
*''energyTick: function(type, node) { /* … */ }'' - вызывается каждый тик для энергоузла tile entity.<br/> Параметры: <br />
**''type'' - название типа энергии, для которого вызвано это событие. <br />
**''node'' - энергоузел механизма, позволяет добавлять энергию <br />
*''energyReceive: function(type, amount, voltage) { /* … */ }'' – вызывается при приёме пакета энергии данным tile entity. Должна возвращать количество энергии, которое удалось добавить.<br/> Параметры: <br />
**''type'' - название типа энергии <br />
**''amount'' – количество энергии <br />
**''voltage'' – напряжение энергии <br />
*''canReceiveEnergy: function(side, type) {return boolean;}'' – определяет, может ли tile entity получать энергию данного типа и с каких сторон. Вызывается при попытке соединения tile entity к энергосети. По умолчанию возвращает ''true''. <br />
*''canExtractEnergy: function(side, type) {return boolean;}'' – определяет, с каких сторон tile entity может выдавать энергию. По умолчанию возвращает ''true''. <br />
*''isConductor': function(type) {return boolean;}'' – определяет, может ли tile entity проводить энергию данного типа. По умолчанию возвращает ''false''. <br />
<br />
== Объект EnergyNode ==<br />
<br />
Данный объект представляет собой узел энергосети.<br/> <u>Основные методы:</u><br />
<br />
*''add(amount, voltage)'' - добавляет в сеть данное кол-во энергии ''(amount)'', возвращает, какое кол-во энергии добавить не удалось из-за переполнения (0, если вся энергия добавлена). Если значение ''voltage'' (напряжение) не указано, то оно будет равно ''amount''. <br />
*''addCoords(x, y, z)'' - добавляет блок на координатах x, y, z в список блоков энергоузла (позволяет, например, сделать проводящим энергию блоки обшивки в многоблочном механизме) <br />
*''removeCoords(x, y, z)'' - удаляет блок из энергоузла <br />
*''addConnection(node)'' - добавляет выходящее соединение с другим узлом <br />
*''removeConnection(node) ''- удаляет соединение с узлом <br />
*''resetConnections()'' - удаляет все соединения с другими узлами <br />
*''destroy()'' - удаляет энергоузел. <br />
<br />
== Работа с энергетическими сетями ==<br />
<br />
''EnergyNet.getNodeOnCoords(blockSource, x, y, z)'' – возвращает узел на данных координатах, если он существует. Используется в IndustrialCraft для нанесения урона от оголённых проводов и для мультиметра.<br />
<br />
== Примеры ==<br />
<br />
=== Генератор ===<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет вырабатывать энергию.<br />
TileEntity.registerPrototype(BlockID.RFgenerator, {<br />
canReceiveEnergy: function(){<br />
return false; // не может получать энергию<br />
},<br />
energyTick: function(type, src) {<br />
src.add(10); // генерирует 10 RF за тик.<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFgenerator, energyRF);</syntaxhighlight><br />
<br />
=== Потребитель ===<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFconsumer", который будет потреблять энергию для производства алмазов.<br />
TileEntity.registerPrototype(BlockID.RFconsumer, {<br />
defaultValues: {<br />
progress: 0 // сохраняемое значение прогресса работы<br />
},<br />
canExtractEnergy: function(side, type) {<br />
return false; // не может отдавать энергию<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
this.data.progress += amount; // увеличиваем прогресс производства алмаза.<br />
return amount; // и возвращаем сколько забрали энергии<br />
},<br />
tick: function(){<br />
if(this.data.progress >= 10000){<br />
this.data.progress = 0;<br />
World.drop(this.x, this.y +1, this.z, 264, 1); // дропнуть алмаз на координатах tile entity.<br />
}<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRF);<br />
</syntaxhighlight><br />
<br />
=== Хранилище ===<br />
<br />
Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе два хранилища будут бесконечно обмениваться энергией друг с другом, уменьшая количество энергии, отдаваемое другим tile enity.<br />
<syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху.<br />
TileEntity.registerPrototype(BlockID.RFstorage, {<br />
defaultValues: {<br />
energy: 0 // сохраняемое значение, обозначающее запасенную энергию<br />
},<br />
canReceiveEnergy: function(side, type) {<br />
return side != 0; // side != 0 выведет true, если сторона любая, кроме нижней.<br />
} ,<br />
canExtractEnergy: function(side, type) {<br />
return side == 0; // выведет true при подключении блока для выхода энергии с нижней стороны.<br />
},<br />
getCapacity: function(){<br />
return 2e6; // установим лимит хранилища энергии в 2 миллиона (2e6 - это способ записи числа 2000000)<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
amount = Math.min(amount, 1000); // устанавливаем максимальное количество энергии, которое может принять механизм равным 1000.<br />
var add = Math.min(amount, this.getCapacity() - this.data.energy); // уменьшаем количество энергии, так, чтобы хранилище не переполнялось;<br />
this.data.energy += add; // добавляем энергию в хранилище<br />
return add; // и возвращаем сколько забрали энергии<br />
},<br />
energyTick: function(type, src){<br />
var output = Math.min(1000, this.data.energy); // определяем, сколько энергии блок может отдать<br />
this.data.energy += src.add(output) - output; // прибавляем к хранилищу количество энергии, которое осталось после отправки пакета, и вычитаем сколько отправляли.<br />
},<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRF);</syntaxhighlight></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/EnergyNet&diff=2606InnerCore/Libs/EnergyNet2021-12-06T00:10:32Z<p>MineExplorer: </p>
<hr />
<div>Данная библиотека для Inner Core представляет собой инструмент для быстрого создания новых типов энергии и имеет большой функционал для работы с ними. <br />
== Загрузка ==<br />
<br />
Последняя версия (v9) - [https://github.com/MineExplorer/IC_Libraries/releases/tag/energy-net-v9 скачать]<br/> Файлы:<br/> energy-net.js - сама библиотека<br/> energy-net.d.ts - заголовочный файл (API)<br />
<br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''(energy-net.js)'' нужно добавить в папку ''lib/'' в директории мода (если таковой нету, то ее нужно создать).Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<syntaxhighlight lang="JavaScript">IMPORT("EnergyNet");<br />
</syntaxhighlight><br />
<br />
== Модули и классы ==<br />
<br />
#''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии <br />
#''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity <br />
#''EnergyGridBuilder'' - модуль построения энергосетей и взаимодействия с ними <br />
#''EnergyNet'' - модуль для хранения и получения энергосетей <br />
#''EnergyNode'' - базовый класс энергоузла <br />
#''EnergyGrid'' - класс узла блока-проводника <br />
<br />
== Механика передачи энергии ==<br />
<br />
Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого строится граф (энергосеть), в которым механизмы и блоки-проводники являются узлами. Энергия передаётся пакетами от блока-источника по всем узлам, с которыми он соединён. Каждый пакет имеет определённое количество энергии и напряжение (количество энергии, которое в нём было изначально).<br />
<br />
В целях оптимизации провода одного типа, соединенные друг с другом, объединяются в один энергоузел, в то время как каждый блок-механизм имеет свой энергоузел.<br />
<br />
== Создание нового типа энергии ==<br />
<br />
''EnergyTypeRegistry.assureEnergyType("name", value)'' - создает новый тип энергии и возвращает его, если такой тип энергии уже существует, новый создан не будет, а вернется уже существующий, таким образом если 2 мода создают один тип энергии, он будет общий.<br />
<br />
<u>Параметры:</u><br />
<br />
*''name'' - уникальное название энергии, обычно используется сокращение (''"Eu" - energy units, "RF" - redstone flux'' и т.п.) <br />
*''value'' - сколько ''Eu'' (единиц энергии ''IndustrialCraft'') содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. ''Энергия Eu принята за эталон.'' <br />
<br />
Возвращает функция тип с данным именем (созданный или импортированный), который обладает следующими методами и значениями:<br />
<br />
*<''energyType''>''.name'' - имя данного типа энергии. <br />
*<''energyType''>''.registerWire(id, value, energyGridClass?)'' – регистрирует провод с данным id. Параметры: <br />
**''value'' - лимит на размер пакета энергии (напряжение), который блок может проводить. При превышении максимального напряжения размер пакета уменьшается до лимита провода и вызывается функция onOverload в классе провода. <br />
**''energyGridClass'' - опционально, позволяет задать свой класс провода, который должен быть наследован от класса ''EnergyGrid''. <br />
<br />
'''Пример:'''<br />
<syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку (она должна находиться в lib/) importLib("energylib.js", "*");<br />
<br />
// создаем тип энергии redstone flux<br />
var energyRF = EnergyTypeRegistry.assureEnergyType("RF", 0.25);<br />
// регистрируем блок-проводник для данного типа энергии<br />
energyRF.registerWire(BlockID.RFconduct, 2000);<br />
</syntaxhighlight><br />
<br />
== Привязка типов энергии к TileEntity ==<br />
<br />
''EnergyTileRegistry.addEnergyTypeForId(blockId, energyType)'' - добавляет в tile entity объект класса [[InnerCore/Libs/EnergyNet#Объект_EnergyNode|EnergyNode]], который может быть получен через ''this.energyNode'' в функциях tile entity, а так же дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.<br/> <u>Параметры:</u><br />
<br />
*''blockId'' – id блока, на который был зарегистрирован нужный tile entity. <br />
*''energyType'' - тип энергии, который требуется к нему привязать. <br />
<br />
Новые события:<br />
<br />
*''energyTick: function(type, node) { /* … */ }'' - вызывается каждый тик для энергоузла tile entity.<br/> Параметры: <br />
**''type'' - название типа энергии, для которого вызвано это событие. <br />
**''node'' - энергоузел механизма, позволяет добавлять энергию <br />
*''energyReceive: function(type, amount, voltage) { /* … */ }'' – вызывается при приёме пакета энергии данным tile entity. Должна возвращать количество энергии, которое удалось добавить.<br/> Параметры: <br />
**''type'' - название типа энергии <br />
**''amount'' – количество энергии <br />
**''voltage'' – напряжение энергии <br />
*''canReceiveEnergy: function(side, type) {return boolean;}'' – определяет, может ли tile entity получать энергию данного типа и с каких сторон. Вызывается при попытке соединения tile entity к энергосети. По умолчанию возвращает ''true''. <br />
*''canExtractEnergy: function(side, type) {return boolean;}'' – определяет, с каких сторон tile entity может выдавать энергию. По умолчанию возвращает ''true''. <br />
*''isConductor': function(type) {return boolean;}'' – определяет, может ли tile entity проводить энергию данного типа. По умолчанию возвращает ''false''. <br />
<br />
== Объект EnergyNode ==<br />
<br />
Данный объект представляет собой узел энергосети.<br/> <u>Основные методы:</u><br />
<br />
*''add(amount, voltage)'' - добавляет в сеть данное кол-во энергии ''(amount)'', возвращает, какое кол-во энергии добавить не удалось из-за переполнения (0, если вся энергия добавлена). Если значение ''voltage'' (напряжение) не указано, то оно будет равно ''amount''. <br />
*''addCoords(x, y, z)'' - добавляет блок на координатах x, y, z в список блоков энергоузла (позволяет, например, сделать проводящим энергию блоки обшивки в многоблочном механизме) <br />
*''removeCoords(x, y, z)'' - удаляет блок из энергоузла <br />
*''addConnection(node)'' - добавляет выходящее соединение с другим узлом <br />
*''removeConnection(node) ''- удаляет соединение с узлом <br />
*''resetConnections()'' - удаляет все соединения с другими узлами <br />
*''destroy()'' - удаляет энергоузел. <br />
<br />
== Работа с энергетическими сетями ==<br />
<br />
''EnergyNet.getNodeOnCoords(blockSource, x, y, z)'' – возвращает узел на данных координатах, если он существует. Используется в IndustrialCraft для нанесения урона от оголённых проводов и для мультиметра.<br />
<br />
== Примеры ==<br />
<br />
=== Генератор ===<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет вырабатывать энергию.<br />
TileEntity.registerPrototype(BlockID.RFgenerator, {<br />
canReceiveEnergy: function(){<br />
return false; // не может получать энергию<br />
},<br />
energyTick: function(type, src) {<br />
src.add(10); // генерирует 10 RF за тик.<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFgenerator, energyRF);</syntaxhighlight><br />
<br />
=== Потребитель ===<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFconsumer", который будет потреблять энергию для производства алмазов.<br />
TileEntity.registerPrototype(BlockID.RFconsumer, {<br />
defaultValues: {<br />
progress: 0 // сохраняемое значение прогресса работы<br />
},<br />
canExtractEnergy: function(side, type) {<br />
return false; // не может отдавать энергию<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
this.data.progress += amount; // увеличиваем прогресс производства алмаза.<br />
return amount; // и возвращаем сколько забрали энергии<br />
},<br />
tick: function(){<br />
if(this.data.progress >= 10000){<br />
this.data.progress = 0;<br />
World.drop(this.x, this.y +1, this.z, 264, 1); // дропнуть алмаз на координатах tile entity.<br />
}<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRF);<br />
</syntaxhighlight><br />
<br />
=== Хранилище ===<br />
<br />
Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе два хранилища будут бесконечно обмениваться энергией друг с другом, уменьшая количество энергии, отдаваемое другим tile enity.<br />
<syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху.<br />
TileEntity.registerPrototype(BlockID.RFstorage, {<br />
defaultValues: {<br />
energy: 0 // сохраняемое значение, обозначающее запасенную энергию<br />
},<br />
canReceiveEnergy: function(side, type) {<br />
return side != 0; // side != 0 выведет true, если сторона любая, кроме нижней.<br />
} ,<br />
canExtractEnergy: function(side, type) {<br />
return side == 0; // выведет true при подключении блока для выхода энергии с нижней стороны.<br />
},<br />
getCapacity: function(){<br />
return 2e6; // установим лимит хранилища энергии в 2 миллиона (2e6 - это способ записи числа 2000000)<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
amount = Math.min(amount, 1000); // устанавливаем максимальное количество энергии, которое может принять механизм равным 1000.<br />
var add = Math.min(amount, this.getCapacity() - this.data.energy); // уменьшаем количество энергии, так, чтобы хранилище не переполнялось;<br />
this.data.energy += add; // добавляем энергию в хранилище<br />
return add; // и возвращаем сколько забрали энергии<br />
},<br />
energyTick: function(type, src){<br />
var output = Math.min(1000, this.data.energy); // определяем, сколько энергии блок может отдать<br />
this.data.energy += src.add(output) - output; // прибавляем к хранилищу количество энергии, которое осталось после отправки пакета, и вычитаем сколько отправляли.<br />
},<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRF);</syntaxhighlight></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/EnergyNet&diff=2605InnerCore/Libs/EnergyNet2021-12-06T00:03:12Z<p>MineExplorer: </p>
<hr />
<div>Данная библиотека для Inner Core представляет собой инструмент для быстрого создания новых типов энергии и имеет большой функционал для работы с ними. <br />
== Загрузка ==<br />
<br />
Последняя версия (v9) - [https://github.com/MineExplorer/IC_Libraries/releases/tag/energy-net-v9 скачать]<br/> Файлы:<br/> energy-net.js&nbsp;- сама библиотека<br/> energy-net.d.ts&nbsp;- заголовочный файл (API)<br />
<br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''(energy-net.js)''&nbsp;нужно добавить в папку&nbsp;''lib/'' в директории мода (если таковой нету, то ее нужно создать).Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<syntaxhighlight lang="JavaScript">IMPORT("EnergyNet");<br />
</syntaxhighlight><br />
<br />
== Модули и классы ==<br />
<br />
#''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии <br />
#''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity <br />
#''EnergyGridBuilder'' - модуль построения энергосетей и взаимодействия с ними <br />
#''EnergyNet ''- модуль для хранения и получения энергосетей <br />
#''EnergyNode ''- базовый класс энергоузла <br />
#''EnergyGrid ''- класс узла блока-проводника <br />
<br />
== Механика передачи энергии ==<br />
<br />
Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого строится граф (энергосеть), в которым механизмы и блоки-проводники являются узлами.&nbsp;Энергия передаётся пакетами от блока-источника по всем узлам, с которыми он соединён. Каждый пакет&nbsp;имеет определённое количество&nbsp;энергии и напряжение (количество энергии, которое в нём было изначально).<br />
<br />
В целях оптимизации провода одного типа, соединенные друг с другом, объединяются в один энергоузел, в то время как каждый блок-механизм имеет свой энергоузел.<br />
<br />
== Создание нового типа энергии ==<br />
<br />
''EnergyTypeRegistry.assureEnergyType("name", value)'' - создает новый тип энергии и возвращает его, если такой тип энергии уже существует, новый создан не будет, а вернется уже существующий, таким образом если 2 мода создают один тип энергии, он будет общий.<br />
<br />
<u>Параметры:</u><br />
<br />
*''name'' - уникальное название энергии, обычно используется сокращение (''"Eu" - energy units, "RF" - redstone flux'' и т.п.) <br />
*''value'' - сколько ''Eu'' (единиц энергии ''IndustrialCraft'') содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. ''Энергия Eu принята за эталон.'' <br />
<br />
Возвращает функция тип с данным именем (созданный или импортированный), который обладает следующими методами и значениями:<br />
<br />
*<''energyType''>''.name'' - имя данного типа энергии. <br />
*<''energyType''>''.registerWire(id, value, energyGridClass?)'' – регистрирует провод с данным id. Параметры: <br />
**''value ''-&nbsp;лимит на размер пакета энергии (напряжение), который блок&nbsp;может проводить. При превышении максимального напряжения размер пакета уменьшается до лимита провода и вызывается функция onOverload в классе провода. <br />
**''energyGridClass''&nbsp;- опционально, позволяет задать свой класс провода, который должен быть наследован от класса&nbsp;''EnergyGrid''. <br />
<br />
'''Пример:'''<br />
<syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку (она должна находиться в lib/) importLib("energylib.js", "*");<br />
<br />
// создаем тип энергии redstone flux<br />
var energyRF = EnergyTypeRegistry.assureEnergyType("RF", 0.25);<br />
// регистрируем блок-проводник для данного типа энергии<br />
energyRF.registerWire(BlockID.RFconduct, 2000);<br />
</syntaxhighlight><br />
<br />
== Привязка типов энергии к TileEntity ==<br />
<br />
''EnergyTileRegistry.addEnergyTypeForId(blockId, energyType)'' - добавляет в tile entity&nbsp;объект класса&nbsp;[[InnerCore/Libs/EnergyNet#Объект_EnergyNode|EnergyNode]], который&nbsp;может быть получен через ''this.energyNode''&nbsp;в функциях tile entity, а так же дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.<br/> <u>Параметры:</u><br />
<br />
*''blockId&nbsp;''– id блока, на который был зарегистрирован нужный tile entity. <br />
*''energyType'' - тип энергии, который требуется к нему привязать. <br />
<br />
Новые события:<br />
<br />
*''energyTick: function(type, node) { /* … */ }'' - вызывается каждый тик для энергоузла&nbsp;tile entity.<br/> Параметры: <br />
**''type'' - название типа энергии, для которого вызвано это событие. <br />
**''node ''- энергоузел механизма, позволяет добавлять энергию <br />
*''energyReceive: function(type, amount, voltage) { /* … */ }'' – вызывается при приёме пакета энергии данным tile entity. Должна возвращать количество энергии, которое удалось добавить.<br/> Параметры: <br />
**''type'' - название типа энергии <br />
**''amount'' – количество энергии <br />
**''voltage'' – напряжение энергии <br />
*''canReceiveEnergy: function(side, type) {return boolean;}'' – определяет, может ли tile entity получать энергию данного типа и с каких сторон. Вызывается при попытке соединения tile entity к энергосети.&nbsp;По умолчанию возвращает ''true''. <br />
*''canExtractEnergy: function(side, type) {return boolean;}'' – определяет, с каких сторон tile entity может выдавать энергию. По умолчанию возвращает ''true''. <br />
*''isConductor': function(type) {return boolean;}'' – определяет, может ли tile entity проводить&nbsp;энергию&nbsp;данного типа.&nbsp;По умолчанию возвращает ''false''. <br />
<br />
== Объект EnergyNode ==<br />
<br />
Данный объект представляет собой узел энергосети.<br/> <u>Основные методы:</u><br />
<br />
*''add(amount, voltage)'' - добавляет в сеть данное кол-во энергии ''(amount)'', возвращает, какое кол-во энергии добавить не удалось из-за переполнения (0, если вся энергия добавлена). Если значение ''voltage'' (напряжение) не указано, то оно будет равно ''amount''. <br />
*''addCoords(x, y, z)&nbsp;''- добавляет блок на координатах x, y, z в список блоков энергоузла (позволяет, например, сделать проводящим энергию блоки обшивки в многоблочном механизме) <br />
*''removeCoords(x, y, z)''&nbsp;- удаляет блок из энергоузла <br />
*''addConnection(node)'' - добавляет выходящее соединение с другим узлом <br />
*''removeConnection(node) ''- удаляет соединение с узлом <br />
*''resetConnections()'' - удаляет все соединения с другими узлами <br />
*''destroy()'' - удаляет энергоузел. <br />
<br />
== Работа с энергетическими сетями ==<br />
<br />
''EnergyNet.getNodeOnCoords(blockSource, x, y, z)'' – возвращает узел на&nbsp;данных координатах, если он существует. Используется в IndustrialCraft для нанесения урона от оголённых проводов и для мультиметра.&nbsp;<br />
<br />
== Примеры ==<br />
<br />
=== Генератор ===<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет вырабатывать энергию.<br />
TileEntity.registerPrototype(BlockID.RFgenerator, {<br />
canReceiveEnergy: function(){<br />
return false; // не может получать энергию<br />
},<br />
energyTick: function(type, src) {<br />
src.add(10); // генерирует 10 RF за тик.<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFgenerator, energyRF);</syntaxhighlight><br />
<br />
=== Потребитель ===<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFconsumer", который будет потреблять энергию для производства алмазов.<br />
TileEntity.registerPrototype(BlockID.RFconsumer, {<br />
defaultValues: {<br />
progress: 0 // сохраняемое значение прогресса работы<br />
},<br />
canExtractEnergy: function(side, type) {<br />
return false; // не может отдавать энергию<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
this.data.progress += amount; // увеличиваем прогресс производства алмаза.<br />
return amount; // и возвращаем сколько забрали энергии<br />
},<br />
tick: function(){<br />
if(this.data.progress >= 10000){<br />
this.data.progress = 0;<br />
World.drop(this.x, this.y +1, this.z, 264, 1); // дропнуть алмаз на координатах tile entity.<br />
}<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRF);<br />
</syntaxhighlight><br />
<br />
=== Хранилище ===<br />
<br />
Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе энергия между двумя&nbsp;связанных друг с другом механизмами могут бесконечно обмениваться энергией друг с другом, игнорируя другие tile enity.<br />
<syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху.<br />
TileEntity.registerPrototype(BlockID.RFstorage, {<br />
defaultValues: {<br />
energy: 0 // сохраняемое значение, обозначающее запасенную энергию<br />
},<br />
canReceiveEnergy: function(side, type) {<br />
return side != 0; // side != 0 выведет true, если сторона любая, кроме нижней.<br />
} ,<br />
canExtractEnergy: function(side, type) {<br />
return side == 0; // выведет true при подключении блока для выхода энергии с нижней стороны.<br />
},<br />
getCapacity: function(){<br />
return 2e6; // установим лимит хранилища энергии в 2 миллиона (2e6 - это способ записи числа 2000000)<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
amount = Math.min(amount, 1000); // устанавливаем максимальное количество энергии, которое может принять механизм равным 1000.<br />
var add = Math.min(amount, this.getCapacity() - this.data.energy); // уменьшаем количество энергии, так, чтобы хранилище не переполнялось;<br />
this.data.energy += add; // добавляем энергию в хранилище<br />
return add; // и возвращаем сколько забрали энергии<br />
},<br />
energyTick: function(type, src){<br />
var output = Math.min(1000, this.data.energy); // определяем, сколько энергии блок может отдать<br />
this.data.energy += src.add(output) - output; // прибавляем к хранилищу количество энергии, которое осталось после отправки пакета, и вычитаем сколько отправляли.<br />
},<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRF);</syntaxhighlight></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/EnergyNet&diff=2604InnerCore/Libs/EnergyNet2021-12-05T23:58:38Z<p>MineExplorer: </p>
<hr />
<div>Данная библиотека для Inner Core представляет собой инструмент для быстрого создания новых типов энергии и имеет большой функционал для работы с ними. <br />
== Загрузка ==<br />
<br />
Последняя версия (v9) - [https://github.com/MineExplorer/IC_Libraries/releases/tag/energy-net-v9 скачать]<br/> Файлы:<br/> energy-net.js&nbsp;- сама библиотека<br/> energy-net.d.ts&nbsp;- заголовочный файл (API)<br />
<br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''(energy-net.js)''&nbsp;нужно добавить в папку&nbsp;''lib/'' в директории мода (если таковой нету, то ее нужно создать).Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<syntaxhighlight lang="JavaScript">IMPORT("EnergyNet");<br />
</syntaxhighlight><br />
<br />
== Модули и классы ==<br />
<br />
#''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии <br />
#''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity <br />
#''EnergyGridBuilder'' - модуль построения энергосетей и взаимодействия с ними <br />
#''EnergyNet ''- модуль для хранения и получения энергосетей <br />
#''EnergyNode ''- базовый класс энергоузла <br />
#''EnergyGrid ''- класс узла блока-проводника <br />
<br />
== Механика передачи энергии ==<br />
<br />
Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого строится граф (энергосеть), в которым механизмы и блоки-проводники являются узлами.&nbsp;Энергия передаётся пакетами от блока-источника по всем узлам, с которыми он соединён. Каждый пакет&nbsp;имеет определённое количество&nbsp;энергии и напряжение (количество энергии, которое в нём было изначально).<br />
<br />
В целях оптимизации провода одного типа, соединенные друг с другом, объединяются в один энергоузел, в то время как каждый блок-механизм имеет свой энергоузел.<br />
<br />
== Создание нового типа энергии ==<br />
<br />
''EnergyTypeRegistry.assureEnergyType("name", value)'' - создает новый тип энергии и возвращает его, если такой тип энергии уже существует, новый создан не будет, а вернется уже существующий, таким образом если 2 мода создают один тип энергии, он будет общий.<br />
<br />
<u>Параметры:</u><br />
<br />
*''name'' - уникальное название энергии, обычно используется сокращение (''"Eu" - energy units, "RF" - redstone flux'' и т.п.) <br />
*''value'' - сколько ''Eu'' (единиц энергии ''IndustrialCraft'') содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. ''Энергия Eu принята за эталон.'' <br />
<br />
Возвращает функция тип с данным именем (созданный или импортированный), который обладает следующими методами и значениями:<br />
<br />
*<''energyType''>''.name'' - имя данного типа энергии. <br />
*<''energyType''>''.registerWire(id, value, energyGridClass?)'' – регистрирует провод с данным id. Параметры: <br />
**''value ''-&nbsp;лимит на размер пакета энергии (напряжение), который блок&nbsp;может проводить. При превышении максимального напряжения размер пакета уменьшается до лимита провода и вызывается функция onOverload в классе провода. <br />
**''energyGridClass''&nbsp;- опционально, позволяет задать свой класс провода, который должен быть наследован от класса&nbsp;''EnergyGrid''. <br />
<br />
'''Пример:'''<br />
<syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку (она должна находиться в lib/) importLib("energylib.js", "*");<br />
<br />
// создаем тип энергии redstone flux<br />
var energyRF = EnergyTypeRegistry.assureEnergyType("RF", 0.25);<br />
// регистрируем блок-проводник для данного типа энергии<br />
energyRF.registerWire(BlockID.RFconduct, 2000);<br />
</syntaxhighlight><br />
<br />
== Привязка типов энергии к TileEntity ==<br />
<br />
''EnergyTileRegistry.addEnergyTypeForId(blockId, energyType)'' - добавляет в tile entity&nbsp;объект класса&nbsp;[[EnergyNode|EnergyNode]], который&nbsp;может быть получен через ''this.energyNode''&nbsp;в функциях tile entity, а так же дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.<br/> <u>Параметры:</u><br />
<br />
*''blockId&nbsp;''– id блока, на который был зарегистрирован нужный tile entity. <br />
*''energyType'' - тип энергии, который требуется к нему привязать. <br />
<br />
Новые события:<br />
<br />
*''energyTick: function(type, node) { /* … */ }'' - вызывается каждый тик для энергоузла&nbsp;tile entity.<br/> Параметры: <br />
**''type'' - название типа энергии, для которого вызвано это событие. <br />
**''node ''- энергоузел механизма, позволяет добавлять энергию <br />
*''energyReceive: function(type, amount, voltage) { /* … */ }'' – вызывается при приёме пакета энергии данным tile entity. Должна возвращать количество энергии, которое удалось добавить.<br/> Параметры: <br />
**''type'' - название типа энергии <br />
**''amount'' – количество энергии <br />
**''voltage'' – напряжение энергии <br />
*''canReceiveEnergy: function(side, type) {return boolean;}'' – определяет, может ли tile entity получать энергию данного типа и с каких сторон. Вызывается при попытке соединения tile entity к энергосети.&nbsp;По умолчанию возвращает ''true''. <br />
*''canExtractEnergy: function(side, type) {return boolean;}'' – определяет, с каких сторон tile entity может выдавать энергию. По умолчанию возвращает ''true''. <br />
*''isConductor': function(type) {return boolean;}'' – определяет, может ли tile entity проводить&nbsp;энергию&nbsp;данного типа.&nbsp;По умолчанию возвращает ''false''. <br />
<br />
== Объект EnergyNode ==<br />
<br />
Данный объект представляет собой узел энергосети.<br/> <u>Основные методы:</u><br />
<br />
*''add(amount, voltage)'' - добавляет в сеть данное кол-во энергии ''(amount)'', возвращает, какое кол-во энергии добавить не удалось из-за переполнения (0, если вся энергия добавлена). Если значение ''voltage'' (напряжение) не указано, то оно будет равно ''amount''. <br />
*''addCoords(x, y, z)&nbsp;''- добавляет блок на координатах x, y, z в список блоков энергоузла (позволяет, например, сделать проводящим энергию блоки обшивки в многоблочном механизме) <br />
*''removeCoords(x, y, z)''&nbsp;- удаляет блок из энергоузла <br />
*''addConnection(node)'' - добавляет выходящее соединение с другим узлом <br />
*''removeConnection(node) ''- удаляет соединение с узлом <br />
*''resetConnections()'' - удаляет все соединения с другими узлами <br />
*''destroy()'' - удаляет энергоузел. <br />
<br />
== Работа с энергетическими сетями ==<br />
<br />
''EnergyNet.getNodeOnCoords(blockSource, x, y, z)'' – возвращает узел на&nbsp;данных координатах, если он существует. Используется в IndustrialCraft для нанесения урона от оголённых проводов и для мультиметра.&nbsp;<br />
<br />
== Примеры ==<br />
<br />
=== Генератор ===<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет вырабатывать энергию.<br />
TileEntity.registerPrototype(BlockID.RFgenerator, {<br />
canReceiveEnergy: function(){<br />
return false; // не может получать энергию<br />
},<br />
energyTick: function(type, src) {<br />
src.add(10); // генерирует 10 RF за тик.<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFgenerator, energyRF);</syntaxhighlight><br />
<br />
=== Потребитель ===<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFconsumer", который будет потреблять энергию для производства алмазов.<br />
TileEntity.registerPrototype(BlockID.RFconsumer, {<br />
defaultValues: {<br />
progress: 0 // сохраняемое значение прогресса работы<br />
},<br />
canExtractEnergy: function(side, type) {<br />
return false; // не может отдавать энергию<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
this.data.progress += amount; // увеличиваем прогресс производства алмаза.<br />
return amount; // и возвращаем сколько забрали энергии<br />
},<br />
tick: function(){<br />
if(this.data.progress >= 10000){<br />
this.data.progress = 0;<br />
World.drop(this.x, this.y +1, this.z, 264, 1); // дропнуть алмаз на координатах tile entity.<br />
}<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRF);<br />
</syntaxhighlight><br />
<br />
=== Хранилище ===<br />
<br />
Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе энергия между двумя&nbsp;связанных друг с другом механизмами могут бесконечно обмениваться энергией друг с другом, игнорируя другие tile enity.<br />
<syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху.<br />
TileEntity.registerPrototype(BlockID.RFstorage, {<br />
defaultValues: {<br />
energy: 0 // сохраняемое значение, обозначающее запасенную энергию<br />
},<br />
canReceiveEnergy: function(side, type) {<br />
return side != 0; // side != 0 выведет true, если сторона любая, кроме нижней.<br />
} ,<br />
canExtractEnergy: function(side, type) {<br />
return side == 0; // выведет true при подключении блока для выхода энергии с нижней стороны.<br />
},<br />
getCapacity: function(){<br />
return 2e6; // установим лимит хранилища энергии в 2 миллиона (2e6 - это способ записи числа 2000000)<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
amount = Math.min(amount, 1000); // устанавливаем максимальное количество энергии, которое может принять механизм равным 1000.<br />
var add = Math.min(amount, this.getCapacity() - this.data.energy); // уменьшаем количество энергии, так, чтобы хранилище не переполнялось;<br />
this.data.energy += add; // добавляем энергию в хранилище<br />
return add; // и возвращаем сколько забрали энергии<br />
},<br />
energyTick: function(type, src){<br />
var output = Math.min(1000, this.data.energy); // определяем, сколько энергии блок может отдать<br />
this.data.energy += src.add(output) - output; // прибавляем к хранилищу количество энергии, которое осталось после отправки пакета, и вычитаем сколько отправляли.<br />
},<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRF);</syntaxhighlight></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/EnergyNet&diff=2603InnerCore/Libs/EnergyNet2021-12-05T23:57:03Z<p>MineExplorer: Обновлена документация под последнюю версию</p>
<hr />
<div><div class="mw-parser-output">Данная библиотека для Inner Core представляет собой инструмент для быстрого создания новых типов энергии и имеет большой функционал для работы с ними. <br />
== Загрузка ==<br />
<br />
Последняя версия (v9) - [https://github.com/MineExplorer/IC_Libraries/releases/tag/energy-net-v9 скачать]<br/> Файлы:<br/> energy-net.js&nbsp;- сама библиотека<br/> energy-net.d.ts&nbsp;- заголовочный файл (API)<br />
<br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''(energy-net.js)''&nbsp;нужно добавить в папку&nbsp;''lib/'' в директории мода (если таковой нету, то ее нужно создать).Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<syntaxhighlight lang="JavaScript">IMPORT("EnergyNet");<br />
</syntaxhighlight><br />
<br />
== Модули и классы ==<br />
<br />
#''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии <br />
#''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity <br />
#''EnergyGridBuilder'' - модуль построения энергосетей и взаимодействия с ними <br />
#''EnergyNet ''- модуль для хранения и получения энергосетей <br />
#''EnergyNode ''- базовый класс энергоузла <br />
#''EnergyGrid ''- класс узла блока-проводника <br />
<br />
== Механика передачи энергии ==<br />
<br />
Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого строится граф (энергосеть), в которым механизмы и блоки-проводники являются узлами.&nbsp;Энергия передаётся пакетами от блока-источника по всем узлам, с которыми он соединён. Каждый пакет&nbsp;имеет определённое количество&nbsp;энергии и напряжение (количество энергии, которое в нём было изначально).<br />
<br />
В целях оптимизации провода одного типа, соединенные друг с другом, объединяются в один энергоузел, в то время как каждый блок-механизм имеет свой энергоузел.<br />
<br />
== Создание нового типа энергии ==<br />
<br />
''EnergyTypeRegistry.assureEnergyType("name", value)'' - создает новый тип энергии и возвращает его, если такой тип энергии уже существует, новый создан не будет, а вернется уже существующий, таким образом если 2 мода создают один тип энергии, он будет общий.<br />
<br />
<u>Параметры:</u><br />
<br />
*''name'' - уникальное название энергии, обычно используется сокращение (''"Eu" - energy units, "RF" - redstone flux'' и т.п.) <br />
*''value'' - сколько ''Eu'' (единиц энергии ''IndustrialCraft'') содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. ''Энергия Eu принята за эталон.'' <br />
<br />
Возвращает функция тип с данным именем (созданный или импортированный), который обладает следующими методами и значениями:<br />
<br />
*<''energyType''>''.name'' - имя данного типа энергии. <br />
*<''energyType''>''.registerWire(id, value, energyGridClass?)'' – регистрирует провод с данным id. Параметры: <br />
**''value ''-&nbsp;лимит на размер пакета энергии (напряжение), который блок&nbsp;может проводить. При превышении максимального напряжения размер пакета уменьшается до лимита провода и вызывается функция onOverload в классе провода. <br />
**''energyGridClass''&nbsp;- опционально, позволяет задать свой класс провода, который должен быть наследован от класса&nbsp;''EnergyGrid''. <br />
<br />
'''Пример:'''<br />
<syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку (она должна находиться в lib/) importLib("energylib.js", "*");<br />
<br />
// создаем тип энергии redstone flux<br />
var energyRF = EnergyTypeRegistry.assureEnergyType("RF", 0.25);<br />
// регистрируем блок-проводник для данного типа энергии<br />
energyRF.registerWire(BlockID.RFconduct, 2000);<br />
</syntaxhighlight><br />
<br />
== Привязка типов энергии к TileEntity ==<br />
<br />
''EnergyTileRegistry.addEnergyTypeForId(blockId, energyType)'' - добавляет в tile entity&nbsp;объект класса&nbsp;[[EnergyNode]], который&nbsp;может быть получен через ''this.energyNode''&nbsp;в функциях tile entity, а так же дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.<br/> <u>Параметры:</u><br />
<br />
*''blockId&nbsp;''– id блока, на который был зарегистрирован нужный tile entity. <br />
*''energyType'' - тип энергии, который требуется к нему привязать. <br />
<br />
Новые события:<br />
<br />
*''energyTick: function(type, node) { /* … */ }'' - вызывается каждый тик для энергоузла&nbsp;tile entity.<br/> Параметры: <br />
**''type'' - название типа энергии, для которого вызвано это событие. <br />
**''node ''- энергоузел механизма, позволяет добавлять энергию <br />
*''energyReceive: function(type, amount, voltage) { /* … */ }'' – вызывается при приёме пакета энергии данным tile entity. Должна возвращать количество энергии, которое удалось добавить.<br/> Параметры: <br />
**''type'' - название типа энергии <br />
**''amount'' – количество энергии <br />
**''voltage'' – напряжение энергии <br />
*''canReceiveEnergy: function(side, type) {return boolean;}'' – определяет, может ли tile entity получать энергию данного типа и с каких сторон. Вызывается при попытке соединения tile entity к энергосети.&nbsp;По умолчанию возвращает ''true''. <br />
*''canExtractEnergy: function(side, type) {return boolean;}'' – определяет, с каких сторон tile entity может выдавать энергию. По умолчанию возвращает ''true''. <br />
*''isConductor'''': function(type) {return boolean;}'' – определяет, может ли tile entity проводить&nbsp;энергию&nbsp;данного типа.&nbsp;По умолчанию возвращает ''false''. <br />
<br />
== Объект EnergyNode ==<br />
<br />
Данный объект представляет собой узел энергосети.<br/> <u>Основные методы:</u><br />
<br />
*''add(amount, voltage)'' - добавляет в сеть данное кол-во энергии ''(amount)'', возвращает, какое кол-во энергии добавить не удалось из-за переполнения (0, если вся энергия добавлена). Если значение ''voltage'' (напряжение) не указано, то оно будет равно ''amount''. <br />
*''addCoords(x, y, z)&nbsp;''- добавляет блок на координатах x, y, z в список блоков энергоузла (позволяет, например, сделать проводящим энергию блоки обшивки в многоблочном механизме) <br />
*''removeCoords(x, y, z)''&nbsp;- удаляет блок из энергоузла <br />
*''addConnection(node)'' - добавляет выходящее соединение с другим узлом <br />
*''removeConnection(node) ''- удаляет соединение с узлом <br />
*''resetConnections()'' - удаляет все соединения с другими узлами <br />
*''destroy()'' - удаляет энергоузел. <br />
<br />
== Работа с энергетическими сетями ==<br />
<br />
''EnergyNet.getNodeOnCoords(blockSource, x, y, z)'' – возвращает узел на&nbsp;данных координатах, если он существует. Используется в IndustrialCraft для нанесения урона от оголённых проводов и для мультиметра.&nbsp;<br />
<br />
== Примеры ==<br />
<br />
=== Генератор ===<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет вырабатывать энергию.<br />
TileEntity.registerPrototype(BlockID.RFgenerator, {<br />
canReceiveEnergy: function(){<br />
return false; // не может получать энергию<br />
},<br />
energyTick: function(type, src) {<br />
src.add(10); // генерирует 10 RF за тик.<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFgenerator, energyRF);</syntaxhighlight><br />
<br />
=== Потребитель ===<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFconsumer", который будет потреблять энергию для производства алмазов.<br />
TileEntity.registerPrototype(BlockID.RFconsumer, {<br />
defaultValues: {<br />
progress: 0 // сохраняемое значение прогресса работы<br />
},<br />
canExtractEnergy: function(side, type) {<br />
return false; // не может отдавать энергию<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
this.data.progress += amount; // увеличиваем прогресс производства алмаза.<br />
return amount; // и возвращаем сколько забрали энергии<br />
},<br />
tick: function(){<br />
if(this.data.progress >= 10000){<br />
this.data.progress = 0;<br />
World.drop(this.x, this.y +1, this.z, 264, 1); // дропнуть алмаз на координатах tile entity.<br />
}<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRF);<br />
</syntaxhighlight><br />
<br />
=== Хранилище ===<br />
<br />
Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе энергия между двумя&nbsp;связанных друг с другом механизмами могут бесконечно обмениваться энергией друг с другом, игнорируя другие tile enity.<br />
<syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху.<br />
TileEntity.registerPrototype(BlockID.RFstorage, {<br />
defaultValues: {<br />
energy: 0 // сохраняемое значение, обозначающее запасенную энергию<br />
},<br />
canReceiveEnergy: function(side, type) {<br />
return side != 0; // side != 0 выведет true, если сторона любая, кроме нижней.<br />
} ,<br />
canExtractEnergy: function(side, type) {<br />
return side == 0; // выведет true при подключении блока для выхода энергии с нижней стороны.<br />
},<br />
getCapacity: function(){<br />
return 2e6; // установим лимит хранилища энергии в 2 миллиона (2e6 - это способ записи числа 2000000)<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
amount = Math.min(amount, 1000); // устанавливаем максимальное количество энергии, которое может принять механизм равным 1000.<br />
var add = Math.min(amount, this.getCapacity() - this.data.energy); // уменьшаем количество энергии, так, чтобы хранилище не переполнялось;<br />
this.data.energy += add; // добавляем энергию в хранилище<br />
return add; // и возвращаем сколько забрали энергии<br />
},<br />
energyTick: function(type, src){<br />
var output = Math.min(1000, this.data.energy); // определяем, сколько энергии блок может отдать<br />
this.data.energy += src.add(output) - output; // прибавляем к хранилищу количество энергии, которое осталось после отправки пакета, и вычитаем сколько отправляли.<br />
},<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRF);</syntaxhighlight><br />
</div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/EnergyNet&diff=2602InnerCore/Libs/EnergyNet2021-12-05T23:22:07Z<p>MineExplorer: обновлены примеры</p>
<hr />
<div>Данная библиотека для Inner Core представляет собой инструмент для быстрого создания новых типов энергии и имеет большой функционал для работы с ними. <br />
== Загрузка ==<br />
<br />
Последняя версия (v9) - [https://github.com/MineExplorer/IC_Libraries/releases/tag/energy-net-v9 скачать]<br/> Файлы:<br/> energy-net.js&nbsp;- сама библиотека<br/> energy-net.d.ts&nbsp;- заголовочный файл (API)<br />
<br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''(energy-net.js)''&nbsp;нужно добавить в папку&nbsp;''lib/'' в директории мода (если таковой нету, то ее нужно создать).Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<syntaxhighlight lang="JavaScript">IMPORT("EnergyNet");<br />
</syntaxhighlight><br />
<br />
== Модули и классы ==<br />
<br />
#''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии <br />
#''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity <br />
#''EnergyGridBuilder'' - модуль построения энергосетей и взаимодействия с ними <br />
#''EnergyNet ''- модуль для хранения и получения энергосетей <br />
#''EnergyNode ''- базовый класс энергоузла <br />
#''EnergyGrid ''- класс узла блока-проводника <br />
<br />
== Механика передачи энергии ==<br />
<br />
Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого строится граф (энергосеть), в которым механизмы и блоки-проводники являются узлами.&nbsp;Энергия передаётся пакетами от блока-источника по всем узлам, с которыми он соединён. Каждый пакет&nbsp;имеет определённое количество&nbsp;энергии и напряжение (количество энергии, которое в нём было изначально).<br />
<br />
В целях оптимизации провода одного типа, соединенные друг с другом, объединяются в один энергоузел, в то время как каждый блок-механизм имеет свой энергоузел.<br />
<br />
== Создание нового типа энергии ==<br />
<br />
''EnergyTypeRegistry.assureEnergyType("name", value)'' - создает новый тип энергии и возвращает его, если такой тип энергии уже существует, новый создан не будет, а вернется уже существующий, таким образом если 2 мода создают один тип энергии, он будет общий.<br />
<br />
<u>Параметры:</u><br />
<br />
*''name'' - уникальное название энергии, обычно используется сокращение (''"Eu" - energy units, "RF" - redstone flux'' и т.п.) <br />
*''value'' - сколько ''Eu'' (единиц энергии ''IndustrialCraft'') содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. ''Энергия Eu принята за эталон.'' <br />
<br />
Возвращает функция тип с данным именем (созданный или импортированный), который обладает следующими методами и значениями:<br />
<br />
*<''energyType''>''.name'' - имя данного типа энергии. <br />
*<''energyType''>''.registerWire(id, value, energyGridClass?)'' – регистрирует провод с данным id. Параметры: <br />
**''value ''-&nbsp;лимит на размер пакета энергии (напряжение), который блок&nbsp;может проводить. При превышении максимального напряжения размер пакета уменьшается до лимита провода и вызывается функция onOverload в классе провода. <br />
**''energyGridClass''&nbsp;- опционально, позволяет задать свой класс провода, который должен быть наследован от класса&nbsp;''EnergyGrid''. <br />
<br />
'''Пример:'''<br />
<syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку (она должна находиться в lib/) importLib("energylib.js", "*");<br />
<br />
// создаем тип энергии redstone flux<br />
var energyRF = EnergyTypeRegistry.assureEnergyType("RF", 0.25);<br />
// регистрируем блок-проводник для данного типа энергии<br />
energyRF.registerWire(BlockID.RFconduct, 2000);<br />
</syntaxhighlight><br />
<br />
== Привязка типов энергии к TileEntity ==<br />
<br />
''EnergyTileRegistry.addEnergyTypeForId(tileEntityId, energyType)'' - добавляет tile entity с данным id дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.<br/> <u>Параметры:</u><br />
<br />
*''tileEntityId'' – id блока, на который был зарегистрирован нужный tile entity. <br />
*''energyType'' - тип энергии, который требуется к нему привязать. <br />
<br />
Новые события:<br />
<br />
*''energyTick: function(type, src) { /* … */ }'' - вызывается каждый тик после функции tick для каждой энергосети, привязанной к данному tile entity.<br/> Параметры: <br />
**''type'' - название типа энергии, для которого вызвано это событие. <br />
**src - объект типа [[InnerCore/Libs/EnergyNet#Объект_EnergySource|EnergySource]] для добавления энергии <br />
*''energyReceive: function(type, amount, voltage) { /* … */ }'' – вызывается при приёме пакета энергии данным tile entity. Должна возвращать количество энергии, которое удалось добавить.<br/> Параметры: <br />
**''type'' - название типа энергии <br />
**''amount'' – количество энергии <br />
**''voltage'' – напряжение энергии <br />
*''isEnergySource: function(type) {return true;}'' – определяет, может ли tile entity вырабатывать энергию данного типа. Если да, то для него строится энергосеть. <br />
*''canReceiveEnergy: function(side, type) {return true/false;}'' – определяет, может ли tile entity получать энергию данного типа и с каких сторон. Вызывается при попытке соединения tile entity к энергосети. <br />
*''canExtractEnergy: function(side, type) {return true/false;}'' – определяет, с каких сторон tile entity может выдавать энергию. <br />
<br />
== Объект EnergySource ==<br />
<br />
Данный объект является интерфейсом для добавления энергии в сеть, который передается в события для работы с энергией (src).<br/> <u>Методы:</u><br />
<br />
*''src.add(amount, voltage)'' - добавляет в сеть данное кол-во энергии ''(amount)'', возвращает, какое кол-во энергии добавить не удалось из-за переполнения (0, если вся энергия добавлена). Если значение ''voltage'' (напряжение) не указано, то оно будет равно ''amount''. <br />
*''src.addAll(amount, voltage)'' - аналогичен методу ''add'', но ничего не возвращает и работает быстрее, потому что добавляет энергию в буфер сети, позволяя объединять в один пакет множество пакетов, созданных генераторами. <br />
<br />
== Работа с энергетическими сетями ==<br />
<br />
Большая часть методов из модуля EnergyNetBuilder технические и используются только внутри библиотеки. Однако некоторые из них могут быть полезны и в модах:<br />
<br />
''EnergyNetBuilder.rebuildTileNet(объект tile entity)'' – удаляет все энергосети механизма и перестраивает все его соединения с другими сетями. Необходимо вызвать при изменении сторон, через которые tile entity может получать или передавать энергию.<br />
<br />
''EnergyNetBuilder.getNetOnCoords(x, y, z)'' – возвращает сеть, если на данных координатах есть её провод. Используется в IndustrialCraft для нанесения урона от оголённых проводов и для мультиметра. ''EnergyNetBuilder.getNetByBlock(x, y, z, wireId)'' – возвращает сеть, если блок на данных координатах имеет ид, указанное в параметре wireId.<br />
<br />
== Примеры ==<br />
<br />
=== Генератор ===<br />
&nbsp;<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет вырабатывать энергию.<br />
TileEntity.registerPrototype(BlockID.RFgenerator, {<br />
canReceiveEnergy: function(){<br />
return false; // не может получать энергию<br />
},<br />
energyTick: function(type, src) {<br />
src.add(10); // генерирует 10 RF за тик.<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFgenerator, energyRF);</syntaxhighlight><br />
<br />
=== Потребитель ===<br />
&nbsp;<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFconsumer", который будет потреблять энергию для производства алмазов.<br />
TileEntity.registerPrototype(BlockID.RFconsumer, {<br />
defaultValues: {<br />
progress: 0 // сохраняемое значение прогресса работы<br />
},<br />
canExtractEnergy: function(side, type) {<br />
return false; // не может отдавать энергию<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
this.data.progress += amount; // увеличиваем прогресс производства алмаза.<br />
return amount; // и возвращаем сколько забрали энергии<br />
},<br />
tick: function(){<br />
if(this.data.progress >= 10000){<br />
this.data.progress = 0;<br />
World.drop(this.x, this.y +1, this.z, 264, 1); // дропнуть алмаз на координатах tile entity.<br />
}<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRF);<br />
</syntaxhighlight><br />
<br />
=== Хранилище ===<br />
<br />
Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе энергия между двумя&nbsp;связанных друг с другом механизмами могут бесконечно обмениваться энергией друг с другом, игнорируя другие tile enity.<br />
<syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху.<br />
TileEntity.registerPrototype(BlockID.RFstorage, {<br />
defaultValues: {<br />
energy: 0 // сохраняемое значение, обозначающее запасенную энергию<br />
},<br />
canReceiveEnergy: function(side, type) {<br />
return side != 0; // side != 0 выведет true, если сторона любая, кроме нижней.<br />
} ,<br />
canExtractEnergy: function(side, type) {<br />
return side == 0; // выведет true при подключении блока для выхода энергии с нижней стороны.<br />
},<br />
getCapacity: function(){<br />
return 2e6; // установим лимит хранилища энергии в 2 миллиона (2e6 - это способ записи числа 2000000)<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
amount = Math.min(amount, 1000); // устанавливаем максимальное количество энергии, которое может принять механизм равным 1000.<br />
var add = Math.min(amount, this.getCapacity() - this.data.energy); // уменьшаем количество энергии, так, чтобы хранилище не переполнялось;<br />
this.data.energy += add; // добавляем энергию в хранилище<br />
return add; // и возвращаем сколько забрали энергии<br />
},<br />
energyTick: function(type, src){<br />
var output = Math.min(1000, this.data.energy); // определяем, сколько энергии блок может отдать<br />
this.data.energy += src.add(output) - output; // прибавляем к хранилищу количество энергии, которое осталось после отправки пакета, и вычитаем сколько отправляли.<br />
},<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRF);</syntaxhighlight></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/EnergyNet&diff=2601InnerCore/Libs/EnergyNet2021-12-05T23:18:57Z<p>MineExplorer: удалён ненужный код</p>
<hr />
<div>Данная библиотека для Inner Core представляет собой инструмент для быстрого создания новых типов энергии и имеет большой функционал для работы с ними. <br />
== Загрузка ==<br />
<br />
Последняя версия (v9) - [https://github.com/MineExplorer/IC_Libraries/releases/tag/energy-net-v9 скачать]<br/> Файлы:<br/> energy-net.js&nbsp;- сама библиотека<br/> energy-net.d.ts&nbsp;- заголовочный файл (API)<br />
<br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''(energy-net.js)''&nbsp;нужно добавить в папку&nbsp;''lib/'' в директории мода (если таковой нету, то ее нужно создать).Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<syntaxhighlight lang="JavaScript">IMPORT("EnergyNet");<br />
</syntaxhighlight><br />
<br />
== Модули и классы ==<br />
<br />
#''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии <br />
#''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity <br />
#''EnergyGridBuilder'' - модуль построения энергосетей и взаимодействия с ними <br />
#''EnergyNet ''- модуль для хранения и получения энергосетей <br />
#''EnergyNode ''- базовый класс энергоузла <br />
#''EnergyGrid ''- класс узла блока-проводника <br />
<br />
== Механика передачи энергии ==<br />
<br />
Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого строится граф (энергосеть), в которым механизмы и блоки-проводники являются узлами.&nbsp;Энергия передаётся пакетами от блока-источника по всем узлам, с которыми он соединён. Каждый пакет&nbsp;имеет определённое количество&nbsp;энергии и напряжение (количество энергии, которое в нём было изначально).<br />
<br />
В целях оптимизации провода одного типа, соединенные друг с другом, объединяются в один энергоузел, в то время как каждый блок-механизм имеет свой энергоузел.<br />
<br />
== Создание нового типа энергии ==<br />
<br />
''EnergyTypeRegistry.assureEnergyType("name", value)'' - создает новый тип энергии и возвращает его, если такой тип энергии уже существует, новый создан не будет, а вернется уже существующий, таким образом если 2 мода создают один тип энергии, он будет общий.<br />
<br />
<u>Параметры:</u><br />
<br />
*''name'' - уникальное название энергии, обычно используется сокращение (''"Eu" - energy units, "RF" - redstone flux'' и т.п.) <br />
*''value'' - сколько ''Eu'' (единиц энергии ''IndustrialCraft'') содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. ''Энергия Eu принята за эталон.'' <br />
<br />
Возвращает функция тип с данным именем (созданный или импортированный), который обладает следующими методами и значениями:<br />
<br />
*<''energyType''>''.name'' - имя данного типа энергии. <br />
*<''energyType''>''.registerWire(id, value, energyGridClass?)'' – регистрирует провод с данным id. Параметры: <br />
**''value ''-&nbsp;лимит на размер пакета энергии (напряжение), который блок&nbsp;может проводить. При превышении максимального напряжения размер пакета уменьшается до лимита провода и вызывается функция onOverload в классе провода. <br />
**''energyGridClass''&nbsp;- опционально, позволяет задать свой класс провода, который должен быть наследован от класса&nbsp;''EnergyGrid''. <br />
<br />
'''Пример:'''<br />
<syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку (она должна находиться в lib/) importLib("energylib.js", "*");<br />
<br />
// создаем тип энергии redstone flux<br />
var energyRF = EnergyTypeRegistry.assureEnergyType("RF", 0.25);<br />
// регистрируем блок-проводник для данного типа энергии<br />
energyRF.registerWire(BlockID.RFconduct, 2000);<br />
</syntaxhighlight><br />
<br />
== Привязка типов энергии к TileEntity ==<br />
<br />
''EnergyTileRegistry.addEnergyTypeForId(tileEntityId, energyType)'' - добавляет tile entity с данным id дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.<br/> <u>Параметры:</u><br />
<br />
*''tileEntityId'' – id блока, на который был зарегистрирован нужный tile entity. <br />
*''energyType'' - тип энергии, который требуется к нему привязать. <br />
<br />
Новые события:<br />
<br />
*''energyTick: function(type, src) { /* … */ }'' - вызывается каждый тик после функции tick для каждой энергосети, привязанной к данному tile entity.<br/> Параметры: <br />
**''type'' - название типа энергии, для которого вызвано это событие. <br />
**src - объект типа [[InnerCore/Libs/EnergyNet#Объект_EnergySource|EnergySource]] для добавления энергии <br />
*''energyReceive: function(type, amount, voltage) { /* … */ }'' – вызывается при приёме пакета энергии данным tile entity. Должна возвращать количество энергии, которое удалось добавить.<br/> Параметры: <br />
**''type'' - название типа энергии <br />
**''amount'' – количество энергии <br />
**''voltage'' – напряжение энергии <br />
*''isEnergySource: function(type) {return true;}'' – определяет, может ли tile entity вырабатывать энергию данного типа. Если да, то для него строится энергосеть. <br />
*''canReceiveEnergy: function(side, type) {return true/false;}'' – определяет, может ли tile entity получать энергию данного типа и с каких сторон. Вызывается при попытке соединения tile entity к энергосети. <br />
*''canExtractEnergy: function(side, type) {return true/false;}'' – определяет, с каких сторон tile entity может выдавать энергию. <br />
<br />
== Объект EnergySource ==<br />
<br />
Данный объект является интерфейсом для добавления энергии в сеть, который передается в события для работы с энергией (src).<br/> <u>Методы:</u><br />
<br />
*''src.add(amount, voltage)'' - добавляет в сеть данное кол-во энергии ''(amount)'', возвращает, какое кол-во энергии добавить не удалось из-за переполнения (0, если вся энергия добавлена). Если значение ''voltage'' (напряжение) не указано, то оно будет равно ''amount''. <br />
*''src.addAll(amount, voltage)'' - аналогичен методу ''add'', но ничего не возвращает и работает быстрее, потому что добавляет энергию в буфер сети, позволяя объединять в один пакет множество пакетов, созданных генераторами. <br />
<br />
== Работа с энергетическими сетями ==<br />
<br />
Большая часть методов из модуля EnergyNetBuilder технические и используются только внутри библиотеки. Однако некоторые из них могут быть полезны и в модах:<br />
<br />
''EnergyNetBuilder.rebuildTileNet(объект tile entity)'' – удаляет все энергосети механизма и перестраивает все его соединения с другими сетями. Необходимо вызвать при изменении сторон, через которые tile entity может получать или передавать энергию.<br />
<br />
''EnergyNetBuilder.getNetOnCoords(x, y, z)'' – возвращает сеть, если на данных координатах есть её провод. Используется в IndustrialCraft для нанесения урона от оголённых проводов и для мультиметра. ''EnergyNetBuilder.getNetByBlock(x, y, z, wireId)'' – возвращает сеть, если блок на данных координатах имеет ид, указанное в параметре wireId.<br />
<br />
== Примеры ==<br />
<br />
=== Генератор ===<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет вырабатывать энергию.<br />
TileEntity.registerPrototype(BlockID.RFgenerator, {<br />
isEnergySource: function() {<br />
return true; // может генерировать энергию<br />
},<br />
canReceiveEnergy: function(){<br />
return false; // не может получать энергию<br />
},<br />
energyTick: function(type, src) {<br />
src.addAll(10); // генерирует 10 RF за тик. Так как сразу отдаёт всю энергию, используется более быстрый метод.<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFgenerator, energyRF);</syntaxhighlight><br />
<br />
=== Потребитель ===<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFconsumer", который будет потреблять энергию для производства алмазов.<br />
TileEntity.registerPrototype(BlockID.RFconsumer, {<br />
defaultValues: {<br />
progress: 0 // сохраняемое значение прогресса работы<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
this.data.progress += amount; // увеличиваем прогресс производства алмаза.<br />
return amount; // и возвращаем сколько забрали энергии<br />
},<br />
tick: function(){<br />
if(this.data.progress >= 10000){<br />
this.data.progress = 0;<br />
World.drop(this.x, this.y +1, this.z, 264, 1); // дропнуть алмаз на координатах tile entity.<br />
}<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRF);<br />
</syntaxhighlight><br />
<br />
=== Хранилище ===<br />
<br />
Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе энергия между двумя&nbsp;связанных друг с другом механизмами могут бесконечно обмениваться энергией друг с другом, игнорируя другие tile enity.<br />
<syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху.<br />
TileEntity.registerPrototype(BlockID.RFstorage, {<br />
defaultValues: {<br />
energy: 0 // сохраняемое значение, обозначающее запасенную энергию<br />
},<br />
canReceiveEnergy: function(side, type) {<br />
return side != 0; // side != 0 выведет true, если сторона любая, кроме нижней.<br />
} ,<br />
canExtractEnergy: function(side, type) {<br />
return side == 0; // выведет true при подключении блока для выхода энергии с нижней стороны.<br />
},<br />
getCapacity: function(){<br />
return 2e6; // установим лимит хранилища энергии в 2 миллиона (2e6 - это способ записи числа 2000000)<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
amount = Math.min(amount, 1000); // устанавливаем максимальное количество энергии, которое может принять механизм равным 1000.<br />
var add = Math.min(amount, this.getCapacity() - this.data.energy); // уменьшаем количество энергии, так, чтобы хранилище не переполнялось;<br />
this.data.energy += add; // добавляем энергию в хранилище<br />
return add; // и возвращаем сколько забрали энергии<br />
},<br />
energyTick: function(type, src){<br />
var output = Math.min(1000, this.data.energy); // определяем, сколько энергии блок может отдать<br />
this.data.energy += src.add(output) - output; // прибавляем к хранилищу количество энергии, которое осталось после отправки пакета, и вычитаем сколько отправляли.<br />
},<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRF);</syntaxhighlight></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/EnergyNet&diff=2600InnerCore/Libs/EnergyNet2021-12-05T23:09:26Z<p>MineExplorer: </p>
<hr />
<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"><div class="mw-parser-output"><div class="mw-parser-output"><br />
Данная библиотека для Inner Core представляет собой инструмент для быстрого создания новых типов энергии и имеет большой функционал для работы с ними.<br />
<br />
== Загрузка ==<br />
<br />
Последняя версия (v9) - [https://github.com/MineExplorer/IC_Libraries/releases/tag/energy-net-v9 скачать]<br/> Файлы:<br/> energy-net.js&nbsp;- сама библиотека<br/> energy-net.d.ts&nbsp;- заголовочный файл (API)<br />
<div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><br />
== Импорт ==<br />
<div class="mw-parser-output">Для добавления библиотеки в мод ее файл ''(energy-net.js)''&nbsp;нужно добавить в папку&nbsp;''lib/'' в директории мода (если таковой нету, то ее нужно создать).</div> <div class="mw-parser-output">Для импорта библиотеки в мод в заголовочном файле (или если он остутвует в первом файле кода) следует добавить строку:</div> <div class="mw-parser-output"><syntaxhighlight lang="JavaScript">IMPORT("EnergyNet");<br />
</syntaxhighlight><br />
</div> </div> </div> </div> <br />
== Модули и классы ==<br />
<br />
#''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии <br />
#''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity <br />
#''EnergyGridBuilder'' - модуль построения энергосетей и взаимодействия с ними <br />
#''EnergyNet ''- модуль для хранения и получения энергосетей <br />
#''EnergyNode ''- базовый класс энергоузла <br />
#''EnergyGrid ''- класс узла блока-проводника <br />
</div> <div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><br />
== Механика передачи энергии ==<br />
<br />
Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого строится граф (энергосеть), в которым механизмы и блоки-проводники являются узлами.&nbsp;Энергия передаётся пакетами от блока-источника по всем узлам, с которыми он соединён. Каждый пакет&nbsp;имеет определённое количество&nbsp;энергии и напряжение (количество энергии, которое в нём было изначально).<br />
<br />
В целях оптимизации провода одного типа, соединенные друг с другом, объединяются в один энергоузел, в то время как каждый блок-механизм имеет свой энергоузел.<br />
<br />
== Создание нового типа энергии ==<br />
<br />
''EnergyTypeRegistry.assureEnergyType("name", value)'' - создает новый тип энергии и возвращает его, если такой тип энергии уже существует, новый создан не будет, а вернется уже существующий, таким образом если 2 мода создают один тип энергии, он будет общий.<br />
<br />
<u>Параметры:</u><br />
<br />
*''name'' - уникальное название энергии, обычно используется сокращение (''"Eu" - energy units, "RF" - redstone flux'' и т.п.) <br />
*''value'' - сколько ''Eu'' (единиц энергии ''IndustrialCraft'') содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. ''Энергия Eu принята за эталон.'' <br />
<br />
Возвращает функция тип с данным именем (созданный или импортированый), который обладает следующими методами и значениями:<br />
<br />
*<''energyType''>''.name'' - имя данного типа энергии. <br />
*<''energyType''>''.registerWire(id, value, energyGridClass?)'' – регистрирует провод с данным id. Параметры: <br />
**''value ''-&nbsp;лимит на размер пакета энергии (напряжение), который блок&nbsp;может проводить. При превышении максимального напряжения размер пакета уменьшается до лимита провода и вызывается функция onOverload в классе провода. <br />
**''energyGridClass''&nbsp;- опционально, позволяет задать свой класс провода, который должен быть наследован от класса&nbsp;''EnergyGrid''. <br />
<br />
'''Пример:'''<br />
<syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку (она должна находиться в lib/) importLib("energylib.js", "*");<br />
<br />
// создаем тип энергии redstone flux<br />
var energyRF = EnergyTypeRegistry.assureEnergyType("RF", 0.25);<br />
// регистрируем блок-проводник для данного типа энергии<br />
energyRF.registerWire(BlockID.RFconduct, 2000);<br />
</syntaxhighlight><br />
</div> </div> </div> </div> </div> </div> <br />
== Привязка типов энергии к TileEntity ==<br />
<br />
''EnergyTileRegistry.addEnergyTypeForId(tileEntityId, energyType)'' - добавляет tile entity с данным id дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.<br/> <u>Параметры:</u><br />
<br />
*''tileEntityId'' – id блока, на который был зарегистрирован нужный tile entity. <br />
*''energyType'' - тип энергии, который требуется к нему привязать. <br />
<br />
Новые события:<br />
<br />
*''energyTick: function(type, src) { /* … */ }'' - вызывается каждый тик после функции tick для каждой энергосети, привязанной к данному tile entity.<br/> Параметры: <br />
**''type'' - название типа энергии, для которого вызвано это событие. <br />
**src - объект типа [[InnerCore/Libs/EnergyNet#Объект_EnergySource|EnergySource]] для добавления энергии <br />
*''energyReceive: function(type, amount, voltage) { /* … */ }'' – вызывается при приёме пакета энергии данным tile entity. Должна возвращать количество энергии, которое удалось добавить.<br/> Параметры: <br />
**''type'' - название типа энергии <br />
**''amount'' – количество энергии <br />
**''voltage'' – напряжение энергии <br />
*''isEnergySource: function(type) {return true;}'' – определяет, может ли tile entity вырабатывать энергию данного типа. Если да, то для него строится энергосеть. <br />
*''canReceiveEnergy: function(side, type) {return true/false;}'' – определяет, может ли tile entity получать энергию даного типа и с каких сторон. Вызывается при попытке соединения tile entity к энергосети. <br />
*''canExtractEnergy: function(side, type) {return true/false;}'' – определяет, с каких сторон tile entity может выдавать энергию. <br />
</div> <br />
== Объект EnergySource ==<br />
<br />
Данный объект является интерфейсом для добавления энергии в сеть, который передается в события для работы с энергией (src).<br/> <u>Методы:</u><br />
<br />
*''src.add(amount, voltage)'' - добавляет в сеть данное кол-во энергии ''(amount)'', возвращает, какое кол-во энергии добавить не удалось из-за переполнения (0, если вся энергия добавлена). Если значение ''voltage'' (напряжение) не указано, то оно будет равно ''amount''. <br />
*''src.addAll(amount, voltage)'' - аналогичен методу ''add'', но ничего не возвращает и работает быстрее, потому что добавляет энергию в буфер сети, позволяя объединять в один пакет множество пакетов, созданных генераторами. <br />
</div> <div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><br />
== Работа с энегергетическими сетями ==<br />
<br />
Большая часть методов из модуля EnergyNetBuilder технические и используются только внутри библиотеки. Однако некоторые из них могут быть полезны и в модах:<br />
<br />
''EnergyNetBuilder.rebuildTileNet(объект tile entity)'' – удаляет все энергосети механизма и перестраивает все его соединения с другими сетями. Необходимо вызвать при изменении сторон, через которые tile entity может получать или передавать энергию.<br />
<br />
''EnergyNetBuilder.getNetOnCoords(x, y, z)'' – возвращает сеть, если на данных координатах есть её провод. Используется в IndustrialCraft для нанесения урона от оголённых проводов и для мультиметра.<br />
''EnergyNetBuilder.getNetByBlock(x, y, z, wireId)'' – возвращает сеть, если блок на данных координатах имеет ид, указанное в параметре wireId.</div> </div> </div> <br />
== Примеры ==<br />
<br />
=== Генератор ===<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет выробатывать энергию.<br />
TileEntity.registerPrototype(BlockID.RFgenerator, {<br />
isEnergySource: function() {<br />
return true; // может генерировать энергию<br />
},<br />
canReceiveEnergy: function(){<br />
return false; // не может получать энергию<br />
},<br />
energyTick: function(type, src) {<br />
src.addAll(10); // генерирует 10 RF за тик. Так как сразу отдаёт всю энергию, используется более быстрый метод.<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFgenerator, energyRF);</syntaxhighlight><br />
<div class="mw-parser-output"><br />
=== Потребитель ===<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFconsumer", который будет потреблять энергию для производства алмазов.<br />
TileEntity.registerPrototype(BlockID.RFconsumer, {<br />
defaultValues: {<br />
progress: 0 // сохраняемое значение прогресса работы<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
this.data.progress += amount; // увеличиваем прогресс производства алмаза.<br />
return amount; // и возвращаем сколько забрали энергии<br />
},<br />
tick: function(){<br />
if(this.data.progress >= 10000){<br />
this.data.progress = 0;<br />
World.drop(this.x, this.y +1, this.z, 264, 1); // дропнуть алмаз на координатах tile entity.<br />
}<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRF);<br />
</syntaxhighlight><br />
</div> <div class="mw-parser-output"><br />
=== Хранилище ===<br />
<br />
Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе энергия между двумя&nbsp;связанных друг с другом механизмами могут бесконечно обмениваться энергией друг с другом, игнорируя другие tile enity.<br />
<syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху.<br />
TileEntity.registerPrototype(BlockID.RFstorage, {<br />
defaultValues: {<br />
energy: 0 // сохраняемое значение, обозначающее запасенную энергию<br />
},<br />
canReceiveEnergy: function(side, type) {<br />
return side != 0; // side != 0 выведет true, если сторона любая, кроме нижней.<br />
} ,<br />
canExtractEnergy: function(side, type) {<br />
return side == 0; // выведет true при подключении блока для выхода энергии с нижней стороны.<br />
},<br />
getCapacity: function(){<br />
return 2e6; // установим лимит хранилища энергии в 2 миллиона (2e6 - это способ записи числа 2000000)<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
amount = Math.min(amount, 1000); // устанавлимаем максимальное количество энергии, которое может принять механизм равным 1000.<br />
var add = Math.min(amount, this.getCapacity() - this.data.energy); // уменьшаем количество энергии, так, чтобы хранилище не переполнялось;<br />
this.data.energy += add; // добавляем энергию в хранилище<br />
return add; // и возвращаем сколько забрали энергии<br />
},<br />
energyTick: function(type, src){<br />
var output = Math.min(1000, this.data.energy); // определяем, сколько энергии блок может отдать<br />
this.data.energy += src.add(output) - output; // прибавляем к хранилищу количество энергии, которое осталось после отправки пакета, и вычитаем сколько отправляли.<br />
},<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRF);</syntaxhighlight><br />
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/ToolLib&diff=2599InnerCore/Libs/ToolLib2021-12-05T22:23:52Z<p>MineExplorer: </p>
<hr />
<div><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output">ToolLib -&nbsp;Библиотека, предоставляющая универсальные типы инструментов и упрощающая создание инструментов. <br />
== Загрузка ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1" style="width: 579px;"<br />
|-<br />
| style="width: 68px; text-align: center;" | '''Версия'''<br />
| style="width: 81px; text-align: center;" | '''Скачать'''<br />
| style="width: 305px; text-align: center;" | '''Изменения'''<br />
| style="width: 100px; text-align: center;" | '''Дата выхода'''<br />
|-<br />
| style="width: 68px; text-align: center;" | '''23'''<br />
| style="width: 81px; text-align: center;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/toollib-v23 Скачать]<br />
| style="width: 305px;" | - Поддержка мультиплеера<br />
| style="width: 100px; text-align: center;" | 27.12.20<br />
|-<br />
| style="width: 68px; text-align: center;" | '''22'''<br />
| style="width: 81px; text-align: center;" | -<br />
| style="width: 305px;" | - Топоры могут делать обтёсанную древесину<br/> -&nbsp;Исправления ошибок<br />
| style="width: 100px; text-align: center;" | 24.08.20<br />
|-<br />
| style="width: 68px; text-align: center;" | '''21'''<br />
| style="width: 81px; text-align: center;" | -<br />
| style="width: 305px;" | - Добавлен enum&nbsp;MiningLevel<br />
| style="width: 100px; text-align: center;" | 11.07.20<br />
|}<br />
<br />
== <br/> Документация ==<br />
<br />
=== Подключение ===<br />
<br />
Чтобы подключить библиотеку, необходимо расположить файл библиотеки в папку lib в корне мода&nbsp;написать следующее в начале вашего кода:<br />
<syntaxhighlight lang="JavaScript">IMPORT("ToolLib");</syntaxhighlight><br />
<br />
После этого вам станет доступен весь функционал библиотеки.<br />
<br />
=== Добавление инструмента ===<br />
<br />
Для регистрации инструмента используется метод ToolLib.setTool(ItemID, toolMaterial, toolType)<br />
<syntaxhighlight lang="JavaScript">ToolLib.setTool(ItemID.myTool, "wood", ToolType.axe);<br />
</syntaxhighlight><br />
<br />
Так же вместо названия материала может напрямую быть передан объект с его свойствами.<br />
<br />
Материалы инструментов регистрируются методом&nbsp;ToolAPI.addToolMaterial(toolMaterial, params), но библиотека добавляет поддержку свойства зачаровываемости.<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addToolMaterial("dirt", {<br />
durability: 15, // Прочность (сколько блоков можно сломать)<br />
level: 1, // Уровень инструмента - определяет, какие блоки инструмент может добыть.<br />
efficiency: 10, // Эффективность - модификатор скорости ломания блока<br />
damage: 1, // Увеличение базового урона инструмента данным материалом<br />
enchantability: 14 // Зачаровываемость, чем выше, тем более хорошие чары будут при зачаровании<br />
});<br />
</syntaxhighlight><br />
<br />
=== Уровни добычи ===<br />
<br />
Библиотека позволяет вместо чисел использовать константы для уровней блоков и инструментов:<br />
<br />
MiningLevel.STONE&nbsp;=&nbsp;1 - камень<br/> MiningLevel.IRON&nbsp;=&nbsp;2 - железная руда<br/> MiningLevel.DIAMOND&nbsp;=&nbsp;3 - алмазная руда<br/> MiningLevel.OBSIDIAN&nbsp;=&nbsp;4 - обсидиан<br />
<br />
=== Стандартные типы инструментов ===<br />
<br />
ToolType.sword - меч<br/> ToolType.shovel - лопата<br/> ToolType.pickaxe - кирка<br/> ToolType.axe - топор<br/> ToolType.hoe - мотыга<br />
<br />
=== Создание своего типа инструментов ===<br />
<br />
Тип инструмента - это объект, содержащий свойства&nbsp;и функции&nbsp;инструмента. Библиотека поддерживает все параметры инструмента, указываемые&nbsp;ToolAPI.registerTool, а также добавляет новые.&nbsp;<br />
<syntaxhighlight lang="JavaScript">ToolType.myType = {<br />
enchantType: Native.EnchantType.pickaxe, //Тип чар для инструмента<br />
damage: 2, // Базовый урон инструмента<br />
blockTypes: ["dirt", "stone", "test"], // Материалы блоков, которые может ломать инструмент<br />
useItem: function(coords, item, block, player) { // Функция клика по блоку<br />
if (item.data > 0) {<br />
Entity.setCarriedItem(player, item.id, 1, item.data - 1, item.extra); // Починить инструмент на 1<br />
}<br />
}<br />
} </syntaxhighlight><br />
<br />
=== Все методы ===<br />
<br />
// Скоро будут добавлены<br />
</div> </div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/EnergyNet&diff=2598InnerCore/Libs/EnergyNet2021-11-22T16:21:42Z<p>MineExplorer: </p>
<hr />
<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"><br />
Данная библиотека для Inner Core представляет собой инструмент для быстрого создания новых типов энергии и имеет большой функционал для работы с ними.<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
== Импорт ==<br />
<div class="mw-parser-output">Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IndustrialCraft_2/blob/master/IndustrialCraft²/lib/energy-net.js energy-net.js])''(ссылка ведет на удаленную страницу) нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).</div> <div class="mw-parser-output">Для импорта библиотеки в мод в заголовочном файле (или если он остутвует в первом файле кода) следует добавить строку:</div> <div class="mw-parser-output"><syntaxhighlight lang="JavaScript">IMPORT("EnergyNet");<br />
</syntaxhighlight><br />
</div> </div> </div></div><br />
<br />
== Модули ==<br />
<br />
#''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии. <br />
#''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity.&nbsp; <br />
#''EnergyNetBuilder'' - модуль построения энергосетей и взаимодействия с ними. <br />
</div> <div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
== Создание нового типа энергии ==<br />
<br />
''EnergyTypeRegistry.assureEnergyType("name", value)'' - создает новый тип энергии и возвращает его, если такой тип энергии уже существует, новый создан не будет, а вернется уже существующий, таким образом если 2 мода создают один тип энергии, он будет общий.<br />
<br />
<u>Параметры:</u><br />
<br />
*''name'' - уникальное название энергии, обычно используется сокращение (''"Eu" - energy units, "RF" - redstone flux'' и т.п.) <br />
*''value'' - сколько ''Eu'' (единиц энергии ''IndustrialCraft'') содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. ''Энергия Eu принята за эталон.'' <br />
<br />
Возвращает функция тип с данным именем (созданный или импортированый), который обладает следующими методами и значениями:<br />
<br />
*<''energyType''>''.name'' - имя данного типа энергии. <br />
*<''energyType''>''.registerWire(id, value, overloadFunc)'' – регистрирует провод с данным id. Параметры: <br />
**''value ''-&nbsp;лимит на размер пакета энергии (напряжение), который блок&nbsp;может проводить. При превышении максимального напряжения размер пакета уменьшается до лимита провода и вызывается overloadFunc. <br />
**''overloadFunc ''- функция, которая вызвывается&nbsp;при приёма пакета энергии с напряжением выше лимита провода. Необязательный аргумент, имеет вид: <br />
<syntaxhighlight lang="JavaScript">function(maxVoltage){<br />
// this в этой функции возвращает объект энергосети, частью которой является провод.<br />
}<br />
</syntaxhighlight><br />
<br />
'''Пример:'''<br />
<syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку (она должна находиться в lib/) importLib("energylib.js", "*");<br />
<br />
// создаем тип энергии redstone flux<br />
var energyRF = EnergyTypeRegistry.assureEnergyType("RF", 0.25);<br />
// регистрируем блок-проводник для данного типа энергии<br />
energyRF.registerWire(BlockID.RFconduct, 2000);<br />
</syntaxhighlight><br />
</div> </div> <div class="mw-parser-output"><div class="mw-parser-output">&nbsp;</div> </div> </div> <div class="mw-parser-output">&nbsp;</div> </div><br />
<br />
<div class="mw-parser-output"><br />
== Механика передачи энергии ==<br />
<br />
Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого подобные механизмы объединяются в энергосети. Энергосети - это программные объекты, которые передают энергию к подключенным к ним механизмам или другим энергосетям. Энергия передаётся пакетами с определённым количеством энергии и напряжением.<br />
<br />
Энергосети формируются следующим образом:<br/> Для каждого блока генератора создаётся своя энергосеть, соединяющая его с подключенными к нему машинами-потребителями и энергосетями проводов. Энергосети проводов объединяют блоки с одним ид и соединяются с другими сетями того же типа энергии и машинами-потребителями энергии. Такая система позволяет разбивать провода по размеру пакета энергии, который они могут передать. Напряжение пакета энергии по умолчанию равно размеру пакета, но может быть установлено при его добавлении, что позволяет передавать по проводам пакеты размером больше их лимита.<br />
</div> <div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output">&nbsp;</div> </div> </div> </div></div><br />
<br />
== Привязка типов энергии к TileEntity ==<br />
<br />
''EnergyTileRegistry.addEnergyTypeForId(tileEntityId, energyType)'' - добавляет tile entity с данным id дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.<br/> <u>Параметры:</u><br />
<br />
*''tileEntityId'' – id блока, на который был зарегистрирован нужный tile entity. <br />
*''energyType'' - тип энергии, который требуется к нему привязать. <br />
<br />
Новые события:<br />
<br />
*''energyTick: function(type, src) { /* … */ }'' - вызывается каждый тик после функции tick для каждой энергосети, привязанной к данному tile entity.<br/> Параметры: <br />
**''type'' - название типа энергии, для которого вызвано это событие. <br />
**src - объект типа [[InnerCore/Libs/EnergyNet#Объект_EnergySource|EnergySource]] для добавления энергии <br />
*''energyReceive: function(type, amount, voltage) { /* … */ }'' – вызывается при приёме пакета энергии данным tile entity. Должна возвращать количество энергии, которое удалось добавить.<br/> Параметры: <br />
**''type'' - название типа энергии <br />
**''amount'' – количество энергии <br />
**''voltage'' – напряжение энергии <br />
*''isEnergySource: function(type) {return true;}'' – определяет, может ли tile entity вырабатывать энергию данного типа. Если да, то для него строится энергосеть. <br />
*''canReceiveEnergy: function(side, type) {return true/false;}'' – определяет, может ли tile entity получать энергию даного типа и с каких сторон. Вызывается при попытке соединения tile entity к энергосети. <br />
*''canExtractEnergy: function(side, type) {return true/false;}'' – определяет, с каких сторон tile entity может выдавать энергию. <br />
</div> <br />
== Объект EnergySource ==<br />
<br />
Данный объект является интерфейсом для добавления энергии в сеть, который передается в события для работы с энергией (src).<br/> <u>Методы:</u><br />
<br />
*''src.add(amount, voltage)'' - добавляет в сеть данное кол-во энергии ''(amount)'', возвращает, какое кол-во энергии добавить не удалось из-за переполнения (0, если вся энергия добавлена). Если значение ''voltage'' (напряжение) не указано, то оно будет равно ''amount''. <br />
*''src.addAll(amount, voltage)'' - аналогичен методу ''add'', но ничего не возвращает и работает быстрее, потому что добавляет энергию в буфер сети, позволяя объединять в один пакет множество пакетов, созданных генераторами. <br />
</div> <div class="mw-parser-output"><div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
== Работа с энегергетическими сетями ==<br />
<br />
Большая часть методов из модуля EnergyNetBuilder технические и используются только внутри библиотеки. Однако некоторые из них могут быть полезны и в модах:<br />
<br />
''EnergyNetBuilder.rebuildTileNet(объект tile entity)'' – удаляет все энергосети механизма и перестраивает все его соединения с другими сетями. Необходимо вызвать при изменении сторон, через которые tile entity может получать или передавать энергию.<br />
<br />
''EnergyNetBuilder.getNetOnCoords(x, y, z)'' – возвращает сеть, если на данных координатах есть её провод. Используется в IndustrialCraft для нанесения урона от оголённых проводов и для мультиметра.<br />
''EnergyNetBuilder.getNetByBlock(x, y, z, wireId)'' – возвращает сеть, если блок на данных координатах имеет ид, указанное в параметре wireId.</div> <div class="mw-parser-output">&nbsp;</div> </div></div><br />
<br />
== Примеры ==<br />
<br />
=== Генератор ===<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет выробатывать энергию.<br />
TileEntity.registerPrototype(BlockID.RFgenerator, {<br />
isEnergySource: function() {<br />
return true; // может генерировать энергию<br />
},<br />
canReceiveEnergy: function(){<br />
return false; // не может получать энергию<br />
},<br />
energyTick: function(type, src) {<br />
src.addAll(10); // генерирует 10 RF за тик. Так как сразу отдаёт всю энергию, используется более быстрый метод.<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFgenerator, energyRF);</syntaxhighlight><br />
<div class="mw-parser-output"><br />
=== Потребитель ===<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFconsumer", который будет потреблять энергию для производства алмазов.<br />
TileEntity.registerPrototype(BlockID.RFconsumer, {<br />
defaultValues: {<br />
progress: 0 // сохраняемое значение прогресса работы<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
this.data.progress += amount; // увеличиваем прогресс производства алмаза.<br />
return amount; // и возвращаем сколько забрали энергии<br />
},<br />
tick: function(){<br />
if(this.data.progress >= 10000){<br />
this.data.progress = 0;<br />
World.drop(this.x, this.y +1, this.z, 264, 1); // дропнуть алмаз на координатах tile entity.<br />
}<br />
}<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRF);</syntaxhighlight><br />
<div class="mw-parser-output">&nbsp;</div> </div> <div class="mw-parser-output"><br />
=== Хранилище ===<br />
<br />
Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе энергия между двумя&nbsp;связанных друг с другом механизмами могут бесконечно обмениваться энергией друг с другом, игнорируя другие tile enity.<br />
<syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху.<br />
TileEntity.registerPrototype(BlockID.RFstorage, {<br />
defaultValues: {<br />
energy: 0 // сохраняемое значение, обозначающее запасенную энергию<br />
},<br />
isEnergySource: function() {<br />
return true; // блок может отдавать энергию<br />
}<br />
canReceiveEnergy: function(side, type) {<br />
return side != 0; // side != 0 выведет true, если сторона любая, кроме нижней.<br />
} ,<br />
canExtractEnergy: function(side, type) {<br />
return side == 0; // выведет true при подключении блока для выхода энергии с нижней стороны.<br />
},<br />
getCapacity: function(){<br />
return 2e6; // установим лимит хранилища энергии в 2 миллиона (2e6 - это способ записи числа 2000000)<br />
},<br />
energyReceive: function(type, amount, voltage) {<br />
amount = Math.min(amount, 1000); // устанавлимаем максимальное количество энергии, которое может принять механизм равным 1000.<br />
var add = Math.min(amount, this.getCapacity() - this.data.energy); // уменьшаем количество энергии, так, чтобы хранилище не переполнялось;<br />
this.data.energy += add; // добавляем энергию в хранилище<br />
return add; // и возвращаем сколько забрали энергии<br />
},<br />
energyTick: function(type, src){<br />
var output = Math.min(1000, this.data.energy); // определяем, сколько энергии блок может отдать<br />
this.data.energy += src.add(output) - output; // прибавляем к хранилищу количество энергии, которое осталось после отправки пакета, и вычитаем сколько отправляли.<br />
},<br />
});<br />
<br />
// привяжем к этому tile entity наш тип энергии<br />
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRF);</syntaxhighlight><br />
</div> </div> </div> </div> </div> </div> </div> </div> </div></div></div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/StorageInterface&diff=2597InnerCore/Libs/StorageInterface2021-04-08T17:00:45Z<p>MineExplorer: </p>
<hr />
<div><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"><br />
== Загрузка ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Версия<br />
| style="width: 36px;" | Ссылка<br />
| style="width: 393px;" | Список изменений<br />
| style="width: 250px;" | Дата релиза<br />
|-<br />
| '''11'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v11 Скачать]<br />
| style="width: 393px;" | <br />
*Библиотека поддерживает&nbsp;предметы с отрицательными ид <br />
*В интерфейс хранилища добавлены следующие поля:<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 <br />
<br />
| style="width: 250px;" | 01.04.2021<br />
|-<br />
| '''10'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v10 Скачать]<br />
| style="width: 393px;" | <br />
*Метод newStorage переименован в getInterface <br />
*Исправлен стак предметов при использовании функций валидации и макс. стака в ItemContainer из библиотеки <br />
<br />
| style="width: 250px;" | 09.01.2021<br />
|-<br />
| '''9'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v9 Скачать]<br />
| style="width: 393px;" | <br />
*Новые методы для интерфейсов хранилищ:<br/> - getContainerSlots()<br/> -&nbsp;getInputSlots(side)<br/> -&nbsp;getReceivingItemCount(item, side)<br/> -&nbsp;addItemToSlot(name, item, maxCount)<br/> -&nbsp;clearContainer() <br />
*Исправлен стандартный интерфейс TIleEntity <br />
<br />
| style="width: 250px;" | 14.12.2020<br />
|-<br />
| '''8'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v8 Скачать]<br />
| style="width: 393px;" | <br />
*Поддержка мультиплеера <br />
*Добавлены стандартные интерфейсы для всех видов контейнеров <br />
*Добавлены методы для получение интерфейсов хранилищ <br />
*Добавлены методы для установки валидации предметов и макс стака&nbsp;слотов в ItemContainer <br />
<br />
| style="width: 250px;" | 10.12.2020<br />
|-<br />
| '''7'''<br />
| style="text-align: center; width: 36px;" | -<br />
| style="width: 393px;" | <br />
- В описании слота в интерфейсе хранилища теперь можно указать стороны, через которые с ним можно взаимодействовать<br />
<br />
| style="width: 250px;" | 10.06.2020<br />
|-<br />
| '''6'''<br />
| style="width: 36px;" | [https://yadi.sk/d/TITakdpdsjIGug Скачать]<br />
| style="width: 393px;" | - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров.<br />
| style="width: 250px;" | 18.04.2020<br />
|-<br />
| '''5'''<br />
| style="width: 36px;" | [https://yadi.sk/d/Om5TRGdlhylfQA Скачать]<br />
| style="width: 393px;" | - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid<br />
| style="width: 250px;" | 09.03.2020<br />
|-<br />
| '''4'''<br />
| style="width: 36px;" | [https://yadi.sk/d/1gBu4a-fEme-jA Скачать]<br />
| style="width: 393px;" | <br />
*Улучшена работа с жидкостями <br />
*В интерфейс добавлено поле liquidStorage <br />
<br />
| style="width: 250px;" | 05.03.2020<br />
|-<br />
| '''3'''<br />
| style="width: 36px;" | [https://drive.google.com/file/d/1Hsp2nLIER0wF-ZzDvdsy1btxWFhnebv1/view?usp=sharing Скачать]<br />
| style="width: 393px;" | - Релиз библиотеки<br />
| style="width: 250px;" | 02.02.2020<br />
|}<br />
</div> <div class="mw-parser-output">&nbsp;</div> </div> </div> </div> </div> <br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IC_Libraries/blob/master/library/StorageInterface.js StorageInterface.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).<br />
<br />
Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<pre>IMPORT("StorageInterface");<br />
</pre><br />
<br />
== Интерфейсы хранилищ блоков ==<br />
<br />
Интерфейсы хранилищ объединяют в себе функции для работы с контейнерами и хранилищем жидкости и позволяют описать логику передачи предметов и жидкостей. В библиотеке есть стандартные интерфейсы для ванильных контейнеров и TileEntity, но вы можете зарегистрировать свой собственный для вашего TileEntity.<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Регистрация интерфейса&nbsp;хранилища ===<br />
<br />
''StorageInterface.createInterface(id блока, прототип интерфейса).''<br />
<br />
Все параметры слотов и функции прототипа интерфейса опциональны.<br/> Прототип интерфейса выглядит так:<br />
<syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, {<br />
slots: {<br />
"slot1": {<br />
input: boolean, // может ли слот принимать предметы<br />
output: boolean, // может ли слот отдавать предметы<br />
// Сторона блока, через которую доступен слот.<br />
// Значение - число или одна из настроек: "horizontal", "verctical", "down", "up".<br />
side: int | string,<br />
// Максимальное количество предметов в слоте<br />
maxStack: int,<br />
// Может ли слот принять предмет item со стороны side<br />
isValid: function(item, side, tileEntity) {<br />
return boolean;<br />
},<br />
// Можно ли извлечь предмет из слота (item - предмет в слоте)<br />
canOutput: function(item, side, tileEntity) {<br />
return boolean;<br />
}<br />
},<br />
// Все слоты с именем slot и индексами от 2 до 10 (slot2, ..., slot10).<br />
"slot^2-10": {<br />
...<br />
},<br />
...<br />
},<br />
liquidUnitRatio: 1, // количество вёдер жидкости в базовом юните жидкости<br />
// функции интерфейса<br />
});</syntaxhighlight><br />
</div> </div> <br />
=== <br/> Функции интерфейса хранилища ===<br />
<br />
Интерфейс хранилища обладает следующими функциями. Вы можете заменить их на свои в прототипе интерфейса при регистрации.<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Название<br />
| Аргументы<br />
| Описание<br />
|-<br />
| '''getSlot'''<br />
| name<br />
| Возвращает слот контейнера.<br />
|-<br />
| '''setSlot'''<br />
| name, id, count, data, extra<br />
| Устанавливает предмет в слот контейнера.<br />
|-<br />
| '''isValidInput'''<br />
| item, side, tileEntity<br />
| Аналогична функции isValid слота, но действует на все слоты контейнера. По умолчанию возвращает true.<br />
|-<br />
| '''addItem'''<br />
| item, side, maxCount<br />
| Функция добавления предмета. Возвращает количество добавленных предметов.<br />
|-<br />
| '''addItemToSlot'''<br />
| name, item, maxCount<br />
| Добавляет предмет в слот контейнера, maxCount - максимальное количество предмета, которое будет добавлено.<br />
|-<br />
| <br />
'''getReceivingItemCount'''<br />
<br />
| item, side<br />
| Возвращает сколько предметов из стака контейнер может принять.<br />
|-<br />
| <br />
'''getContainerSlots'''<br />
<br />
| -<br />
| Возвращает все слоты контейнера<br />
|-<br />
| '''getInputSlots'''<br />
| side<br />
| Возвращяет названия слотов входа,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''getOutputSlots'''<br />
| side<br />
| Возвращает названия слотов выхода,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''clearContainer'''<br />
| -<br />
| Очищает содержимое контейнера<br />
|-<br />
| '''canReceiveLiquid'''<br />
| liquid, side<br />
| Может ли&nbsp;TileEntity принять жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''canTransportLiquid'''<br />
| liquid, side<br />
| Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''.&nbsp;По умолчанию возвращает true.<br />
|-<br />
| '''receiveLiquid'''<br />
| liquidStorage, liquid, amount<br />
| <br />
Функция добавление жидкости в хранилище.<br/> '''liquidStorage'''&nbsp;- хранилище, принимающее жидкость<br/> '''liquid '''- название жидкости<br/> '''amount '''- количество жидкости<br />
<br />
|-<br />
| '''extractLiquid'''<br />
| liquidStorage, liquid, amount<br />
| Функция извлечения жидкости из хранилища.<br />
|-<br />
| '''getInputTank'''<br />
| side<br />
| <br />
Возвращает входное&nbsp;хранилище жидкости TileEntity. По умолчанию возвращает&nbsp;liquidStorage.<br/> '''side&nbsp;'''- сторона с которой будет производиться работа<br />
<br />
|-<br />
| '''getOutputTank'''<br />
| side<br />
| <br />
Возвращает выходное хранилище жидкости TileEntity.&nbsp;По умолчанию возвращает&nbsp;liquidStorage.<br/> '''side&nbsp;'''- сторона с которой будет производиться работа<br />
<br />
|}<br />
<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, {<br />
slots: {<br />
"slotSource": {<br />
input: true,<br />
side: "up",<br />
isValid: function(item, side){<br />
return Recipes.getFurnaceRecipeResult(item.id, "iron");<br />
}<br />
},<br />
"slotFuel": {<br />
input: true,<br />
side: "horizontal",<br />
isValid: function(item, side){<br />
return Recipes.getFuelBurnDuration(item.id, item.data) > 0;<br />
}<br />
},<br />
"slotResult": {output: true}<br />
}<br />
});</syntaxhighlight><br />
<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"><br />
=== Методы для получения&nbsp;интерфесов хранилищ ===<br />
<br />
*'''StorageInterface.getInterface('''''container ''или ''tileEntity''''')''' - возвращает интерфейс хранилища для TileEntity или контейнера. <br />
*'''StorageInterface.getStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища для контейнера на координатах <br />
*'''StorageInterface.getLiquidStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс для TileEntity,&nbsp;хранящего жидкости,&nbsp;по&nbsp;координатам. <br />
*'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side. <br />
*'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс для соседнего TileEntity, хранящего жидкости,&nbsp;со стороны side <br />
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <br />
== Остальные методы StorageInterface ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| style="width: 178px;" | Название<br />
| style="width: 114px;" | Аргументы<br />
| style="width: 458px;" | Описание<br />
|-<br />
| style="width: 178px;" | '''getNearestContainers'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Возвращает соседние контейнеры относительно блока на координатах ''coords ''в виде объекта, где ключами являются стороны блока.<br />
|-<br />
| style="width: 178px;" | '''getNearestLiquidStorages'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Работает аналогично предыдущему, но возвращает интерфейсы хранилищ для всех соседних TileEntity, имеющих хранилища жидкостей.<br />
|-<br />
| style="width: 178px;" | '''putItems'''<br />
| style="width: 114px;" | items, containers<br />
| style="width: 458px;" | Добавляет предметы из массива items в контейнеры из объекта, возвращаемого методом&nbsp;''getNearestContainers'''''.'''<br />
|-<br />
| style="width: 178px;" | '''putItemToContainer'''<br />
| style="width: 114px;" | item, container, side, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов в контейнер.<br/> '''maxCount '''- максимальное количество предметов, которое может быть передано за раз&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromContainer'''<br />
| style="width: 114px;" | inputСontainer , outputContainer, side, maxCount, oneStack<br />
| style="width: 458px;" | <br />
Позволяет извлечь предмет из контейнера и добавить его в tile entity или контейнер.<br/> '''inputStorage&nbsp;'''- TileEntity или контейнер, в который будут добавлены предметы<br/> '''outputContainer '''- контейнер, из которого будут извлечены предметы<br/> '''maxCount '''- сколько предметов может быть извлечено (по умолчанию не ограничено)<br/> '''oneStack '''- если true, то извлечёт&nbsp;только один стак предметов.<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromStorage'''<br />
| style="width: 114px;" | inputStorage, outputStorage, side, maxCount, oneStack<br />
| style="width: 458px;" | Аналогичен предыдущему, но принимает аргументами интерфейсы хранилищ.<br />
|-<br />
| style="width: 178px;" | '''transportLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, outputStorage, inputStorage, outputSide<br />
| style="width: 458px;" | <br />
Передаёт жидкость из одного TileEntity в другой.<br/> '''liquid&nbsp;'''- название жидкости<br/> '''maxAmount&nbsp;'''- максимальное количество, которое будет передано<br/> '''outputStorage&nbsp;'''- интерфейс хранилища или TileEntity, из которого будет передана жидкость<br/> '''inputStorage&nbsp;'''- интерфейс хранилища, принимающего жидкость<br/> '''outputSide&nbsp;'''- сторона блока, через которую передаётся жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, inputStorage, outputStorage, inputSide<br />
| style="width: 458px;" | <br />
Похож на предыдущий, но позволяет извлечь жидкость из TileEntity<br/> '''liquid '''- название жидкости. Если не указано, то извлечёт любую жидкость&nbsp;из&nbsp;''outputStorage'',&nbsp;если она может быть принята в&nbsp;''inputStorage.''<br/> '''inputStorage&nbsp;'''- интерфейс хранилища или TileEntity,&nbsp;принимающий жидкость<br/> '''outputStorage&nbsp;'''- интерфейс хранилища, из которого будет извлечена жидкость<br/> '''inputSide '''- сторона блока, которая будет принимать жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''checkHoppers'''<br />
| style="width: 114px;" | tileEntity<br />
| style="width: 458px;" | Позволяет TileEntity взаимодействовать с воронками. Для этого должен вызываться в функции тика TileEntity .<br />
|-<br />
| style="width: 178px;" | '''addItemToSlot'''<br />
| style="width: 114px;" | item, slot, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов&nbsp;в слот. Изменяет только объект слота, для корректной работы требуется установить слот через&nbsp;''container.setSlot.''<br/> '''maxCount '''- максимальное количество, которое будет передано в слот&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|}<br />
</div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/StorageInterface&diff=2596InnerCore/Libs/StorageInterface2021-04-08T16:33:54Z<p>MineExplorer: Добавлена 11-я версия</p>
<hr />
<div>Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью&nbsp;интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей.<br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
== Загрузка ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Версия<br />
| style="width: 36px;" | Ссылка<br />
| style="width: 393px;" | Список изменений<br />
| style="width: 250px;" | Дата релиза<br />
|-<br />
| '''11'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v11 Скачать]<br />
| style="width: 393px;" | <br />
*Библиотека поддерживает&nbsp;предметы с отрицательными ид <br />
*В интерфейс хранилища добавлены следующие поля:<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 <br />
<br />
| style="width: 250px;" | 01.04.2021<br />
|-<br />
| '''10'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v10 Скачать]<br />
| style="width: 393px;" | <br />
*Метод newStorage переименован в getInterface <br />
*Исправлен стак предметов при использовании функций валидации и макс. стака в ItemContainer из библиотеки <br />
<br />
| style="width: 250px;" | 09.01.2021<br />
|-<br />
| '''9'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v9 Скачать]<br />
| style="width: 393px;" | <br />
*Новые методы для интерфейсов хранилищ:<br/> - getContainerSlots()<br/> -&nbsp;getInputSlots(side)<br/> -&nbsp;getReceivingItemCount(item, side)<br/> -&nbsp;addItemToSlot(name, item, maxCount)<br/> -&nbsp;clearContainer() <br />
*Исправлен стандартный интерфейс TIleEntity <br />
<br />
| style="width: 250px;" | 14.12.2020<br />
|-<br />
| '''8'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v8 Скачать]<br />
| style="width: 393px;" | <br />
*Поддержка мультиплеера <br />
*Добавлены стандартные интерфейсы для всех видов контейнеров <br />
*Добавлены методы для получение интерфейсов хранилищ <br />
*Добавлены методы для установки валидации предметов и макс стака&nbsp;слотов в ItemContainer <br />
<br />
| style="width: 250px;" | 10.12.2020<br />
|-<br />
| '''7'''<br />
| style="text-align: center; width: 36px;" | -<br />
| style="width: 393px;" | <br />
- В описании слота в интерфейсе хранилища теперь можно указать стороны, через которые с ним можно взаимодействовать<br />
<br />
| style="width: 250px;" | 10.06.2020<br />
|-<br />
| '''6'''<br />
| style="width: 36px;" | [https://yadi.sk/d/TITakdpdsjIGug Скачать]<br />
| style="width: 393px;" | - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров.<br />
| style="width: 250px;" | 18.04.2020<br />
|-<br />
| '''5'''<br />
| style="width: 36px;" | [https://yadi.sk/d/Om5TRGdlhylfQA Скачать]<br />
| style="width: 393px;" | - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid<br />
| style="width: 250px;" | 09.03.2020<br />
|-<br />
| '''4'''<br />
| style="width: 36px;" | [https://yadi.sk/d/1gBu4a-fEme-jA Скачать]<br />
| style="width: 393px;" | <br />
*Улучшена работа с жидкостями <br />
*В интерфейс добавлено поле liquidStorage <br />
<br />
| style="width: 250px;" | 05.03.2020<br />
|-<br />
| '''3'''<br />
| style="width: 36px;" | [https://drive.google.com/file/d/1Hsp2nLIER0wF-ZzDvdsy1btxWFhnebv1/view?usp=sharing Скачать]<br />
| style="width: 393px;" | - Релиз библиотеки<br />
| style="width: 250px;" | 02.02.2020<br />
|}<br />
</div> <div class="mw-parser-output">&nbsp;</div> </div></div></div></div><br />
<br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IC_Libraries/blob/master/library/StorageInterface.js StorageInterface.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).<br />
<br />
Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<pre>IMPORT("StorageInterface");<br />
</pre><br />
<div class="mw-parser-output">&nbsp;</div> </div><br />
<br />
== Интерфейсы хранилищ блоков ==<br />
<br />
Интерфейсы хранилищ объединяют в себе функции для работы с контейнерами и хранилищем жидкости и позволяют описать логику передачи предметов и жидкостей. В библиотеке есть стандартные интерфейсы для ванильных контейнеров и TileEntity, но вы можете зарегистрировать свой собственный для вашего TileEntity.<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Регистрация интерфейса&nbsp;хранилища ===<br />
<br />
''StorageInterface.createInterface(id блока, прототип интерфейса).''<br />
<br />
Все параметры слотов и функции прототипа интерфейса опциональны.<br/> Прототип интерфейса выглядит так:<br />
<syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, {<br />
slots: {<br />
"slot1": {<br />
input: boolean, // может ли слот принимать предметы<br />
output: boolean, // может ли слот отдавать предметы<br />
// Сторона блока, через которую доступен слот.<br />
// Значение - число или одна из настроек: "horizontal", "verctical", "down", "up".<br />
side: int | string,<br />
// Максимальное количество предметов в слоте<br />
maxStack: int,<br />
// Может ли слот принять предмет item со стороны side<br />
isValid: function(item, side, tileEntity) {<br />
return boolean;<br />
},<br />
// Можно ли извлечь предмет из слота (item - предмет в слоте)<br />
canOutput: function(item, side, tileEntity) {<br />
return boolean;<br />
}<br />
},<br />
// Означает все слоты с индексами от 2 до 10 (slot2, slot3, ..., slot10).<br />
"slot^2-10": {<br />
...<br />
},<br />
...<br />
},<br />
// функции интерфейса<br />
});</syntaxhighlight><br />
</div> </div> <br />
=== <br/> Функции интерфейса хранилища ===<br />
<br />
Интерфейс хранилища обладает следующими функциями. Вы можете заменить их на свои в прототипе интерфейса при регистрации.<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Название<br />
| Аргументы<br />
| Описание<br />
|-<br />
| '''getSlot'''<br />
| name<br />
| Возвращает слот контейнера.<br />
|-<br />
| '''setSlot'''<br />
| name, id, count, data, extra<br />
| Устанавливает предмет в слот контейнера.<br />
|-<br />
| '''isValidInput'''<br />
| item, side, tileEntity<br />
| Аналогична функции isValid слота, но действует на все слоты контейнера. По умолчанию возвращает true.<br />
|-<br />
| '''addItem'''<br />
| item, side, maxCount<br />
| Функция добавления предмета. Возвращает количество добавленных предметов.<br />
|-<br />
| '''addItemToSlot'''<br />
| name, item, maxCount<br />
| Добавляет предмет в слот контейнера, maxCount - максимальное количество предмета, которое будет добавлено.<br />
|-<br />
| <br />
'''getReceivingItemCount'''<br />
<br />
| item, side<br />
| Возвращает сколько предметов из стака контейнер может принять.<br />
|-<br />
| <br />
'''getContainerSlots'''<br />
<br />
| -<br />
| Возвращает все слоты контейнера<br />
|-<br />
| '''getInputSlots'''<br />
| side<br />
| Возвращяет названия слотов входа,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''getOutputSlots'''<br />
| side<br />
| Возвращает названия слотов выхода,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''clearContainer'''<br />
| -<br />
| Очищает содержимое контейнера<br />
|-<br />
| '''canReceiveLiquid'''<br />
| liquid, side<br />
| Может ли&nbsp;TileEntity принять жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''canTransportLiquid'''<br />
| liquid, side<br />
| Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''.&nbsp;По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''addLiquid'''<br />
| liquid, amount<br />
| Функция добавление жидкости. По умолчанию работает с liquidStorage.<br />
|-<br />
| '''getLiquid'''<br />
| liquid, amount<br />
| Функция извлечения жидкости.&nbsp;По умолчанию работает с liquidStorage.<br />
|-<br />
| '''getLiquidStored'''<br />
| storageName<br />
| <br />
Функция получения жидкости, хранящейся в tile entity. Позволяет возвращать разные жидкости для входа и выхода.<br/> '''storageName''' - "input" для получения жидкости на вход и "output" для жидкости на выход.<br />
<br />
|-<br />
| '''getLiquidStorage'''<br />
| storageName<br />
| <br />
Возвращает хранилище жидкости.&nbsp;По умолчанию возвращает liquidStorage из TileEntity. Позволяет использовать альтернативные&nbsp;хранилища жидкостей.<br/> '''storageName''' - "input" для хранилища, принимающего жидкость, и "output" для отдающего.<br />
<br />
|}<br />
<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, {<br />
slots: {<br />
"slotSource": {<br />
input: true,<br />
side: "up",<br />
isValid: function(item, side){<br />
return Recipes.getFurnaceRecipeResult(item.id, "iron");<br />
}<br />
},<br />
"slotFuel": {<br />
input: true,<br />
side: "horizontal",<br />
isValid: function(item, side){<br />
return Recipes.getFuelBurnDuration(item.id, item.data) > 0;<br />
}<br />
},<br />
"slotResult": {output: true}<br />
}<br />
});</syntaxhighlight><br />
<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"><br />
=== Методы для получения&nbsp;интерфесов хранилищ ===<br />
<br />
*'''StorageInterface.newStorage('''''container ''или ''tileEntity''''')''' - возвращает новый интерфейс хранилища для TileEntity или контейнера. <br />
*'''StorageInterface.getStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища для блока, являющегося контейнером. <br />
*'''StorageInterface.getLiquidStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища, если на указанных координатах находится TileEntity с хранилищем жидкости. <br />
*'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side. <br />
*'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side,&nbsp;если там находится TileEntity с хранилищем жидкости. <br />
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <br />
== Остальные методы StorageInterface ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| style="width: 178px;" | Название<br />
| style="width: 114px;" | Аргументы<br />
| style="width: 458px;" | Описание<br />
|-<br />
| style="width: 178px;" | '''getNearestContainers'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Возвращает соседние контейнеры относительно блока на координатах ''coords ''в виде объекта, где ключами являются стороны блока.<br />
|-<br />
| style="width: 178px;" | '''getNearestLiquidStorages'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Работает аналогично предыдущему, но возвращает интерфейсы хранилищ для всех соседних TileEntity, имеющих хранилища жидкостей.<br />
|-<br />
| style="width: 178px;" | '''putItems'''<br />
| style="width: 114px;" | items, containers<br />
| style="width: 458px;" | Добавляет предметы из массива items в контейнеры из объекта, возвращаемого методом&nbsp;''getNearestContainers'''''.'''<br />
|-<br />
| style="width: 178px;" | '''putItemToContainer'''<br />
| style="width: 114px;" | item, container, side, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов в контейнер.<br/> '''maxCount '''- максимальное количество предметов, которое может быть передано за раз&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromContainer'''<br />
| style="width: 114px;" | inputСontainer , outputContainer, side, maxCount, oneStack<br />
| style="width: 458px;" | <br />
Позволяет извлечь предмет из контейнера и добавить его в tile entity или контейнер.<br/> '''inputStorage&nbsp;'''- TileEntity или контейнер, в который будут добавлены предметы<br/> '''outputContainer '''- контейнер, из которого будут извлечены предметы<br/> '''maxCount '''- сколько предметов может быть извлечено (по умолчанию не ограничено)<br/> '''oneStack '''- если true, то извлечёт&nbsp;только один стак предметов.<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromStorage'''<br />
| style="width: 114px;" | inputStorage, outputStorage, side, maxCount, oneStack<br />
| style="width: 458px;" | Аналогичен предыдущему, но принимает аргументами интерфейсы хранилищ.<br />
|-<br />
| style="width: 178px;" | '''transportLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, outputStorage, inputStorage, outputSide<br />
| style="width: 458px;" | <br />
Передаёт жидкость из одного TileEntity в другой.<br/> '''liquid&nbsp;'''- название жидкости<br/> '''maxAmount&nbsp;'''- максимальное количество, которое будет передано<br/> '''outputStorage&nbsp;'''- интерфейс хранилища или TileEntity, из которого будет передана жидкость<br/> '''inputStorage&nbsp;'''- интерфейс хранилища, принимающего жидкость<br/> '''outputSide&nbsp;'''- сторона блока, через которую передаётся жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, inputStorage, outputStorage, inputSide<br />
| style="width: 458px;" | <br />
Похож на предыдущий, но позволяет извлечь жидкость из TileEntity<br/> '''liquid '''- название жидкости. Если не указано, то извлечёт любую жидкость&nbsp;из&nbsp;''outputStorage'',&nbsp;если она может быть принята в&nbsp;''inputStorage.''<br/> '''inputStorage&nbsp;'''- интерфейс хранилища или TileEntity,&nbsp;принимающий жидкость<br/> '''outputStorage&nbsp;'''- интерфейс хранилища, из которого будет извлечена жидкость<br/> '''inputSide '''- сторона блока, которая будет принимать жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''checkHoppers'''<br />
| style="width: 114px;" | tileEntity<br />
| style="width: 458px;" | Позволяет TileEntity взаимодействовать с воронками. Для этого должен вызываться в функции тика TileEntity .<br />
|-<br />
| style="width: 178px;" | '''addItemToSlot'''<br />
| style="width: 114px;" | item, slot, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов&nbsp;в слот. Изменяет только объект слота, для корректной работы требуется установить слот через&nbsp;''container.setSlot.''<br/> '''maxCount '''- максимальное количество, которое будет передано в слот&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|}</div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/StorageInterface&diff=2592InnerCore/Libs/StorageInterface2021-01-13T17:00:36Z<p>MineExplorer: </p>
<hr />
<div>Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью&nbsp;интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей.<br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
== Загрузка ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Версия<br />
| style="width: 36px;" | Ссылка<br />
| style="width: 393px;" | Список изменений<br />
| style="width: 250px;" | Дата релиза<br />
|-<br />
| '''10'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v10 Скачать]<br />
| style="width: 393px;" | <br />
*Метод newStorage переименован в getInterface <br />
*Исправлен стак предметов при использовании функций валидации и макс. стака в ItemContainer из библиотеки <br />
<br />
| style="width: 250px;" | 09.01.2021<br />
|-<br />
| '''9'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v9 Скачать]<br />
| style="width: 393px;" | <br />
*Новые методы для интерфейсов хранилищ:<br/> - getContainerSlots()<br/> -&nbsp;getInputSlots(side)<br/> -&nbsp;getReceivingItemCount(item, side)<br/> -&nbsp;addItemToSlot(name, item, maxCount)<br/> -&nbsp;clearContainer() <br />
*Исправлен стандартный интерфейс TIleEntity <br />
<br />
| style="width: 250px;" | 14.12.2020<br />
|-<br />
| '''8'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v8 Скачать]<br />
| style="width: 393px;" | <br />
*Поддержка мультиплеера <br />
*Добавлены стандартные интерфейсы для всех видов контейнеров <br />
*Добавлены методы для получение интерфейсов хранилищ <br />
*Добавлены методы для установки валидации предметов и макс стака&nbsp;слотов в ItemContainer <br />
<br />
| style="width: 250px;" | 10.12.2020<br />
|-<br />
| '''7'''<br />
| style="text-align: center; width: 36px;" | -<br />
| style="width: 393px;" | <br />
- В описании слота в интерфейсе хранилища теперь можно указать стороны, через которые с ним можно взаимодействовать<br />
<br />
| style="width: 250px;" | 10.06.2020<br />
|-<br />
| '''6'''<br />
| style="width: 36px;" | [https://yadi.sk/d/TITakdpdsjIGug Скачать]<br />
| style="width: 393px;" | - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров.<br />
| style="width: 250px;" | 18.04.2020<br />
|-<br />
| '''5'''<br />
| style="width: 36px;" | [https://yadi.sk/d/Om5TRGdlhylfQA Скачать]<br />
| style="width: 393px;" | - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid<br />
| style="width: 250px;" | 09.03.2020<br />
|-<br />
| '''4'''<br />
| style="width: 36px;" | [https://yadi.sk/d/1gBu4a-fEme-jA Скачать]<br />
| style="width: 393px;" | <br />
*Улучшена работа с жидкостями <br />
*В интерфейс добавлено поле liquidStorage <br />
<br />
| style="width: 250px;" | 05.03.2020<br />
|-<br />
| '''3'''<br />
| style="width: 36px;" | [https://drive.google.com/file/d/1Hsp2nLIER0wF-ZzDvdsy1btxWFhnebv1/view?usp=sharing Скачать]<br />
| style="width: 393px;" | - Релиз библиотеки<br />
| style="width: 250px;" | 02.02.2020<br />
|}<br />
</div> <div class="mw-parser-output">&nbsp;</div> </div></div><br />
<br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IC_Libraries/blob/master/library/StorageInterface.js StorageInterface.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).<br />
<br />
Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<pre>IMPORT("StorageInterface");<br />
</pre><br />
<div class="mw-parser-output">&nbsp;</div> </div><br />
<br />
== Интерфейсы хранилищ блоков ==<br />
<br />
Интерфейсы хранилищ объединяют в себе функции для работы с контейнерами и хранилищем жидкости и позволяют описать логику передачи предметов и жидкостей. В библиотеке есть стандартные интерфейсы для ванильных контейнеров и TileEntity, но вы можете зарегистрировать свой собственный для вашего TileEntity.<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Регистрация интерфейса&nbsp;хранилища ===<br />
<br />
''StorageInterface.createInterface(id блока, прототип интерфейса).''<br />
<br />
Все параметры слотов и функции прототипа интерфейса опциональны.<br/> Прототип интерфейса выглядит так:<br />
<syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, {<br />
slots: {<br />
"slot1": {<br />
input: boolean, // может ли слот принимать предметы<br />
output: boolean, // может ли слот отдавать предметы<br />
// Сторона блока, через которую доступен слот.<br />
// Значение - число или одна из настроек: "horizontal", "verctical", "down", "up".<br />
side: int | string,<br />
// Максимальное количество предметов в слоте<br />
maxStack: int,<br />
// Может ли слот принять предмет item со стороны side<br />
isValid: function(item, side, tileEntity) {<br />
return boolean;<br />
},<br />
// Можно ли извлечь предмет из слота (item - предмет в слоте)<br />
canOutput: function(item, side, tileEntity) {<br />
return boolean;<br />
}<br />
},<br />
// Означает все слоты с индексами от 2 до 10 (slot2, slot3, ..., slot10).<br />
"slot^2-10": {<br />
...<br />
},<br />
...<br />
},<br />
// функции интерфейса<br />
});</syntaxhighlight><br />
</div> </div> <br />
=== <br/> Функции интерфейса хранилища ===<br />
<br />
Интерфейс хранилища обладает следующими функциями. Вы можете заменить их на свои в прототипе интерфейса при регистрации.<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Название<br />
| Аргументы<br />
| Описание<br />
|-<br />
| '''getSlot'''<br />
| name<br />
| Возвращает слот контейнера.<br />
|-<br />
| '''setSlot'''<br />
| name, id, count, data, extra<br />
| Устанавливает предмет в слот контейнера.<br />
|-<br />
| '''isValidInput'''<br />
| item, side, tileEntity<br />
| Аналогична функции isValid слота, но действует на все слоты контейнера. По умолчанию возвращает true.<br />
|-<br />
| '''addItem'''<br />
| item, side, maxCount<br />
| Функция добавления предмета. Возвращает количество добавленных предметов.<br />
|-<br />
| '''addItemToSlot'''<br />
| name, item, maxCount<br />
| Добавляет предмет в слот контейнера, maxCount - максимальное количество предмета, которое будет добавлено.<br />
|-<br />
| <br />
'''getReceivingItemCount'''<br />
<br />
| item, side<br />
| Возвращает сколько предметов из стака контейнер может принять.<br />
|-<br />
| <br />
'''getContainerSlots'''<br />
<br />
| -<br />
| Возвращает все слоты контейнера<br />
|-<br />
| '''getInputSlots'''<br />
| side<br />
| Возвращяет названия слотов входа,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''getOutputSlots'''<br />
| side<br />
| Возвращает названия слотов выхода,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''clearContainer'''<br />
| -<br />
| Очищает содержимое контейнера<br />
|-<br />
| '''canReceiveLiquid'''<br />
| liquid, side<br />
| Может ли&nbsp;TileEntity принять жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''canTransportLiquid'''<br />
| liquid, side<br />
| Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''.&nbsp;По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''addLiquid'''<br />
| liquid, amount<br />
| Функция добавление жидкости. По умолчанию работает с liquidStorage.<br />
|-<br />
| '''getLiquid'''<br />
| liquid, amount<br />
| Функция извлечения жидкости.&nbsp;По умолчанию работает с liquidStorage.<br />
|-<br />
| '''getLiquidStored'''<br />
| storageName<br />
| <br />
Функция получения жидкости, хранящейся в tile entity. Позволяет возвращать разные жидкости для входа и выхода.<br/> '''storageName''' - "input" для получения жидкости на вход и "output" для жидкости на выход.<br />
<br />
|-<br />
| '''getLiquidStorage'''<br />
| storageName<br />
| <br />
Возвращает хранилище жидкости.&nbsp;По умолчанию возвращает liquidStorage из TileEntity. Позволяет использовать альтернативные&nbsp;хранилища жидкостей.<br/> '''storageName''' - "input" для хранилища, принимающего жидкость, и "output" для отдающего.<br />
<br />
|}<br />
<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, {<br />
slots: {<br />
"slotSource": {<br />
input: true,<br />
side: "up",<br />
isValid: function(item, side){<br />
return Recipes.getFurnaceRecipeResult(item.id, "iron");<br />
}<br />
},<br />
"slotFuel": {<br />
input: true,<br />
side: "horizontal",<br />
isValid: function(item, side){<br />
return Recipes.getFuelBurnDuration(item.id, item.data) > 0;<br />
}<br />
},<br />
"slotResult": {output: true}<br />
}<br />
});</syntaxhighlight><br />
<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"><br />
=== Методы для получения&nbsp;интерфесов хранилищ ===<br />
<br />
*'''StorageInterface.newStorage('''''container ''или ''tileEntity''''')''' - возвращает новый интерфейс хранилища для TileEntity или контейнера. <br />
*'''StorageInterface.getStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища для блока, являющегося контейнером. <br />
*'''StorageInterface.getLiquidStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища, если на указанных координатах находится TileEntity с хранилищем жидкости. <br />
*'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side. <br />
*'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side,&nbsp;если там находится TileEntity с хранилищем жидкости. <br />
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <br />
== Остальные методы StorageInterface ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| style="width: 178px;" | Название<br />
| style="width: 114px;" | Аргументы<br />
| style="width: 458px;" | Описание<br />
|-<br />
| style="width: 178px;" | '''getNearestContainers'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Возвращает соседние контейнеры относительно блока на координатах ''coords ''в виде объекта, где ключами являются стороны блока.<br />
|-<br />
| style="width: 178px;" | '''getNearestLiquidStorages'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Работает аналогично предыдущему, но возвращает интерфейсы хранилищ для всех соседних TileEntity, имеющих хранилища жидкостей.<br />
|-<br />
| style="width: 178px;" | '''putItems'''<br />
| style="width: 114px;" | items, containers<br />
| style="width: 458px;" | Добавляет предметы из массива items в контейнеры из объекта, возвращаемого методом&nbsp;''getNearestContainers'''''.'''<br />
|-<br />
| style="width: 178px;" | '''putItemToContainer'''<br />
| style="width: 114px;" | item, container, side, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов в контейнер.<br/> '''maxCount '''- максимальное количество предметов, которое может быть передано за раз&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromContainer'''<br />
| style="width: 114px;" | inputСontainer , outputContainer, side, maxCount, oneStack<br />
| style="width: 458px;" | <br />
Позволяет извлечь предмет из контейнера и добавить его в tile entity или контейнер.<br/> '''inputStorage&nbsp;'''- TileEntity или контейнер, в который будут добавлены предметы<br/> '''outputContainer '''- контейнер, из которого будут извлечены предметы<br/> '''maxCount '''- сколько предметов может быть извлечено (по умолчанию не ограничено)<br/> '''oneStack '''- если true, то извлечёт&nbsp;только один стак предметов.<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromStorage'''<br />
| style="width: 114px;" | inputStorage, outputStorage, side, maxCount, oneStack<br />
| style="width: 458px;" | Аналогичен предыдущему, но принимает аргументами интерфейсы хранилищ.<br />
|-<br />
| style="width: 178px;" | '''transportLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, outputStorage, inputStorage, outputSide<br />
| style="width: 458px;" | <br />
Передаёт жидкость из одного TileEntity в другой.<br/> '''liquid&nbsp;'''- название жидкости<br/> '''maxAmount&nbsp;'''- максимальное количество, которое будет передано<br/> '''outputStorage&nbsp;'''- интерфейс хранилища или TileEntity, из которого будет передана жидкость<br/> '''inputStorage&nbsp;'''- интерфейс хранилища, принимающего жидкость<br/> '''outputSide&nbsp;'''- сторона блока, через которую передаётся жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, inputStorage, outputStorage, inputSide<br />
| style="width: 458px;" | <br />
Похож на предыдущий, но позволяет извлечь жидкость из TileEntity<br/> '''liquid '''- название жидкости. Если не указано, то извлечёт любую жидкость&nbsp;из&nbsp;''outputStorage'',&nbsp;если она может быть принята в&nbsp;''inputStorage.''<br/> '''inputStorage&nbsp;'''- интерфейс хранилища или TileEntity,&nbsp;принимающий жидкость<br/> '''outputStorage&nbsp;'''- интерфейс хранилища, из которого будет извлечена жидкость<br/> '''inputSide '''- сторона блока, которая будет принимать жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''checkHoppers'''<br />
| style="width: 114px;" | tileEntity<br />
| style="width: 458px;" | Позволяет TileEntity взаимодействовать с воронками. Для этого должен вызываться в функции тика TileEntity .<br />
|-<br />
| style="width: 178px;" | '''addItemToSlot'''<br />
| style="width: 114px;" | item, slot, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов&nbsp;в слот. Изменяет только объект слота, для корректной работы требуется установить слот через&nbsp;''container.setSlot.''<br/> '''maxCount '''- максимальное количество, которое будет передано в слот&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|}</div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/ToolLib&diff=2591InnerCore/Libs/ToolLib2020-12-27T23:49:07Z<p>MineExplorer: </p>
<hr />
<div><div class="mw-parser-output"><div class="mw-parser-output">ToolLib -&nbsp;Библиотека, предоставляющая универсальные типы инструментов и упрощающая создание инструментов. <br />
== Загрузка ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1" style="width: 579px;"<br />
|-<br />
| style="width: 68px; text-align: center;" | '''Версия'''<br />
| style="width: 81px; text-align: center;" | '''Скачать'''<br />
| style="width: 305px; text-align: center;" | '''Изменения'''<br />
| style="width: 100px; text-align: center;" | '''Дата выхода'''<br />
|-<br />
| style="width: 68px; text-align: center;" | '''23'''<br />
| style="width: 81px; text-align: center;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/toollib-v23 Скачать]<br />
| style="width: 305px;" | - Поддержка мультиплеера<br />
| style="width: 100px; text-align: center;" | 27.12.20<br />
|-<br />
| style="width: 68px; text-align: center;" | '''22'''<br />
| style="width: 81px; text-align: center;" | -<br />
| style="width: 305px;" | - Топоры могут делать обтёсанную древесину<br/> -&nbsp;Исправления ошибок<br />
| style="width: 100px; text-align: center;" | 24.08.20<br />
|-<br />
| style="width: 68px; text-align: center;" | '''21'''<br />
| style="width: 81px; text-align: center;" | -<br />
| style="width: 305px;" | - Добавлен enum&nbsp;MiningLevel<br />
| style="width: 100px; text-align: center;" | 11.07.20<br />
|}<br />
<br />
== <br/> Документация ==<br />
<br />
=== Подключение ===<br />
<br />
Чтобы подключить библиотеку, необходимо расположить файл библиотеки в папку lib в корне мода&nbsp;написать следующее в начале вашего кода:<br />
<syntaxhighlight lang="JavaScript">IMPORT("ToolLib");</syntaxhighlight><br />
<br />
После этого вам станет доступен весь функционал библиотеки.<br />
<br />
=== Добавление инструмента ===<br />
<br />
Для регистрации инструмента используется метод ToolLib.setTool(ItemID, toolMaterial, toolType)<br />
<syntaxhighlight lang="JavaScript">ToolLib.setTool(ItemID.myTool, "wood", ToolType.axe);<br />
</syntaxhighlight><br />
<br />
Так же вместо названия материала может напрямую быть передан объект с его свойствами.<br />
<br />
Для регистрации нового материала инструментов используется метод&nbsp;ToolAPI.addToolMaterial(toolMaterial, params)<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addToolMaterial("dirt", {<br />
durability: 15, // Прочность (сколько блоков можно сломать)<br />
level: 1, // Уровень инструмента - определяет, какие блоки инструмент может добыть.<br />
efficiency: 10, // Эффективность - модификатор скорости ломания блока<br />
damage: 1, // Увеличение базового урона инструмента данным материалом<br />
enchantability: 14 // Зачаровываемость, чем выше, тем более хорошие чары будут при зачаровании<br />
});<br />
</syntaxhighlight><br />
<br />
=== Уровни добычи ===<br />
<br />
Библиотека позволяет вместо чисел использовать константы для уровней блоков и инструментов:<br />
<br />
MiningLevel.STONE&nbsp;=&nbsp;1 - камень<br/> MiningLevel.IRON&nbsp;=&nbsp;2 - железная руда<br/> MiningLevel.DIAMOND&nbsp;=&nbsp;3 - алмазная руда<br/> MiningLevel.OBSIDIAN&nbsp;=&nbsp;4 - обсидиан<br />
<br />
=== Стандартные типы инструментов ===<br />
<br />
ToolType.sword - меч<br/> ToolType.shovel - лопата<br/> ToolType.pickaxe - кирка<br/> ToolType.axe - топор<br/> ToolType.hoe - мотыга<br />
<br />
=== Создание своего типа инструментов ===<br />
<br />
Тип инструмента - это объект, содержащий свойства&nbsp;и функции&nbsp;инструмента. Библиотека поддерживает все параметры инструмента, указываемые&nbsp;ToolAPI.registerTool, а также добавляет новые.&nbsp;<br />
<syntaxhighlight lang="JavaScript">ToolType.myType = {<br />
enchantType: Native.EnchantType.pickaxe, //Тип чар для инструмента<br />
damage: 2, // Базовый урон инструмента<br />
blockTypes: ["dirt", "stone", "test"], // Материалы блоков, которые может ломать инструмент<br />
useItem: function(coords, item, block, player) { // Функция клика по блоку<br />
if (item.data > 0) {<br />
Entity.setCarriedItem(player, item.id, 1, item.data - 1, item.extra); // Починить инструмент на 1<br />
}<br />
}<br />
} </syntaxhighlight><br />
<br />
=== Все методы ===<br />
<br />
// Скоро будут добавлены<br />
</div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/ToolAPI&diff=2590InnerCore/ToolAPI2020-12-27T23:44:02Z<p>MineExplorer: </p>
<hr />
<div><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output">ToolAPI - это API, позваляющий&nbsp;регистрировать инструменты и добываемые ими блоки. <br />
=== Добавление инструмента ===<br />
<br />
Для регистрации инструмента используется метод ToolAPI.registerTool(id, toolMaterial, blockMaterials, params)<br/> ''toolMaterial ''- название материала инструмента&nbsp;или объект его описания<br/> ''blockMaterials ''- массив с типами блоков, которые может добыть инструмент<br/> ''params ''- дополнительные параметры и функции инструмента<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerTool(ItemID.myPickaxe, "diamond", ["stone"], {<br />
damage: 1, // Базовый урон инструмента,<br />
brokenId: 0, // Id предмета, который установится вместо инструмента при ломании<br />
isWeapon: false, // Является ли инструмент оружием (влияет на уменьшение прочности)<br />
// Действие при ломании инструмента<br />
onBroke: function(item, player) {<br />
return false; // возврат true предотвращает ломание инструмента<br />
},<br />
// Действие при атаке<br />
onAttack: function(item, victim, attacker) {<br />
return false; // возврат true предотвращает повреждение инструмента<br />
},<br />
// Действие при разрушении блока<br />
onDestroy: function(item, coords, block, player) {<br />
return false; // возврат true предотвращает повреждение инструмента<br />
},<br />
// Расчёт времени разрушения блока инструментом<br />
calcDestroyTime: function(toolData, coords, block, params, destroyTime, enchantData) {<br />
return 0;<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
Для регистрации нового материала инструментов используется метод&nbsp;ToolAPI.addToolMaterial(toolMaterial, params)<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addToolMaterial("dirt", {<br />
durability: 15, // Прочность (сколько блоков можно сломать)<br />
level: 1, // Уровень инструмента - определяет, какие блоки инструмент может добыть.<br />
efficiency: 10, // Эффективность - модификатор скорости ломания блока<br />
damage: 1 // Урон от материала (складывается с базовым уроном)<br />
});</syntaxhighlight><br />
<br />
=== Регистрация блоков ===<br />
<br />
Для регистрации блока используется метод&nbsp;ToolAPI.registerBlockMaterial(BlockID, blockMaterial, level);<br/> ''blockMaterial ''- материал блока.<br/> ''level ''- уровень добычи<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerBlockMaterial(BlockID.myBlock, "stone", 1);<br />
</syntaxhighlight><br />
<br />
Уровни добычи блоков из майнкрафта:<br/> 1 - камень<br/> 2 - железная руда<br/> 3 - алмазная руда<br/> 4 - обсидиан<br />
<br />
По умолчанию доступны следующие материалы:<br/> "stone" - каменный,<br/> "wood" - деревянный,<br/> "dirt" - земляной,<br/> "plant" - растения,<br/> "fibre" - паутина,<br/> "unbreaking" - неломаемый<br />
<br />
Для регистрации материала блока используется метод&nbsp;ToolAPI.addBlockMaterial(blockMaterial, breakingMultiplier);<br/> ''blockMaterial ''- название материала.<br/> ''breakingMultiplier ''- модификатор времени ломания блока при добыче без подходящего инструмента.<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addBlockMaterial("test", 3);</syntaxhighlight><br />
</div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/ToolAPI&diff=2589InnerCore/ToolAPI2020-12-27T23:43:04Z<p>MineExplorer: </p>
<hr />
<div><div class="mw-parser-output"><div class="mw-parser-output">ToolAPI - это API, позваляющий&nbsp;регистрировать инструменты и добываемые ими блоки. <br />
=== Добавление инструмента ===<br />
<br />
Для регистрации инструмента используется метод ToolAPI.registerTool(id, toolMaterial, blockMaterials, params)<br/> ''toolMaterial ''- название материала инструмента&nbsp;или объект его описания<br/> ''blockMaterials ''- массив с типами блоков, которые может добыть инструмент<br/> ''params ''- дополнительные параметры и функции инструмента<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerTool(ItemID.myPickaxe, "diamond", ["stone"], {<br />
damage: 1, // Базовый урон инструмента,<br />
brokenId: 0, // Id предмета, который установится вместо инструмента при ломании<br />
isWeapon: false, // Является ли инструмент оружием (влияет на уменьшение прочности)<br />
// Действие при ломании инструмента<br />
onBroke: function(item, player) {<br />
return false; // возврат true предотвращает ломание инструмента<br />
},<br />
// Действие при атаке<br />
onAttack: function(item, victim, attacker) {<br />
return false; // возврат true предотвращает повреждение инструмента<br />
},<br />
// Действие при разрушении блока<br />
onDestroy: function(item, coords, block, player) {<br />
return false; // возврат true предотвращает повреждение инструмета<br />
},<br />
// Расчёт времени разрушения блока инструментом<br />
calcDestroyTime: function(toolData, coords, block, params, destroyTime, enchantData) {<br />
return 0;<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
Для регистрации нового материала инструментов используется метод&nbsp;ToolAPI.addToolMaterial(toolMaterial, params)<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addToolMaterial("dirt", {<br />
durability: 15, // Прочность (сколько блоков можно сломать)<br />
level: 1, // Уровень инструмента - определяет, какие блоки инструмент может добыть.<br />
efficiency: 10, // Эффективность - модификатор скорости ломания блока<br />
damage: 1 // Урон от материала (складывается с базовым уроном)<br />
});</syntaxhighlight><br />
<br />
=== Регистрация блоков ===<br />
<br />
Для регистрации блока используется метод&nbsp;ToolAPI.registerBlockMaterial(BlockID, blockMaterial, level);<br/> ''blockMaterial ''- материал блока.<br/> ''level ''- уровень добычи<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerBlockMaterial(BlockID.myBlock, "stone", 1);<br />
</syntaxhighlight><br />
<br />
Уровни добычи блоков из майнкрафта:<br/> 1 - камень<br/> 2 - железная руда<br/> 3 - алмазная руда<br/> 4 - обсидиан<br />
<br />
По умолчанию доступны следующие материалы:<br/> "stone" - каменный,<br/> "wood" - деревянный,<br/> "dirt" - земляной,<br/> "plant" - растения,<br/> "fibre" - паутина,<br/> "unbreaking" - неломаемый<br />
<br />
Для регистрации материала блока используется метод&nbsp;ToolAPI.addBlockMaterial(blockMaterial, breakingMultiplier);<br/> ''blockMaterial ''- название материала.<br/> ''breakingMultiplier ''- модификатор времени ломания блока при добыче без подходящего инструмента.<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addBlockMaterial("test", 3);</syntaxhighlight><br />
</div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&diff=2588InnerCore/Создание блоков и предметов2020-12-27T17:40:29Z<p>MineExplorer: </p>
<hr />
<div><div class="mw-parser-output"><br />
=== Регистрация ID ===<br />
<br />
ID - уникальный идентификатор блока\предмета, задается строкой и натуральным числом, которое сопоставляется этой строке. Чтобы зарегистрировать ID, используется модуль IDRegistry.<br />
<br />
Для регистрации ID блока используется метод IDRegistry.genBlockID("строковый ID") - после вызова этой функции сгенерируется новый уникальный ID для блока, доступ к числовому значению которого может быть произведен как BlockID.<строковый ID><br />
<br />
Для регистрации ID предмета используется метод IDRegistry.genItemID("строковый ID") - после вызова этой функции сгенерируется новый уникальный ID для предмета, доступ к числовому значению которого может быть произведен как ItemID.<строковый ID><br />
<br />
Примеры:<br />
<syntaxhighlight lang="Javascript">IDRegistry.genBlockID("testBlock"); // доступ BlockID.testBlock<br />
IDRegistry.genItemID("testItem"); // доступ ItemID.testItem</syntaxhighlight><br />
<div class="mw-parser-output"><br />
=== Текстуры ===<br />
<br />
В ресурсах мода текстуры блоков и предметов задаются в определенном формате: каждая текстура должна быть в формате .png и имеет имя и номер, название любой текстуры выглядит так: имя_номер.png и никак иначе. Номера текстур с одним именем должны идти последовательно и начинаться с 0.<br />
<br />
Текстуры блоков в ресурспаке располагаются по адресу res/terrain-atlas/<br />
<br />
Текстуры предметов&nbsp;в ресурспаке располагаются по адресу res/items-opaque/<br />
<br />
Текстуры брони в ресурспаке располагаются по адресу res/armor<br />
</div> <br />
=== Создание блоков ===<br />
<br />
После регистрации ID для блока, создается сам блок на этом ID. На одном ID может быть создано несколько вариаций блока, каждая из которых обладает своим именем и текстурой, разные вариации одного блока в мире будут иметь один ID, но разные значения metadata, подробнее об этом будет позднее. Для создания блоков используется модуль Block.<br />
<br />
Метод Block.createBlock("строковый ID", [вариация1, вариация2, ...]) - создает блок и все его вариации на ранее зарегистрированном ID, если вариация 1, то просто создает данный блок.<br />
<br />
Каждая вариация в массиве имеет формат<br />
<syntaxhighlight lang="Javascript">{<br />
name: "имя вариации", <br />
texture: [<br />
["название1", индекс1], // bottom<br />
["название2", индекс2], // top<br />
["название3", индекс3], // back<br />
["название4", индекс4], // front<br />
["название5", индекс5], // left<br />
["название6", индекс6] // right<br />
], <br />
inCreative: true/false //(добавлять ли данную вариацию блока в креатив)<br />
}</syntaxhighlight><br />
<br />
Если текстур указано меньше, чем 6, то последняя из них будет дублирована несколько раз, чтобы дополнить их кол-во до 6.<br />
<br />
'''Пример''':<br />
<syntaxhighlight lang="Javascript">IDRegistry.genBlockID("testBlock"); // регистрация<br />
Block.createBlock("testBlock", [<br />
{name: "test block", texture: [["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0]], inCreative: true}<br />
]); // создание простого блока на ID "testBlock" с текстурой досок на всех сторонах, будет добавлен в креатив</syntaxhighlight><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
==== Создание блоков с поворотом ====<br />
<br />
Метод Block.createBlockWithRotation -&nbsp;&nbsp;принимает те же аргументы, что и Block.createBlock, но для каждой вариации блока создает 4 вариации, которые реализуют поворот, блок, созданный этим методом, автоматически будет ставиться с нужным поворотом.<br />
</div> </div> <br />
=== Создание предметов ===<br />
<br />
После регистрации ID предмета, создается сам предмет на этом ID. Предметы могут быть разных типов: обычный, броня, еда и кидаемый, для каждого из них существует свой метод. Для создания предметов используется модуль Item. Каждый предмет имеет текстуру, которая задается в формате {name: "имя текстуры", meta: <номер текстуры>}, если номер текстуры 0, его можно не указывать.<br />
<br />
Item.createItem("строковый ID", "имя предмета", текстура, параметры) - создает обычный предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
stack: 64 // размер стака<br />
} </syntaxhighlight><br />
<br />
'''Пример''':<br />
<syntaxhighlight lang="JavaScript">IDRegistry.genItemID("testItem");<br />
Item.createItem("testItem", "test item", {name: "stick", meta: 0}, {}); // создаем обычный предмет на ID testItem с текстурой палки и стандартными параметрами</syntaxhighlight><br />
<br />
==== Создание еды ====<br />
<br />
Item.createFoodItem("строковый ID", "имя предмета", текстура, параметры) - создает съедобный предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false,// если true, не добавляет предмет в креатив<br />
stack: 64, // размер стака<br />
food: 1 // восполнение здоровья едой<br />
}</syntaxhighlight><br />
<br />
==== Создание кидаемого предмета ====<br />
<br />
Item.createThrowableItem("строковый ID", "имя предмета", текстура, параметры) - создает кидаемый предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
stack: 64 // сколько предметов будет в одном стаке, максимум 64.<br />
}</syntaxhighlight><br />
<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"><br />
'''Пример''':<br />
<syntaxhighlight lang="JavaScript">IDRegistry.genItemID("throwableItem");&nbsp;<br />
Item.createThrowableItem("throwableItem", "Throwable Item", { name: "throwable_item", meta: 0}, {})<br />
</syntaxhighlight><br />
</div> </div> </div> </div> </div> </div> <br />
==== Создание брони ====<br />
<pre>Item.createArmorItem(&quot;строковый ID&quot;, &quot;имя предмета&quot;, текстура, параметры) - создает предмет брони на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.</pre><br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
armor: 1, // количество добавляемой брони в шкале защиты<br />
type: <обязательное значение>, // тип предмета "helmet"/"chestplate"/"leggings"/"boots"<br />
texture: <обязательное значение>, // текстура модели данной брони<br />
durability: 1 // прочность брони<br />
}</syntaxhighlight><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
'''Пример брони''':<br />
<syntaxhighlight lang="Javascript">IDRegistry.genItemID("myHelmet"); // регистрируем ID шлема<br />
IDRegistry.genItemID("myChestplate"); // регистрируем ID нагрудника<br />
IDRegistry.genItemID("myLeggings"); // регистрируем ID понож<br />
IDRegistry.genItemID("myBoots"); // регистрируем ID ботинок<br />
<br />
Item.createArmorItem("myHelmet", "Helmet", {name: "helmet"}, {type: "helmet", armor: 2, durability: 149, texture: "armor/lay_1.png"}); // создаём шлем с ID myHelmet<br />
Item.createArmorItem("myChestplate", "Chestplate", {name: "chestplate"}, {type: "chestplate", armor: 6, durability: 216, texture: "armor/lay_1.png"}); // создаём нагрудник с ID myChestplate<br />
Item.createArmorItem("myLeggings", "Leggings", {name: "leggings"}, {type: "leggings", armor: 5, durability: 203, texture: "armor/lay_2.png"}); // создаём поножи с ID myLeggings<br />
Item.createArmorItem("myBoots", "Boots", {name: "boots"}, {type: "boots", armor: 2, durability: 176, texture: "armor/lay_1.png"}); // создаём ботинки с ID myBoots<br />
</syntaxhighlight><br />
</div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&diff=2587InnerCore/Создание блоков и предметов2020-12-27T17:38:26Z<p>MineExplorer: </p>
<hr />
<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"><br />
=== Регистрация ID ===<br />
<br />
ID - уникальный идентификатор блока\предмета, задается строкой и натуральным числом, которое сопоставляется этой строке. Чтобы зарегистрировать ID, используется модуль IDRegistry.<br />
<br />
Для регистрации ID блока используется метод IDRegistry.genBlockID("строковый ID") - после вызова этой функции сгенерируется новый уникальный ID для блока, доступ к числовому значению которого может быть произведен как BlockID.<строковый ID><br />
<br />
Для регистрации ID предмета используется метод IDRegistry.genItemID("строковый ID") - после вызова этой функции сгенерируется новый уникальный ID для предмета, доступ к числовому значению которого может быть произведен как ItemID.<строковый ID><br />
<br />
Примеры:<br />
<syntaxhighlight lang="Javascript">IDRegistry.genBlockID("testBlock"); // доступ BlockID.testBlock<br />
IDRegistry.genItemID("testItem"); // доступ ItemID.testItem</syntaxhighlight><br />
</div> <div class="mw-parser-output"><br />
=== Текстуры ===<br />
<br />
В ресурсах мода текстуры блоков и предметов задаются в определенном формате: каждая текстура должна быть в формате .png и имеет имя и номер, название любой текстуры выглядит так: имя_номер.png и никак иначе. Номера текстур с одним именем должны идти последовательно и начинаться с 0.<br />
<br />
Текстуры блоков в ресурспаке располагаются по адресу res/terrain-atlas/<br />
<br />
Текстуры предметов&nbsp;в ресурспаке располагаются по адресу res/items-opaque/<br />
<br />
Текстуры брони в ресурспаке располагаются по адресу res/armor<br />
</div> <br />
=== Создание блоков ===<br />
<br />
После регистрации ID для блока, создается сам блок на этом ID. На одном ID может быть создано несколько вариаций блока, каждая из которых обладает своим именем и текстурой, разные вариации одного блока в мире будут иметь один ID, но разные значения metadata, подробнее об этом будет позднее. Для создания блоков используется модуль Block.<br />
<br />
Метод Block.createBlock("строковый ID", [вариация1, вариация2, ...]) - создает блок и все его вариации на ранее зарегистрированном ID, если вариация 1, то просто создает данный блок.<br />
<br />
Каждая вариация в массиве имеет формат<br />
<syntaxhighlight lang="Javascript">{<br />
name: "имя вариации", <br />
texture: [<br />
["название1", индекс1], // bottom<br />
["название2", индекс2], // top<br />
["название3", индекс3], // back<br />
["название4", индекс4], // front<br />
["название5", индекс5], // left<br />
["название6", индекс6] // right<br />
], <br />
inCreative: true/false //(добавлять ли данную вариацию блока в креатив)<br />
}</syntaxhighlight><br />
<br />
Если текстур указано меньше, чем 6, то последняя из них будет дублирована несколько раз, чтобы дополнить их кол-во до 6.<br />
<br />
'''Пример''':<br />
<syntaxhighlight lang="Javascript">IDRegistry.genBlockID("testBlock"); // регистрация<br />
Block.createBlock("testBlock", [<br />
{name: "test block", texture: [["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0]], inCreative: true}<br />
]); // создание простого блока на ID "testBlock" с текстурой досок на всех сторонах, будет добавлен в креатив</syntaxhighlight><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
==== Создание блоков с поворотом ====<br />
<br />
Метод Block.createBlockWithRotation -&nbsp;&nbsp;принимает те же аргументы, что и Block.createBlock, но для каждой вариации блока создает 4 вариации, которые реализуют поворот, блок, созданный этим методом, автоматически будет ставиться с нужным поворотом.<br />
</div> </div> <br />
=== Создание предметов ===<br />
<br />
После регистрации ID предмета, создается сам предмет на этом ID. Предметы могут быть разных типов: обычный, броня, еда и кидаемый, для каждого из них существует свой метод. Для создания предметов используется модуль Item. Каждый предмет имеет текстуру, которая задается в формате {name: "имя текстуры", meta: <номер текстуры>}, если номер текстуры 0, его можно не указывать.<br />
<br />
Item.createItem("строковый ID", "имя предмета", текстура, параметры) - создает обычный предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
stack: 64 // размер стака<br />
} </syntaxhighlight><br />
<br />
'''Пример''':<br />
<syntaxhighlight lang="JavaScript">IDRegistry.genItemID("testItem");<br />
Item.createItem("testItem", "test item", {name: "stick", meta: 0}, {}); // создаем обычный предмет на ID testItem с текстурой палки и стандартными параметрами</syntaxhighlight><br />
<br />
==== Создание еды ====<br />
<br />
Item.createFoodItem("строковый ID", "имя предмета", текстура, параметры) - создает съедобный предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false,// если true, не добавляет предмет в креатив<br />
stack: 64, // размер стака<br />
food: 1 // восполнение здоровья едой<br />
}</syntaxhighlight><br />
<br />
==== Создание кидаемого предмета ====<br />
<br />
Item.createThrowableItem("строковый ID", "имя предмета", текстура, параметры) - создает кидаемый предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
stack: 64 // сколько предметов будет в одном стаке, максимум 64.<br />
}</syntaxhighlight><br />
<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"><br />
'''Пример''':<br />
<syntaxhighlight lang="JavaScript">IDRegistry.genItemID("throwableItem");&nbsp;<br />
Item.createThrowableItem("throwableItem", "Throwable Item", { name: "throwable_item", meta: 0}, {})<br />
</syntaxhighlight><br />
</div> </div> </div> </div> </div> </div> <br />
==== Создание брони ====<br />
<pre>Item.createArmorItem(&quot;строковый ID&quot;, &quot;имя предмета&quot;, текстура, параметры) - создает предмет брони на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.</pre><br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
armor: 1, // количество добавляемой брони в шкале защиты<br />
type: <обязательное значение>, // тип предмета "helmet"/"chestplate"/"leggings"/"boots"<br />
texture: <обязательное значение>, // текстура модели данной брони<br />
durability: 1 // прочность брони<br />
}</syntaxhighlight><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
'''Пример брони''':<br />
<syntaxhighlight lang="Javascript">IDRegistry.genItemID("myHelmet"); // регистрируем ID для шлема<br />
IDRegistry.genItemID("myChestplate"); // регистрируем ID для нагрудника<br />
IDRegistry.genItemID("myLeggings"); // регистрируем ID для понож<br />
IDRegistry.genItemID("myBoots"); // регистрируем ID для ботинок<br />
<br />
Item.createArmorItem("myHelmet", "Helmet", {name: "helmet"}, {type: "helmet", armor: 2, durability: 149, texture: "armor/lay_1.png"}); // создаём шлем с ID myHelmet<br />
Item.createArmorItem("myChestplate", "Chestplate", {name: "chestplate"}, {type: "chestplate", armor: 6, durability: 216, texture: "armor/lay_1.png"}); // создаём нагрудник с ID myChestplate<br />
Item.createArmorItem("myLeggings", "Leggings", {name: "leggings"}, {type: "leggings", armor: 5, durability: 203, texture: "armor/lay_2.png"}); // создаём поножи с ID myLeggings<br />
Item.createArmorItem("myBoots", "Boots", {name: "boots"}, {type: "boots", armor: 2, durability: 176, texture: "armor/lay_1.png"}); // создаём ботинки с ID myBoots<br />
</syntaxhighlight><br />
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&diff=2586InnerCore/Создание блоков и предметов2020-12-27T17:30:16Z<p>MineExplorer: Отмена правки 2585, сделанной MineExplorer (обсуждение)</p>
<hr />
<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"><br />
=== Регистрация ID ===<br />
<br />
ID - уникальный идентефикатор блока\предмета, задается строкой и натуральным числом, которое сопоставляется этой строке. Чтобы зарегистрировать ID, используется модуль IDRegistry.<br />
<br />
Для регистрации ID блока используется метод IDRegistry.genBlockID("строковый ID") - после вызова этой функции сгенерируется новый уникальный ID для блока, доступ к числовому значению которого может быть произведен как BlockID.<строковый ID><br />
<br />
Для регистрации ID предмета используется метод IDRegistry.genItemID("строковый ID") - после вызова этой функции сгенерируется новый уникальный ID для предмета, доступ к числовому значению которого может быть произведен как ItemID.<строковый ID><br />
<br />
Примеры:<br />
<syntaxhighlight lang="Javascript">IDRegistry.genBlockID("testBlock"); // доступ BlockID.testBlock<br />
IDRegistry.genItemID("testItem"); // доступ ItemID.testItem</syntaxhighlight><br />
</div> <div class="mw-parser-output"><br />
=== Текстуры ===<br />
<br />
В ресурсах мода текстуры блоков и предметов задаются в определенном формате: каждая текстура должна быть в формате .png и имеет имя и номер, название любой текстуры выглядит так: имя_номер.png и никак иначе. Номера текстур с одним именем должны идти последовательно и начинаться с 0.<br />
<br />
Текстуры блоков в ресурспаке располагаются по адресу res/terrain-atlas/<br />
<br />
Текстуры предметов&nbsp;в ресурспаке располагаются по адресу res/items-opaque/<br />
<br />
Текстуры брони в ресурспаке распологаются по адресу res/armor<br />
</div> <br />
=== Создание блоков ===<br />
<br />
После регистрации ID для блока, создается сам блок на этом ID. На одном ID может быть создано несколько вариаций блока, каждая из которых обладает своим именем и текстурой, разные вариации одного блока в мире будут иметь один ID, но разные значения metadata, подробнее об этом будет позднее. Для создания блоков используется модуль Block.<br />
<br />
Метод Block.createBlock("строковый ID", [вариация1, вариация2, ...]) - создает блок и все его вариации на ранее зарегистрированном ID, если вариация 1, то просто создает данный блок.<br />
<br />
Каждая вариация в массиве имеет формат<br />
<syntaxhighlight lang="Javascript">{<br />
name: "имя вариации", <br />
texture: [<br />
["название1", индекс1], // bottom<br />
["название2", индекс2], // top<br />
["название3", индекс3], // back<br />
["название4", индекс4], // front<br />
["название5", индекс5], // left<br />
["название6", индекс6] // right<br />
], <br />
inCreative: true/false //(добавлять ли данную вариацию блока в креатив)<br />
}</syntaxhighlight><br />
<br />
Если текстур указано меньше, чем 6, то последняя из них будет дублирована несколько раз, чтобы дополнить их кол-во до 6.<br />
<br />
'''Пример''':<br />
<syntaxhighlight lang="Javascript">IDRegistry.genBlockID("testBlock"); // регистрация<br />
Block.createBlock("testBlock", [<br />
{name: "test block", texture: [["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0]], inCreative: true}<br />
]); // создание простого блока на ID "testBlock" с текстурой досок на всех сторонах, будет добавлен в креатив</syntaxhighlight><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
==== Создание блоков с поворотом ====<br />
<br />
Метод Block.createBlockWithRotation -&nbsp;&nbsp;принимает те же аргументы, что и Block.createBlock, но для каждой вариации блока создает 4 вариации, которые реализуют поворот, блок, созданный этим методом, автоматически будет ставиться с нужным поворотом.<br />
</div> </div> <br />
=== Создание предметов ===<br />
<br />
После регистрации ID предмета, создается сам предмет на этом ID. Предметы могут быть разных типов: обычный, броня, еда и кидаемый, для каждого из них существует свой метод. Для создания предметов используется модуль Item. Каждый предмет имеет текстуру, которая задается в формате {name: "имя текстуры", meta: <номер текстуры>}, если номер текстуры 0, его можно не указывать.<br />
<br />
Item.createItem("строковый ID", "имя предмета", текстура, параметры) - создает обычный предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
stack: 64 // размер стака<br />
} </syntaxhighlight><br />
<br />
==== Создание еды ====<br />
<br />
Item.createFoodItem("строковый ID", "имя предмета", текстура, параметры) - создает съедобный предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false,// если true, не добавляет предмет в креатив<br />
stack: 64, // размер стака<br />
food: 1 // восполнение здоровья едой<br />
}</syntaxhighlight><br />
<br />
==== Создание кидаемого предмета ====<br />
<br />
Item.createThrowableItem("строковый ID", "имя предмета", текстура, параметры) - создает кидаемый предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
stack: 64 // сколько предметов будет в одном стаке, максимум 64.<br />
}</syntaxhighlight><br />
<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"><br />
==== Пример кидаемого предмета. ====<br />
<pre>IDRegistry.genItemID("throwableItem");&nbsp;<br />
Item.createThrowableItem("throwableItem", "Throwable Item", { name: "throwable_item", meta: 0}, {})<br />
</pre><br />
</div> </div> </div> </div> </div> </div> <br />
==== Создание брони ====<br />
<pre>Item.createArmorItem(&quot;строковый ID&quot;, &quot;имя предмета&quot;, текстура, параметры) - создает предмет брони на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.</pre><br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
armor: 1, // количество добавляемой брони в шкале защиты<br />
type: <обязательное значение>, // тип предмета "helmet"/"chestplate"/"leggings"/"boots"<br />
texture: <обязательное значение>, // текстура модели данной брони<br />
durability: 1 // прочность брони<br />
}</syntaxhighlight><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Пример брони ===<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="Javascript">IDRegistry.genItemID("myHelmet"); // регистрируем ID для шлема<br />
IDRegistry.genItemID("myChestplate"); // регистриурем ID для нагрудника<br />
IDRegistry.genItemID("myLeggings"); // регистрируем ID для понож<br />
IDRegistry.genItemID("myBoots"); // регистрируем ID для ботинок<br />
<br />
Item.createArmorItem("myHelmet", "Helmet", {name: "helmet"}, {type: "helmet", armor: 2, durability: 149, texture: "armor/lay_1.png"}); // создаём шлем с ID myHelmet<br />
Item.createArmorItem("myChestplate", "Chestplate", {name: "chestplate"}, {type: "chestplate", armor: 6, durability: 216, texture: "armor/lay_1.png"}); // создаём нагрудник с ID myChestplate<br />
Item.createArmorItem("myLeggings", "Leggings", {name: "leggings"}, {type: "leggings", armor: 5, durability: 203, texture: "armor/lay_2.png"}); // создаём поножи с ID myLeggings<br />
Item.createArmorItem("myBoots", "Boots", {name: "boots"}, {type: "boots", armor: 2, durability: 176, texture: "armor/lay_1.png"}); // создаём ботинки с ID myBoots<br />
</syntaxhighlight><br />
</div> </div> <br />
=== Пример предмета ===<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="Javascript">IDRegistry.genItemID("testItem");<br />
Item.createItem("testItem", "test item", {name: "stick", meta: 0}, {}); // создаем обычный предмет на ID testItem с текстурой палки и стандартными параметрами</syntaxhighlight><br />
</div> </div> </div> </div> </div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&diff=2585InnerCore/Создание блоков и предметов2020-12-27T17:28:45Z<p>MineExplorer: </p>
<hr />
<div><div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<h3>Регистрация ID</h3><br />
<br />
<p>ID - уникальный идентефикатор блока\предмета, задается строкой и натуральным числом, которое сопоставляется этой строке. Чтобы зарегистрировать ID, используется модуль IDRegistry.</p><br />
<br />
<p>Для регистрации ID блока используется метод IDRegistry.genBlockID(&quot;строковый ID&quot;) - после вызова этой функции сгенерируется новый уникальный ID для блока, доступ к числовому значению которого может быть произведен как BlockID.&lt;строковый ID&gt;</p><br />
<br />
<p>Для регистрации ID предмета используется метод IDRegistry.genItemID(&quot;строковый ID&quot;) - после вызова этой функции сгенерируется новый уникальный ID для предмета, доступ к числовому значению которого может быть произведен как ItemID.&lt;строковый ID&gt;</p><br />
<br />
<p>Примеры:</p><br />
<br />
<pre class="fck_mw_syntaxhighlight"><br />
<syntaxhighlight lang="Javascript">IDRegistry.genBlockID(&quot;testBlock&quot;); // доступ BlockID.testBlock<br />
IDRegistry.genItemID(&quot;testItem&quot;); // доступ ItemID.testItem</syntaxhighlight></pre><br />
</div><br />
<br />
<div class="mw-parser-output"><br />
<h3>Текстуры</h3><br />
<br />
<p>В ресурсах мода текстуры блоков и предметов задаются в определенном формате: каждая текстура должна быть в формате .png и имеет имя и номер, название любой текстуры выглядит так: имя_номер.png и никак иначе. Номера текстур с одним именем должны идти последовательно и начинаться с 0.</p><br />
<br />
<p>Текстуры блоков в ресурспаке располагаются по адресу res/terrain-atlas/</p><br />
<br />
<p>Текстуры предметов&nbsp;в ресурспаке располагаются по адресу res/items-opaque/</p><br />
<br />
<p>Текстуры брони в ресурспаке распологаются по адресу res/armor</p><br />
</div><br />
<br />
<h3>Создание блоков</h3><br />
<br />
<p>После регистрации ID для блока, создается сам блок на этом ID. На одном ID может быть создано несколько вариаций блока, каждая из которых обладает своим именем и текстурой, разные вариации одного блока в мире будут иметь один ID, но разные значения metadata, подробнее об этом будет позднее. Для создания блоков используется модуль Block.</p><br />
<br />
<p>Метод Block.createBlock(&quot;строковый ID&quot;, [вариация1, вариация2, ...]) - создает блок и все его вариации на ранее зарегистрированном ID, если вариация 1, то просто создает данный блок.</p><br />
<br />
<p>Каждая вариация в массиве имеет формат</p><br />
<br />
<pre class="fck_mw_syntaxhighlight"><br />
<syntaxhighlight lang="Javascript">{<br />
&nbsp; name: &quot;имя вариации&quot;, <br />
texture: [<br />
[&quot;название1&quot;, индекс1], // bottom<br />
[&quot;название2&quot;, индекс2], // top<br />
[&quot;название3&quot;, индекс3], // back<br />
[&quot;название4&quot;, индекс4], // front<br />
[&quot;название5&quot;, индекс5], // left<br />
[&quot;название6&quot;, индекс6] // right<br />
], <br />
&nbsp; inCreative: true/false //(добавлять ли данную вариацию блока в креатив)<br />
}</syntaxhighlight></pre><br />
<br />
<p>Если текстур указано меньше, чем 6, то последняя из них будет дублирована несколько раз, чтобы дополнить их кол-во до 6.</p><br />
<br />
<p><b>Пример</b>:</p><br />
<br />
<pre class="fck_mw_syntaxhighlight"><br />
<syntaxhighlight lang="Javascript">IDRegistry.genBlockID(&quot;testBlock&quot;); // регистрация<br />
Block.createBlock(&quot;testBlock&quot;, [<br />
&nbsp;&nbsp;&nbsp;&nbsp; {name: &quot;test block&quot;, texture: [[&quot;planks&quot;, 0], [&quot;planks&quot;, 0], [&quot;planks&quot;, 0], [&quot;planks&quot;, 0], [&quot;planks&quot;, 0], [&quot;planks&quot;, 0]], inCreative: true}<br />
]); // создание простого блока на ID &quot;testBlock&quot; с текстурой досок на всех сторонах, будет добавлен в креатив</syntaxhighlight></pre><br />
<br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<h4>Создание блоков с поворотом</h4><br />
<br />
<p>Метод Block.createBlockWithRotation -&nbsp;&nbsp;принимает те же аргументы, что и Block.createBlock, но для каждой вариации блока создает 4 вариации, которые реализуют поворот, блок, созданный этим методом, автоматически будет ставиться с нужным поворотом.</p><br />
</div><br />
</div><br />
<br />
<h3>Создание предметов</h3><br />
<br />
<p>После регистрации ID предмета, создается сам предмет на этом ID. Предметы могут быть разных типов: обычный, броня, еда и кидаемый, для каждого из них существует свой метод. Для создания предметов используется модуль Item. Каждый предмет имеет текстуру, которая задается в формате {name: &quot;имя текстуры&quot;, meta: &lt;номер текстуры&gt;}, если номер текстуры 0, его можно не указывать.</p><br />
<br />
<p>Item.createItem(&quot;строковый ID&quot;, &quot;имя предмета&quot;, текстура, параметры) - создает обычный предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.</p><br />
<br />
<p>Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:</p><br />
<br />
<pre class="fck_mw_syntaxhighlight"><br />
<syntaxhighlight lang="Javascript">{<br />
&nbsp;&nbsp;&nbsp;&nbsp; isTech: false, // если true, не добавляет предмет в креатив<br />
&nbsp;&nbsp;&nbsp;&nbsp; stack: 64 // размер стака<br />
}&nbsp;</syntaxhighlight></pre><br />
<br />
<h4>Создание еды</h4><br />
<br />
<p>Item.createFoodItem(&quot;строковый ID&quot;, &quot;имя предмета&quot;, текстура, параметры) - создает съедобный предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.</p><br />
<br />
<p>Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:</p><br />
<br />
<pre class="fck_mw_syntaxhighlight"><br />
<syntaxhighlight lang="Javascript">{<br />
&nbsp;&nbsp;&nbsp;&nbsp; isTech: false,// если true, не добавляет предмет в креатив<br />
&nbsp;&nbsp;&nbsp;&nbsp; stack: 64, // размер стака<br />
&nbsp;&nbsp;&nbsp;&nbsp; food: 1 // восполнение здоровья едой<br />
}</syntaxhighlight></pre><br />
<br />
<h4>Создание кидаемого предмета</h4><br />
<br />
<p>Item.createThrowableItem(&quot;строковый ID&quot;, &quot;имя предмета&quot;, текстура, параметры) - создает кидаемый предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.</p><br />
<br />
<p>Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:</p><br />
<br />
<pre class="fck_mw_syntaxhighlight"><br />
<syntaxhighlight lang="Javascript">{<br />
&nbsp;&nbsp;&nbsp;&nbsp; isTech: false, // если true, не добавляет предмет в креатив<br />
&nbsp;&nbsp;&nbsp;&nbsp; stack: 64 // сколько предметов будет в одном стаке, максимум 64.<br />
}</syntaxhighlight></pre><br />
<br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<h4>Пример кидаемого предмета.</h4><br />
<br />
<pre><br />
IDRegistry.genItemID(&quot;throwableItem&quot;);&amp;nbsp;<br />
Item.createThrowableItem(&quot;throwableItem&quot;, &quot;Throwable Item&quot;, { name: &quot;throwable_item&quot;, meta: 0}, {})<br />
</pre><br />
</div><br />
</div><br />
</div><br />
</div><br />
</div><br />
</div><br />
<br />
<h4>Создание брони</h4><br />
<br />
<pre><br />
Item.createArmorItem(&amp;quot;строковый ID&amp;quot;, &amp;quot;имя предмета&amp;quot;, текстура, параметры) - создает предмет брони на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.</pre><br />
<br />
<p>Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:</p><br />
<br />
<pre class="fck_mw_syntaxhighlight"><br />
<syntaxhighlight lang="Javascript">{<br />
&nbsp;&nbsp;&nbsp;&nbsp; isTech: false, // если true, не добавляет предмет в креатив<br />
&nbsp;&nbsp;&nbsp;&nbsp; armor: 1, // количество добавляемой брони в шкале защиты<br />
&nbsp;&nbsp;&nbsp;&nbsp; type: &lt;обязательное значение&gt;, // тип предмета &quot;helmet&quot;/&quot;chestplate&quot;/&quot;leggings&quot;/&quot;boots&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp; texture: &lt;обязательное значение&gt;, // текстура модели данной брони<br />
&nbsp;&nbsp;&nbsp;&nbsp; durability: 1 // прочность брони<br />
}</syntaxhighlight></pre><br />
<br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<h3>Пример брони</h3><br />
<br />
<p>&nbsp;</p><br />
<br />
<pre class="fck_mw_syntaxhighlight"><br />
<syntaxhighlight lang="Javascript">IDRegistry.genItemID(&quot;myHelmet&quot;); // регистрируем ID для шлема<br />
IDRegistry.genItemID(&quot;myChestplate&quot;); // регистриурем ID для нагрудника<br />
IDRegistry.genItemID(&quot;myLeggings&quot;); // регистрируем ID для понож<br />
IDRegistry.genItemID(&quot;myBoots&quot;); // регистрируем ID для ботинок<br />
<br />
Item.createArmorItem(&quot;myHelmet&quot;, &quot;Helmet&quot;, {name: &quot;helmet&quot;}, {type: &quot;helmet&quot;, armor: 2, durability: 149, texture: &quot;armor/lay_1.png&quot;}); // создаём шлем с ID myHelmet<br />
Item.createArmorItem(&quot;myChestplate&quot;, &quot;Chestplate&quot;, {name: &quot;chestplate&quot;}, {type: &quot;chestplate&quot;, armor: 6, durability: 216, texture: &quot;armor/lay_1.png&quot;}); // создаём нагрудник с ID myChestplate<br />
Item.createArmorItem(&quot;myLeggings&quot;, &quot;Leggings&quot;, {name: &quot;leggings&quot;}, {type: &quot;leggings&quot;, armor: 5, durability: 203, texture: &quot;armor/lay_2.png&quot;}); // создаём поножи с ID myLeggings<br />
Item.createArmorItem(&quot;myBoots&quot;, &quot;Boots&quot;, {name: &quot;boots&quot;}, {type: &quot;boots&quot;, armor: 2, durability: 176, texture: &quot;armor/lay_1.png&quot;}); // создаём ботинки с ID myBoots<br />
</syntaxhighlight></pre><br />
</div><br />
</div><br />
<br />
<h3>Пример предмета</h3><br />
<br />
<p>&nbsp;</p><br />
<br />
<pre class="fck_mw_syntaxhighlight"><br />
<syntaxhighlight lang="Javascript">IDRegistry.genItemID(&quot;testItem&quot;);<br />
Item.createItem(&quot;testItem&quot;, &quot;test item&quot;, {name: &quot;stick&quot;, meta: 0}, {}); // создаем обычный предмет на ID testItem с текстурой палки и стандартными параметрами</syntaxhighlight></pre><br />
</div><br />
</div><br />
</div><br />
</div><br />
</div><br />
</div><br />
</div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&diff=2584InnerCore/Создание блоков и предметов2020-12-27T16:36:41Z<p>MineExplorer: </p>
<hr />
<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"><br />
=== Регистрация ID ===<br />
<br />
ID - уникальный идентефикатор блока\предмета, задается строкой и натуральным числом, которое сопоставляется этой строке. Чтобы зарегистрировать ID, используется модуль IDRegistry.<br />
<br />
Для регистрации ID блока используется метод IDRegistry.genBlockID("строковый ID") - после вызова этой функции сгенерируется новый уникальный ID для блока, доступ к числовому значению которого может быть произведен как BlockID.<строковый ID><br />
<br />
Для регистрации ID предмета используется метод IDRegistry.genItemID("строковый ID") - после вызова этой функции сгенерируется новый уникальный ID для предмета, доступ к числовому значению которого может быть произведен как ItemID.<строковый ID><br />
<br />
Примеры:<br />
<syntaxhighlight lang="Javascript">IDRegistry.genBlockID("testBlock"); // доступ BlockID.testBlock<br />
IDRegistry.genItemID("testItem"); // доступ ItemID.testItem</syntaxhighlight><br />
</div> <div class="mw-parser-output"><br />
=== Текстуры ===<br />
<br />
В ресурсах мода текстуры блоков и предметов задаются в определенном формате: каждая текстура должна быть в формате .png и имеет имя и номер, название любой текстуры выглядит так: имя_номер.png и никак иначе. Номера текстур с одним именем должны идти последовательно и начинаться с 0.<br />
<br />
Текстуры блоков в ресурспаке располагаются по адресу res/terrain-atlas/<br />
<br />
Текстуры предметов&nbsp;в ресурспаке располагаются по адресу res/items-opaque/<br />
<br />
Текстуры брони в ресурспаке распологаются по адресу res/armor<br />
</div> <br />
=== Создание блоков ===<br />
<br />
После регистрации ID для блока, создается сам блок на этом ID. На одном ID может быть создано несколько вариаций блока, каждая из которых обладает своим именем и текстурой, разные вариации одного блока в мире будут иметь один ID, но разные значения metadata, подробнее об этом будет позднее. Для создания блоков используется модуль Block.<br />
<br />
Метод Block.createBlock("строковый ID", [вариация1, вариация2, ...]) - создает блок и все его вариации на ранее зарегистрированном ID, если вариация 1, то просто создает данный блок.<br />
<br />
Каждая вариация в массиве имеет формат<br />
<syntaxhighlight lang="Javascript">{<br />
name: "имя вариации", <br />
texture: [<br />
["название1", индекс1], // bottom<br />
["название2", индекс2], // top<br />
["название3", индекс3], // back<br />
["название4", индекс4], // front<br />
["название5", индекс5], // left<br />
["название6", индекс6] // right<br />
], <br />
inCreative: true/false //(добавлять ли данную вариацию блока в креатив)<br />
}</syntaxhighlight><br />
<br />
Если текстур указано меньше, чем 6, то последняя из них будет дублирована несколько раз, чтобы дополнить их кол-во до 6.<br />
<br />
'''Пример''':<br />
<syntaxhighlight lang="Javascript">IDRegistry.genBlockID("testBlock"); // регистрация<br />
Block.createBlock("testBlock", [<br />
{name: "test block", texture: [["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0]], inCreative: true}<br />
]); // создание простого блока на ID "testBlock" с текстурой досок на всех сторонах, будет добавлен в креатив</syntaxhighlight><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
==== Создание блоков с поворотом ====<br />
<br />
Метод Block.createBlockWithRotation -&nbsp;&nbsp;принимает те же аргументы, что и Block.createBlock, но для каждой вариации блока создает 4 вариации, которые реализуют поворот, блок, созданный этим методом, автоматически будет ставиться с нужным поворотом.<br />
</div> </div> <br />
=== Создание предметов ===<br />
<br />
После регистрации ID предмета, создается сам предмет на этом ID. Предметы могут быть разных типов: обычный, броня, еда и кидаемый, для каждого из них существует свой метод. Для создания предметов используется модуль Item. Каждый предмет имеет текстуру, которая задается в формате {name: "имя текстуры", meta: <номер текстуры>}, если номер текстуры 0, его можно не указывать.<br />
<br />
Item.createItem("строковый ID", "имя предмета", текстура, параметры) - создает обычный предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
stack: 64 // размер стака<br />
} </syntaxhighlight><br />
<br />
==== Создание еды ====<br />
<br />
Item.createFoodItem("строковый ID", "имя предмета", текстура, параметры) - создает съедобный предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false,// если true, не добавляет предмет в креатив<br />
stack: 64, // размер стака<br />
food: 1 // восполнение здоровья едой<br />
}</syntaxhighlight><br />
<br />
==== Создание кидаемого предмета ====<br />
<br />
Item.createThrowableItem("строковый ID", "имя предмета", текстура, параметры) - создает кидаемый предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
stack: 64 // сколько предметов будет в одном стаке, максимум 64.<br />
}</syntaxhighlight><br />
<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"><br />
==== Пример кидаемого предмета. ====<br />
<pre>IDRegistry.genItemID("throwableItem");&nbsp;<br />
Item.createThrowableItem("throwableItem", "Throwable Item", { name: "throwable_item", meta: 0}, {})<br />
</pre><br />
</div> </div> </div> </div> </div> </div> <br />
==== Создание брони ====<br />
<pre>Item.createArmorItem(&quot;строковый ID&quot;, &quot;имя предмета&quot;, текстура, параметры) - создает предмет брони на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.</pre><br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
armor: 1, // количество добавляемой брони в шкале защиты<br />
type: <обязательное значение>, // тип предмета "helmet"/"chestplate"/"leggings"/"boots"<br />
texture: <обязательное значение>, // текстура модели данной брони<br />
durability: 1 // прочность брони<br />
}</syntaxhighlight><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Пример брони ===<br />
<syntaxhighlight lang="Javascript">IDRegistry.genItemID("myHelmet"); // регистрируем ID для шлема<br />
IDRegistry.genItemID("myChestplate"); // регистриурем ID для нагрудника<br />
IDRegistry.genItemID("myLeggings"); // регистрируем ID для понож<br />
IDRegistry.genItemID("myBoots"); // регистрируем ID для ботинок<br />
<br />
Item.createArmorItem("myHelmet", "Helmet", {name: "helmet"}, {type: "helmet", armor: 2, durability: 149, texture: "armor/lay_1.png"}); // создаём шлем с ID myHelmet<br />
Item.createArmorItem("myChestplate", "Chestplate", {name: "chestplate"}, {type: "chestplate", armor: 6, durability: 216, texture: "armor/lay_1.png"}); // создаём нагрудник с ID myChestplate<br />
Item.createArmorItem("myLeggings", "Leggings", {name: "leggings"}, {type: "leggings", armor: 5, durability: 203, texture: "armor/lay_2.png"}); // создаём поножи с ID myLeggings<br />
Item.createArmorItem("myBoots", "Boots", {name: "boots"}, {type: "boots", armor: 2, durability: 176, texture: "armor/lay_1.png"}); // создаём ботинки с ID myBoots<br />
</syntaxhighlight><br />
</div> </div> <br />
=== Пример предмета ===<br />
<syntaxhighlight lang="Javascript">IDRegistry.genItemID("testItem");<br />
Item.createItem("testItem", "test item", {name: "stick", meta: 0}, {}); // создаем обычный предмет на ID testItem с текстурой палки и стандартными параметрами</syntaxhighlight><br />
</div> </div> </div> </div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D0%BE%D0%B5_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&diff=2583InnerCore/Продвинутое создание блоков и предметов2020-12-27T16:33:31Z<p>MineExplorer: </p>
<hr />
<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="b-pageLayout b-pageLayout__xs" data-layout="xs" id="pageLayout"><div class="b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight" id="pageContent"><br />
Кроме создания простейших блоков и предметов, Core Engine позволяет настраивать их и добавлять различные события для конкретного блока или предмета.<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
=== Специальные типы блоков ===<br />
<br />
Характеристики блока указывается в методах&nbsp;Block.createBlock и Block.createBlockWithRotation третьим параметром.&nbsp;Чтобы не повторять их для каждого блока, можно зарегистрировать специальный тип методом&nbsp;Block.createSpecialType(название, объект характеристик) и использовать название спец. типа.<br />
<br />
Все характеристики, их значения по умолчанию и разъяснение:<br />
<syntaxhighlight lang="Javascript">{<br />
base: 0, // блок из MCPE, который будет взят за основу в создании блока, могут быть скопированы некоторые свойства и материал<br />
solid: false, // является ли блок твёрдым<br />
rendertype: 0, // тип модели<br />
renderlayer: 4, // тип рендера, 1: прозрачный, 2: непрозрачный, 4: прозрачный, но исчезает вдали<br />
destroytime: 1, // время ломания блока, время уничтожения зависит от используемого инструмента, -1: неразрушимый.<br />
explosionres: 3, // взрывоустойчивость<br />
friction: 0.6, // коэффициент скольжения<br />
lightopacity: 1, // непрозрачность для света, сколько света будет поглощаться при прохождении через этот блок, 0 - полностью прозрачен, 15 - полностью непрозрачен<br />
lightlevel: 0, // свечение блока, 0 - нет свечения, 15 - максимальное свечение<br />
translucency: 1, // полупрозрачность, число от 0 до 1, влияет на наложение теней на блок. 0 - нормальные тени, 1 - нет теней и блок выглядит ярче остальных.<br />
renderallfaces: true, // отрисовывает все стороны прозрачных блоков,<br />
mapcolor: 0, // цвет блока на карте<br />
sound: "default" // тип звука для блока<br />
}<br />
</syntaxhighlight><br />
<br />
==== Пример: ====<br />
<br />
Пример создания специального типа блока и самого блока:<br />
<syntaxhighlight lang="Javascript">Block.createSpecialType("weak_light", { // блок этого типа будет абсолютно прозрачен для света и сам будет слабо светиться<br />
lightlevel: 11,<br />
lightopacity: 0<br />
});<br />
IDRegistry.genBlockID("testBlock"); // регистрация id<br />
Block.createBlock("testBlock", [<br />
{name: "test block", texture: [["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0]]}<br />
], "weak_light"); // создаем блок на данном специальном типе</syntaxhighlight><br />
</div><br />
<br />
=== Функция дропа (ломания) ===<br />
<br />
К конкретному блоку можно привязать функцию дропа, которая выполняется при ломании блока с данным id. Делается это с помощью функций Block.registerDropFunction("строковый id блока", функция дропа) и Block.registerDropFunctionForID(числовой id блока, функция дропа)<br />
<br />
Функция дропа имеет такой формат:<br />
<syntaxhighlight lang="Javascript">function(coords, id, data, toolLevel, enchantData, item, region) {<br />
// coords - объект, содержащий координаты разрушенного блока - {x: , y: , z: } - coords.x, coords.y, coords.z<br />
// id, data - id и data блока<br />
// toolLevel - уровень инструмента в руке<br />
// enchantData - зачарования инструмента<br />
// item - предмет в руке<br />
// если блок что-то дропает, эта функция должна вернуть массив из предметов, которые надо дропнуть, каждый предмет имеет формат [id, count, data] или [id, count, data, ExtraData]<br />
}</syntaxhighlight><br />
<br />
Пример:<br />
<syntaxhighlight lang="Javascript">Block.registerDropFunction("testBlock", function(coords, id, data, diggingLevel, toolLevel){<br />
return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз<br />
});<br />
<br />
// Полный аналог предыдущей функции, но с числовым id<br />
Block.registerDropFunctionForID(BlockID.testBlock, function(coords, id, data, diggingLevel, toolLevel){<br />
return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз<br />
});</syntaxhighlight><br />
<br />
=== Функция установки ===<br />
<br />
К конкретному блоку можно привязать функцию установки, которая выполняется при установке блока с данным id. Если функция зарегистрирована, то вместо стандартной установки блока на потенциальные координаты вызовется она, а из руки отнимется 1 блок. Делается это с помощью функций Block.registerPlaceFunction("строковый id блока", функция установки) и Block.registerPlaceFunctionForID(числовой id блока, функция установки).<br />
<br />
Функция установки имеет такой формат:<br />
<syntaxhighlight lang="Javascript">function(coords, item, block){<br />
// coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z<br />
// coords.relative - объект, содержащий потенциальные координаты установки - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z<br />
// item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data<br />
// block - блок, на который было произведено нажатие.<br />
<br />
// если функция произвела установку основного блока на координаты, отличающиеся от coords.relative, то она должна вернуть их в формате {x: , y: , z: }<br />
}</syntaxhighlight><br />
<div>Пример:<span id="cke_bm_170E" style="display: none">&nbsp;</span></div> <syntaxhighlight lang="Javascript">Block.registerPlaceFunction("testBlock", function(coords, item, block){<br />
World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок<br />
World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок<br />
});<br />
<br />
// Полный аналог предыдущей функции, но с числовым id<br />
Block.registerPlaceFunctionForID(BlockID.testBlock, function(coords, item, block){<br />
World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок<br />
World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок<br />
});</syntaxhighlight><br />
<br />
=== Установка формы ===<br />
<br />
Блоку с конкретным id и data можно установить форму, отличную от кубической. Для этого используется функция Block.setBlockShape(числовой id, {x: , y: , z: }, {x: , y: , z: }, data) - принимает id блока, координаты начала и координаты конца, а так же, если вы хотите сделать это для конкретной вариации блока, то определите последний параметр. Координаты в блоке могут быть от 0 до 1, стандартный блок имеет форму (0, 0, 0) - (1, 1, 1)<br />
<syntaxhighlight lang="Javascript">Block.setBlockShape(BlockID.testBlock, {x: 0.2, y: 0, z: 0.2}, {x: 0.8, y: 1, z: 0.8}) // установить всем вариациям форму столба</syntaxhighlight><br />
<br />
=== Установка свойств предмета ===<br />
<br />
Для установки свойств предметов используются следующие функции:<br />
<br />
*Item.setCategory(id, category) - аналог параметра category <br />
*Item.setEnchantType(id, enchant, value) - аналог параметра enchant <br />
*Item.setToolRender(id, enabled) - аналог параметра toolRender <br />
*Item.setMaxDamage(id, maxdamage) - аналог параметра maxDamage <br />
*Item.setStackedByData(id, enabled) - аналог параметра stackByData <br />
*Item.setProperties(id, props) - аналог параметра properties <br />
*Item.setUseAnimation(id, animType) - аналог параметра useAnimation <br />
<br />
Функции - получение параметров:<br />
<br />
*Item.getName(id, data, encode) - отдает имя предмета или блока с данным id и data, если encode true, то возвращает его в формате item.имя.name или block.имя.name <br />
*Item.getMaxDamage(id) - отдает максимальный дамаг предмета <br />
*Item.getMaxStack(id) - отдает размер стака <br />
*Item.getUseAnimation(id) - отдает анимацию использования <br />
*Item.isValid(id, data) - возвращает, существует ли данный предмет <br />
*Item.isNativeItem(id) - возвращает, является ли этот предмет предметом из MCPE, а не из модов <br />
<br />
==== Категории предметов (не работают) ====<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="Javascript"> DECORATION = 2;//декоративный предмет(?)<br />
FOOD = 4;//еда<br />
INTERNAL = 0;//(?)<br />
MATERIAL = 1;//материал<br />
TOOL = 3;//инструмент</syntaxhighlight><br />
<br />
=== Функция использования предмета ===<br />
<br />
К конкретному предмету можно привязать функцию использования, которая выполняется при использовании предмета с данным id. Делается это с помощью функций Item.registerUseFunction("строковый id предмета", функция использования) и Item.registerUseFunctionForID(числовой id предмета, функция использования).<br />
<br />
Функция использования имеет такой формат:<br />
<syntaxhighlight lang="Javascript">function(coords, item, block){<br />
// coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z<br />
// coords.relative - объект, содержащий потенциальные координаты установки блока - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z<br />
// item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data<br />
// block - блок, на который было произведено нажатие.<br />
}</syntaxhighlight><br />
<br />
=== Функция броска предмета ===<br />
<br />
К конкретному предмету можно привязать функцию, которая выполняется при разбивании брошенного предмета с данным id. Делается это с помощью функций Item.registerThrowableFunction("строковый id предмета", функция разбивания) и Item.registerThrowableFunctionForID(числовой id предмета, функция разбивания).<br />
<br />
Функция разбивания имеет такой формат:<br />
<syntaxhighlight lang="Javascript">function(projectile, item, target){<br />
// projectile - entity кинутого предмета<br />
// target - объект, содержащий координаты цели, а так же entity цели, если она является мобом - {x: , y: , z: } - target.x, target.y, target.z и target.entity<br />
// item - объект, содержащий предмет, который был брошен - {id: , count: , data: } - item.id, item.count, item.data<br />
}<br />
</syntaxhighlight><br />
</div> </div> </div> </div> </div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D0%BE%D0%B5_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&diff=2582InnerCore/Продвинутое создание блоков и предметов2020-12-27T16:32:45Z<p>MineExplorer: </p>
<hr />
<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="b-pageLayout b-pageLayout__xs" data-layout="xs" id="pageLayout"><div class="b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight" id="pageContent"><br />
Кроме создания простейших блоков и предметов, Core Engine позволяет настраивать их и добавлять различные события для конкретного блока или предмета.<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Специальные типы блоков ===<br />
<br />
Чтобы задать блоку дополнительные параметры (свечение, модель), используются специальные типы блоков. Регистрируются они с помощью функции<br />
<br />
Характеристики блока указывается в методах&nbsp;Block.createBlock и Block.createBlockWithRotation третьим параметром, чтобы не повторять их для каждого блока можно зарегистрировать специальный тип методом&nbsp;Block.createSpecialType(название, объект характеристик) и использовать название спец. типа.<br />
<br />
Все характеристики, их значения по умолчанию и разъяснение:<br />
<syntaxhighlight lang="Javascript">{<br />
base: 0, // блок из MCPE, который будет взят за основу в создании блока, могут быть скопированы некоторые свойства и материал<br />
solid: false, // является ли блок твёрдым<br />
rendertype: 0, // тип модели<br />
renderlayer: 4, // тип рендера, 1: прозрачный, 2: непрозрачный, 4: прозрачный, но исчезает вдали<br />
destroytime: 1, // время ломания блока, время уничтожения зависит от используемого инструмента, -1: неразрушимый.<br />
explosionres: 3, // взрывоустойчивость<br />
friction: 0.6, // коэффициент скольжения<br />
lightopacity: 1, // непрозрачность для света, сколько света будет поглощаться при прохождении через этот блок, 0 - полностью прозрачен, 15 - полностью непрозрачен<br />
lightlevel: 0, // свечение блока, 0 - нет свечения, 15 - максимальное свечение<br />
translucency: 1, // полупрозрачность, число от 0 до 1, влияет на наложение теней на блок. 0 - нормальные тени, 1 - нет теней и блок выглядит ярче остальных.<br />
renderallfaces: true, // отрисовывает все стороны прозрачных блоков,<br />
mapcolor: 0, // цвет блока на карте<br />
sound: "default" // тип звука для блока<br />
}<br />
</syntaxhighlight><br />
<br />
==== Пример: ====<br />
<br />
Пример создания специального типа блока и самого блока:<br />
<syntaxhighlight lang="Javascript">Block.createSpecialType("weak_light", { // блок этого типа будет абсолютно прозрачен для света и сам будет слабо светиться<br />
lightlevel: 11,<br />
lightopacity: 0<br />
});<br />
IDRegistry.genBlockID("testBlock"); // регистрация id<br />
Block.createBlock("testBlock", [<br />
{name: "test block", texture: [["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0]]}<br />
], "weak_light"); // создаем блок на данном специальном типе</syntaxhighlight><br />
</div> </div> <br />
=== Функция дропа (ломания) ===<br />
<br />
К конкретному блоку можно привязать функцию дропа, которая выполняется при ломании блока с данным id. Делается это с помощью функций Block.registerDropFunction("строковый id блока", функция дропа) и Block.registerDropFunctionForID(числовой id блока, функция дропа)<br />
<br />
Функция дропа имеет такой формат:<br />
<syntaxhighlight lang="Javascript">function(coords, id, data, toolLevel, enchantData, item, region) {<br />
// coords - объект, содержащий координаты разрушенного блока - {x: , y: , z: } - coords.x, coords.y, coords.z<br />
// id, data - id и data блока<br />
// toolLevel - уровень инструмента в руке<br />
// enchantData - зачарования инструмента<br />
// item - предмет в руке<br />
// если блок что-то дропает, эта функция должна вернуть массив из предметов, которые надо дропнуть, каждый предмет имеет формат [id, count, data] или [id, count, data, ExtraData]<br />
}</syntaxhighlight><br />
<br />
Пример:<br />
<syntaxhighlight lang="Javascript">Block.registerDropFunction("testBlock", function(coords, id, data, diggingLevel, toolLevel){<br />
return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз<br />
});<br />
<br />
// Полный аналог предыдущей функции, но с числовым id<br />
Block.registerDropFunctionForID(BlockID.testBlock, function(coords, id, data, diggingLevel, toolLevel){<br />
return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз<br />
});</syntaxhighlight><br />
<br />
=== Функция установки ===<br />
<br />
К конкретному блоку можно привязать функцию установки, которая выполняется при установке блока с данным id. Если функция зарегистрирована, то вместо стандартной установки блока на потенциальные координаты вызовется она, а из руки отнимется 1 блок. Делается это с помощью функций Block.registerPlaceFunction("строковый id блока", функция установки) и Block.registerPlaceFunctionForID(числовой id блока, функция установки).<br />
<br />
Функция установки имеет такой формат:<br />
<syntaxhighlight lang="Javascript">function(coords, item, block){<br />
// coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z<br />
// coords.relative - объект, содержащий потенциальные координаты установки - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z<br />
// item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data<br />
// block - блок, на который было произведено нажатие.<br />
<br />
// если функция произвела установку основного блока на координаты, отличающиеся от coords.relative, то она должна вернуть их в формате {x: , y: , z: }<br />
}</syntaxhighlight><br />
<div>Пример:<span id="cke_bm_170E" style="display: none">&nbsp;</span></div> <syntaxhighlight lang="Javascript">Block.registerPlaceFunction("testBlock", function(coords, item, block){<br />
World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок<br />
World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок<br />
});<br />
<br />
// Полный аналог предыдущей функции, но с числовым id<br />
Block.registerPlaceFunctionForID(BlockID.testBlock, function(coords, item, block){<br />
World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок<br />
World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок<br />
});</syntaxhighlight><br />
<br />
=== Установка формы ===<br />
<br />
Блоку с конкретным id и data можно установить форму, отличную от кубической. Для этого используется функция Block.setBlockShape(числовой id, {x: , y: , z: }, {x: , y: , z: }, data) - принимает id блока, координаты начала и координаты конца, а так же, если вы хотите сделать это для конкретной вариации блока, то определите последний параметр. Координаты в блоке могут быть от 0 до 1, стандартный блок имеет форму (0, 0, 0) - (1, 1, 1)<br />
<syntaxhighlight lang="Javascript">Block.setBlockShape(BlockID.testBlock, {x: 0.2, y: 0, z: 0.2}, {x: 0.8, y: 1, z: 0.8}) // установить всем вариациям форму столба</syntaxhighlight><br />
<br />
=== Установка свойств предмета ===<br />
<br />
Для установки свойств предметов используются следующие функции:<br />
<br />
*Item.setCategory(id, category) - аналог параметра category <br />
*Item.setEnchantType(id, enchant, value) - аналог параметра enchant <br />
*Item.setToolRender(id, enabled) - аналог параметра toolRender <br />
*Item.setMaxDamage(id, maxdamage) - аналог параметра maxDamage <br />
*Item.setStackedByData(id, enabled) - аналог параметра stackByData <br />
*Item.setProperties(id, props) - аналог параметра properties <br />
*Item.setUseAnimation(id, animType) - аналог параметра useAnimation <br />
<br />
Функции - получение параметров:<br />
<br />
*Item.getName(id, data, encode) - отдает имя предмета или блока с данным id и data, если encode true, то возвращает его в формате item.имя.name или block.имя.name <br />
*Item.getMaxDamage(id) - отдает максимальный дамаг предмета <br />
*Item.getMaxStack(id) - отдает размер стака <br />
*Item.getUseAnimation(id) - отдает анимацию использования <br />
*Item.isValid(id, data) - возвращает, существует ли данный предмет <br />
*Item.isNativeItem(id) - возвращает, является ли этот предмет предметом из MCPE, а не из модов <br />
<br />
==== Категории предметов (не работают) ====<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="Javascript"> DECORATION = 2;//декоративный предмет(?)<br />
FOOD = 4;//еда<br />
INTERNAL = 0;//(?)<br />
MATERIAL = 1;//материал<br />
TOOL = 3;//инструмент</syntaxhighlight><br />
<br />
=== Функция использования предмета ===<br />
<br />
К конкретному предмету можно привязать функцию использования, которая выполняется при использовании предмета с данным id. Делается это с помощью функций Item.registerUseFunction("строковый id предмета", функция использования) и Item.registerUseFunctionForID(числовой id предмета, функция использования).<br />
<br />
Функция использования имеет такой формат:<br />
<syntaxhighlight lang="Javascript">function(coords, item, block){<br />
// coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z<br />
// coords.relative - объект, содержащий потенциальные координаты установки блока - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z<br />
// item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data<br />
// block - блок, на который было произведено нажатие.<br />
}</syntaxhighlight><br />
<br />
=== Функция броска предмета ===<br />
<br />
К конкретному предмету можно привязать функцию, которая выполняется при разбивании брошенного предмета с данным id. Делается это с помощью функций Item.registerThrowableFunction("строковый id предмета", функция разбивания) и Item.registerThrowableFunctionForID(числовой id предмета, функция разбивания).<br />
<br />
Функция разбивания имеет такой формат:<br />
<syntaxhighlight lang="Javascript">function(projectile, item, target){<br />
// projectile - entity кинутого предмета<br />
// target - объект, содержащий координаты цели, а так же entity цели, если она является мобом - {x: , y: , z: } - target.x, target.y, target.z и target.entity<br />
// item - объект, содержащий предмет, который был брошен - {id: , count: , data: } - item.id, item.count, item.data<br />
}<br />
</syntaxhighlight><br />
</div> </div> </div> </div> </div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D0%BE%D0%B5_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&diff=2581InnerCore/Продвинутое создание блоков и предметов2020-12-27T16:15:56Z<p>MineExplorer: </p>
<hr />
<div><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="b-pageLayout b-pageLayout__xs" data-layout="xs" id="pageLayout"><div class="b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight" id="pageContent"><br />
Кроме создания простейших блоков и предметов, Core Engine позволяет настраивать их и добавлять различные события для конкретного блока или предмета.<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Специальные типы блоков ===<br />
<br />
Чтобы создать блок с параметрами, которые отличаются от стандартных (свечение, модель), используются специальные типы блоков. Регистрируются они с помощью функции Block.createSpecialType(объект характеристик) - функция принимает объект характеристик, которые нужно изменить и отдает специальный тип блока с этими характеристиками.<br />
<br />
Специальный тип, созданный этой функцией передается в функцию Block.createBlock и Block.createBlockWithRotation третим параметром, чтобы блок был создан для данного специального типа.<br />
<br />
Все характеристики, их значения по умолчанию и разъяснение:<br />
<syntaxhighlight lang="Javascript">{<br />
base: 20, // блок из MCPE, который будет взят за основу в создании блока, могут быть скопированы некоторые свойства и материал<br />
solid: true, // является ли блок твёрдым<br />
rendertype: 0, // тип модели<br />
renderlayer: 4, // тип рендера, 1: прозрачный, 2: непрозрачный, 4: прозрачный, но исчезает вдали<br />
destroytime: 1, // время ломания блока, время уничтожения зависит от используемого инструмента, -1: неразрушимый.<br />
explosionres: 2, // взрывоустойчивость<br />
lightopacity: 1, // непрозрачность для света, сколько света будет поглощаться при прохождении через этот блок, 0 - полностью прозрачен, 15 - полностью непрозрачен<br />
lightlevel: 0, // свечение блока, 0 - нет свечения, 15 - максимальное свечение<br />
translucency: 0, // полупрозрачность, число от 0 до 1, влияет на наложение теней на блок. 0 - нормальные тени, 1 - нет теней и блок выглядит ярче остальных.<br />
renderallfaces: true // отрисовывает все стороны прозрачных блоков<br />
}<br />
</syntaxhighlight><br />
<br />
==== Пример: ====<br />
<br />
Пример создания специального типа блока и самого блока:<br />
<syntaxhighlight lang="Javascript">Block.createSpecialType("weak_light", { // блок этого типа будет абсолютно прозрачен для света и сам будет слабо светиться<br />
lightlevel: 11,<br />
lightopacity: 0<br />
});<br />
IDRegistry.genBlockID("testBlock"); // регистрация id<br />
Block.createBlock("testBlock", [<br />
{name: "test block", texture: [["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0]]}<br />
], "weak_light"); // создаем блок на данном специальном типе</syntaxhighlight><br />
</div> </div> <br />
=== Функция дропа (ломания) ===<br />
<br />
К конкретному блоку можно привязать функцию дропа, которая выполняется при ломании блока с данным id. Делается это с помощью функций Block.registerDropFunction("строковый id блока", функция дропа) и Block.registerDropFunctionForID(числовой id блока, функция дропа)<br />
<br />
Функция дропа имеет такой формат:<br />
<syntaxhighlight lang="Javascript">function(coords, id, data, toolLevel, enchantData, item, region) {<br />
// coords - объект, содержащий координаты разрушенного блока - {x: , y: , z: } - coords.x, coords.y, coords.z<br />
// id, data - id и data блока<br />
// toolLevel - уровень инструмента в руке<br />
// enchantData - зачарования инструмента<br />
// item - предмет в руке<br />
// если блок что-то дропает, эта функция должна вернуть массив из предметов, которые надо дропнуть, каждый предмет имеет формат [id, count, data] или [id, count, data, ExtraData]<br />
}</syntaxhighlight><br />
<br />
Пример:<br />
<syntaxhighlight lang="Javascript">Block.registerDropFunction("testBlock", function(coords, id, data, diggingLevel, toolLevel){<br />
return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз<br />
});<br />
<br />
// Полный аналог предыдущей функции, но с числовым id<br />
Block.registerDropFunctionForID(BlockID.testBlock, function(coords, id, data, diggingLevel, toolLevel){<br />
return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз<br />
});</syntaxhighlight><br />
<br />
=== Функция установки ===<br />
<br />
К конкретному блоку можно привязать функцию установки, которая выполняется при установке блока с данным id. Если функция зарегистрирована, то вместо стандартной установки блока на потенциальные координаты вызовется она, а из руки отнимется 1 блок. Делается это с помощью функций Block.registerPlaceFunction("строковый id блока", функция установки) и Block.registerPlaceFunctionForID(числовой id блока, функция установки).<br />
<br />
Функция установки имеет такой формат:<br />
<syntaxhighlight lang="Javascript">function(coords, item, block){<br />
// coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z<br />
// coords.relative - объект, содержащий потенциальные координаты установки - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z<br />
// item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data<br />
// block - блок, на который было произведено нажатие.<br />
<br />
// если функция произвела установку основного блока на координаты, отличающиеся от coords.relative, то она должна вернуть их в формате {x: , y: , z: }<br />
}</syntaxhighlight><br />
<div>Пример:<span id="cke_bm_170E" style="display: none">&nbsp;</span></div> <syntaxhighlight lang="Javascript">Block.registerPlaceFunction("testBlock", function(coords, item, block){<br />
World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок<br />
World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок<br />
});<br />
<br />
// Полный аналог предыдущей функции, но с числовым id<br />
Block.registerPlaceFunctionForID(BlockID.testBlock, function(coords, item, block){<br />
World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок<br />
World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок<br />
});</syntaxhighlight><br />
<br />
=== Установка формы ===<br />
<br />
Блоку с конкретным id и data можно установить форму, отличную от кубической. Для этого используется функция Block.setBlockShape(числовой id, {x: , y: , z: }, {x: , y: , z: }, data) - принимает id блока, координаты начала и координаты конца, а так же, если вы хотите сделать это для конкретной вариации блока, то определите последний параметр. Координаты в блоке могут быть от 0 до 1, стандартный блок имеет форму (0, 0, 0) - (1, 1, 1)<br />
<syntaxhighlight lang="Javascript">Block.setBlockShape(BlockID.testBlock, {x: 0.2, y: 0, z: 0.2}, {x: 0.8, y: 1, z: 0.8}) // установить всем вариациям форму столба</syntaxhighlight><br />
<br />
=== Установка свойств предмета ===<br />
<br />
Для установки свойств предметов используются следующие функции:<br />
<br />
*Item.setCategory(id, category) - аналог параметра category <br />
*Item.setEnchantType(id, enchant, value) - аналог параметра enchant <br />
*Item.setToolRender(id, enabled) - аналог параметра toolRender <br />
*Item.setMaxDamage(id, maxdamage) - аналог параметра maxDamage <br />
*Item.setStackedByData(id, enabled) - аналог параметра stackByData <br />
*Item.setProperties(id, props) - аналог параметра properties <br />
*Item.setUseAnimation(id, animType) - аналог параметра useAnimation <br />
<br />
Функции - получение параметров:<br />
<br />
*Item.getName(id, data, encode) - отдает имя предмета или блока с данным id и data, если encode true, то возвращает его в формате item.имя.name или block.имя.name <br />
*Item.getMaxDamage(id) - отдает максимальный дамаг предмета <br />
*Item.getMaxStack(id) - отдает размер стака <br />
*Item.getUseAnimation(id) - отдает анимацию использования <br />
*Item.isValid(id, data) - возвращает, существует ли данный предмет <br />
*Item.isNativeItem(id) - возвращает, является ли этот предмет предметом из MCPE, а не из модов <br />
<br />
==== Категории предметов (не работают) ====<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="Javascript"> DECORATION = 2;//декоративный предмет(?)<br />
FOOD = 4;//еда<br />
INTERNAL = 0;//(?)<br />
MATERIAL = 1;//материал<br />
TOOL = 3;//инструмент</syntaxhighlight><br />
<br />
=== Функция использования предмета ===<br />
<br />
К конкретному предмету можно привязать функцию использования, которая выполняется при использовании предмета с данным id. Делается это с помощью функций Item.registerUseFunction("строковый id предмета", функция использования) и Item.registerUseFunctionForID(числовой id предмета, функция использования).<br />
<br />
Функция использования имеет такой формат:<br />
<syntaxhighlight lang="Javascript">function(coords, item, block){<br />
// coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z<br />
// coords.relative - объект, содержащий потенциальные координаты установки блока - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z<br />
// item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data<br />
// block - блок, на который было произведено нажатие.<br />
}</syntaxhighlight><br />
<br />
=== Функция броска предмета ===<br />
<br />
К конкретному предмету можно привязать функцию, которая выполняется при разбивании брошенного предмета с данным id. Делается это с помощью функций Item.registerThrowableFunction("строковый id предмета", функция разбивания) и Item.registerThrowableFunctionForID(числовой id предмета, функция разбивания).<br />
<br />
Функция разбивания имеет такой формат:<br />
<syntaxhighlight lang="Javascript">function(projectile, item, target){<br />
// projectile - entity кинутого предмета<br />
// target - объект, содержащий координаты цели, а так же entity цели, если она является мобом - {x: , y: , z: } - target.x, target.y, target.z и target.entity<br />
// item - объект, содержащий предмет, который был брошен - {id: , count: , data: } - item.id, item.count, item.data<br />
}<br />
</syntaxhighlight><br />
</div> </div> </div> </div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%9F%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D0%BE%D0%B5_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&diff=2580InnerCore/Продвинутое создание блоков и предметов2020-12-27T16:14:03Z<p>MineExplorer: </p>
<hr />
<div><div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="b-pageLayout b-pageLayout__xs" data-layout="xs" id="pageLayout"><div class="b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight" id="pageContent"><br />
Кроме создания простейших блоков и предметов, Core Engine позволяет настраивать их и добавлять различные события для конкретного блока или предмета.<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Специальные типы блоков ===<br />
<br />
Чтобы создать блок с параметрами, которые отличаются от стандартных (свечение, модель), используются специальные типы блоков. Регистрируются они с помощью функции Block.createSpecialType(объект характеристик) - функция принимает объект характеристик, которые нужно изменить и отдает специальный тип блока с этими характеристиками.<br />
<br />
Специальный тип, созданный этой функцией передается в функцию Block.createBlock и Block.createBlockWithRotation третим параметром, чтобы блок был создан для данного специального типа. На одном специальном типе может быть создано суммарно до 16 вариаций различных блоков.<br />
<br />
Все характеристики, их значения по-умолчанию и разъяснение:<br />
<syntaxhighlight lang="Javascript">{<br />
base: 20, // блок из MCPE, который будет взят за основу в создании блока, могут быть скопированы некоторые свойства и материал<br />
solid: true, // является ли блок твёрдым<br />
rendertype: 0, // тип модели<br />
renderlayer: 4, // тип рендера, 1: прозрачный, 2: непрозрачный, 4: прозрачный, но исчезает вдали<br />
destroytime: 1, // время ломания блока, время уничтожения зависит от используемого инструмента, -1: неразрушимый.<br />
explosionres: 2, // взрывоустойчивость<br />
lightopacity: 1, // непрозрачность для света, сколько света будет поглощаться при прохождении через этот блок, 0 - полностью прозрачен, 15 - полностью непрозрачен<br />
lightlevel: 0, // свечение блока, 0 - нет свечения, 15 - максимальное свечение<br />
translucency: 0, // полупрозрачность, число от 0 до 1, влияет на наложение теней на блок. При 1 нет теней и блок выглядит ярче остальных.<br />
renderallfaces: true // отрисовывает все стороны прозрачных блоков<br />
}<br />
</syntaxhighlight><br />
<br />
==== Пример: ====<br />
<br />
Пример создания специального типа блока и самого блока:<br />
<syntaxhighlight lang="Javascript">Block.createSpecialType("weak_light", { // блок этого типа будет абсолютно прозрачен для света и сам будет слабо светиться<br />
lightlevel: 11,<br />
lightopacity: 0<br />
});<br />
IDRegistry.genBlockID("testBlock"); // регистрация id<br />
Block.createBlock("testBlock", [<br />
{name: "test block", texture: [["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0], ["obsidian", 0]]}<br />
], "weak_light"); // создаем блок на данном специальном типе</syntaxhighlight><br />
</div> </div> <br />
=== Функция дропа (ломания) ===<br />
<br />
К конкретному блоку можно привязать функцию дропа, которая выполняется при ломании блока с данным id. Делается это с помощью функций Block.registerDropFunction("строковый id блока", функция дропа) и Block.registerDropFunctionForID(числовой id блока, функция дропа)<br />
<br />
Функция дропа имеет такой формат:<br />
<syntaxhighlight lang="Javascript">function(coords, id, data, toolLevel, enchantData, item, region) {<br />
// coords - объект, содержащий координаты разрушенного блока - {x: , y: , z: } - coords.x, coords.y, coords.z<br />
// id, data - id и data блока<br />
// toolLevel - уровень инструмента в руке<br />
// enchantData - зачарования инструмента<br />
// item - предмет в руке<br />
// если блок что-то дропает, эта функция должна вернуть массив из предметов, которые надо дропнуть, каждый предмет имеет формат [id, count, data] или [id, count, data, ExtraData]<br />
}</syntaxhighlight><br />
<br />
Пример:<br />
<syntaxhighlight lang="Javascript">Block.registerDropFunction("testBlock", function(coords, id, data, diggingLevel, toolLevel){<br />
return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз<br />
});<br />
<br />
// Полный аналог предыдущей функции, но с числовым id<br />
Block.registerDropFunctionForID(BlockID.testBlock, function(coords, id, data, diggingLevel, toolLevel){<br />
return [[id, 1, data], [264, 1, 0]]; // дропнуть сам блок и алмаз<br />
});</syntaxhighlight><br />
<br />
=== Функция установки ===<br />
<br />
К конкретному блоку можно привязать функцию установки, которая выполняется при установке блока с данным id. Если функция зарегистрирована, то вместо стандартной установки блока на потенциальные координаты вызовется она, а из руки отнимется 1 блок. Делается это с помощью функций Block.registerPlaceFunction("строковый id блока", функция установки) и Block.registerPlaceFunctionForID(числовой id блока, функция установки).<br />
<br />
Функция установки имеет такой формат:<br />
<syntaxhighlight lang="Javascript">function(coords, item, block){<br />
// coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z<br />
// coords.relative - объект, содержащий потенциальные координаты установки - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z<br />
// item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data<br />
// block - блок, на который было произведено нажатие.<br />
<br />
// если функция произвела установку основного блока на координаты, отличающиеся от coords.relative, то она должна вернуть их в формате {x: , y: , z: }<br />
}</syntaxhighlight><br />
<div>Пример:<span id="cke_bm_170E" style="display: none">&nbsp;</span></div> <syntaxhighlight lang="Javascript">Block.registerPlaceFunction("testBlock", function(coords, item, block){<br />
World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок<br />
World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок<br />
});<br />
<br />
// Полный аналог предыдущей функции, но с числовым id<br />
Block.registerPlaceFunctionForID(BlockID.testBlock, function(coords, item, block){<br />
World.setBlock(coords.relative.x, coords.relative.y, coords.relative.z, item.id, item.data); // установим наш блок<br />
World.setBlock(coords.relative.x, coords.relative.y + 1, coords.relative.z, item.id, item.data); // над ним установим алмазный блок<br />
});</syntaxhighlight><br />
<br />
=== Установка формы ===<br />
<br />
Блоку с конкретным id и data можно установить форму, отличную от кубической. Для этого используется функция Block.setBlockShape(числовой id, {x: , y: , z: }, {x: , y: , z: }, data) - принимает id блока, координаты начала и координаты конца, а так же, если вы хотите сделать это для конкретной вариации блока, то определите последний параметр. Координаты в блоке могут быть от 0 до 1, стандартный блок имеет форму (0, 0, 0) - (1, 1, 1)<br />
<syntaxhighlight lang="Javascript">Block.setBlockShape(BlockID.testBlock, {x: 0.2, y: 0, z: 0.2}, {x: 0.8, y: 1, z: 0.8}) // установить всем вариациям форму столба</syntaxhighlight><br />
<br />
=== Установка свойств предмета ===<br />
<br />
Для установки свойств предметов используются следующие функции:<br />
<br />
*Item.setCategory(id, category) - аналог параметра category <br />
*Item.setEnchantType(id, enchant, value) - аналог параметра enchant <br />
*Item.setToolRender(id, enabled) - аналог параметра toolRender <br />
*Item.setMaxDamage(id, maxdamage) - аналог параметра maxDamage <br />
*Item.setStackedByData(id, enabled) - аналог параметра stackByData <br />
*Item.setProperties(id, props) - аналог параметра properties <br />
*Item.setUseAnimation(id, animType) - аналог параметра useAnimation <br />
<br />
Функции - получение параметров:<br />
<br />
*Item.getName(id, data, encode) - отдает имя предмета или блока с данным id и data, если encode true, то возвращает его в формате item.имя.name или block.имя.name <br />
*Item.getMaxDamage(id) - отдает максимальный дамаг предмета <br />
*Item.getMaxStack(id) - отдает размер стака <br />
*Item.getUseAnimation(id) - отдает анимацию использования <br />
*Item.isValid(id, data) - возвращает, существует ли данный предмет <br />
*Item.isNativeItem(id) - возвращает, является ли этот предмет предметом из MCPE, а не из модов <br />
<br />
==== Категории предметов (не работают) ====<br />
<syntaxhighlight lang="Javascript"> DECORATION = 2;//декоративный предмет(?)<br />
FOOD = 4;//еда<br />
INTERNAL = 0;//(?)<br />
MATERIAL = 1;//материал<br />
TOOL = 3;//инструмент</syntaxhighlight><br />
<br />
=== Функция использования предмета ===<br />
<br />
К конкретному предмету можно привязать функцию использования, которая выполняется при использовании предмета с данным id. Делается это с помощью функций Item.registerUseFunction("строковый id предмета", функция использования) и Item.registerUseFunctionForID(числовой id предмета, функция использования).<br />
<br />
Функция использования имеет такой формат:<br />
<syntaxhighlight lang="Javascript">function(coords, item, block){<br />
// coords - объект, содержащий координаты блока, на который было произведено нажатие - {x: , y: , z: } - coords.x, coords.y, coords.z<br />
// coords.relative - объект, содержащий потенциальные координаты установки блока - {x: , y: , z: } - coords.relative.x, coords.relative.y, coords.relative.z<br />
// item - объект, содержащий предмет в руке игрока - {id: , count: , data: } - item.id, item.count, item.data<br />
// block - блок, на который было произведено нажатие.<br />
}</syntaxhighlight><br />
<br />
=== Функция броска предмета ===<br />
<br />
К конкретному предмету можно привязать функцию, которая выполняется при разбивании брошенного предмета с данным id. Делается это с помощью функций Item.registerThrowableFunction("строковый id предмета", функция разбивания) и Item.registerThrowableFunctionForID(числовой id предмета, функция разбивания).<br />
<br />
Функция разбивания имеет такой формат:<br />
<syntaxhighlight lang="Javascript">function(projectile, item, target){<br />
// projectile - entity кинутого предмета<br />
// target - объект, содержащий координаты цели, а так же entity цели, если она является мобом - {x: , y: , z: } - target.x, target.y, target.z и target.entity<br />
// item - объект, содержащий предмет, который был брошен - {id: , count: , data: } - item.id, item.count, item.data<br />
}<br />
</syntaxhighlight><br />
</div> </div> </div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&diff=2579InnerCore/Создание блоков и предметов2020-12-27T15:54:30Z<p>MineExplorer: </p>
<hr />
<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"><br />
=== Регистрация ID ===<br />
<br />
ID - уникальный идентефикатор блока\предмета, задается строкой и натуральным числом, которое сопоставляется этой строке. Чтобы зарегистрировать ID, используется модуль IDRegistry.<br />
<br />
Для регистрации ID блока используется метод IDRegistry.genBlockID("строковый ID") - после вызова этой функции сгенерируется новый уникальный ID для блока, доступ к числовому значению которого может быть произведен как BlockID.<строковый ID><br />
<br />
Для регистрации ID предмета используется метод IDRegistry.genItemID("строковый ID") - после вызова этой функции сгенерируется новый уникальный ID для предмета, доступ к числовому значению которого может быть произведен как ItemID.<строковый ID><br />
<br />
Примеры:<br />
<syntaxhighlight lang="Javascript">IDRegistry.genBlockID("testBlock"); // доступ BlockID.testBlock<br />
IDRegistry.genItemID("testItem"); // доступ ItemID.testItem</syntaxhighlight><br />
</div> <div class="mw-parser-output"><br />
=== Текстуры ===<br />
<br />
В ресурсах мода текстуры блоков и предметов задаются в определенном формате: каждая текстура должна быть в формате .png и имеет имя и номер, название любой текстуры выглядит так: имя_номер.png и никак иначе. Номера текстур с одним именем должны идти последовательно и начинаться с 0.<br />
<br />
Текстуры блоков в ресурспаке располагаются по адресу res/terrain-atlas/<br />
<br />
Текстуры предметов&nbsp;в ресурспаке располагаются по адресу res/items-opaque/<br />
<br />
Текстуры брони в ресурспаке распологаются по адресу res/armor<br />
</div> <br />
=== Создание блоков ===<br />
<br />
После регистрации ID для блока, создается сам блок на этом ID. На одном ID может быть создано несколько вариаций блока, каждая из которых обладает своим именем и текстурой, разные вариации одного блока в мире будут иметь один ID, но разные значения metadata, подробнее об этом будет позднее. Для создания блоков используется модуль Block.<br />
<br />
Метод Block.createBlock("строковый ID", [вариация1, вариация2, ...]) - создает блок и все его вариации на ранее зарегистрированном ID, если вариация 1, то просто создает данный блок.<br />
<br />
Каждая вариация в массиве имеет формат<br />
<syntaxhighlight lang="Javascript">{<br />
name: "имя вариации", <br />
texture: [<br />
["название1", индекс1], // bottom<br />
["название2", индекс2], // top<br />
["название3", индекс3], // back<br />
["название4", индекс4], // front<br />
["название5", индекс5], // left<br />
["название6", индекс6] // right<br />
], <br />
inCreative: true/false //(добавлять ли данную вариацию блока в креатив)<br />
}</syntaxhighlight><br />
<br />
Если текстур указано меньше, чем 6, то последняя из них будет дублирована несколько раз, чтобы дополнить их кол-во до 6.<br />
<br />
'''Пример''':<br />
<syntaxhighlight lang="Javascript">IDRegistry.genBlockID("testBlock"); // регистрация<br />
Block.createBlock("testBlock", [<br />
{name: "test block", texture: [["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0]], inCreative: true}<br />
]); // создание простого блока на ID "testBlock" с текстурой досок на всех сторонах, будет добавлен в креатив</syntaxhighlight><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
==== Создание блоков с поворотом ====<br />
<br />
Метод Block.createBlockWithRotation -&nbsp;&nbsp;принимает те же аргументы, что и Block.createBlock, но для каждой вариации блока создает 4 вариации, которые реализуют поворот, блок, созданный этим методом, автоматически будет ставиться с нужным поворотом.<br />
</div> </div> <br />
=== Создание предметов ===<br />
<br />
После регистрации ID предмета, создается сам предмет на этом ID. Предметы могут быть разных типов: обычный, броня, еда и кидаемый, для каждого из них существует свой метод. Для создания предметов используется модуль Item. Каждый предмет имеет текстуру, которая задается в формате {name: "имя текстуры", meta: <номер текстуры>}, если номер текстуры 0, его можно не указывать.<br />
<br />
Item.createItem("строковый ID", "имя предмета", текстура, параметры) - создает обычный предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
stack: 64 // размер стака<br />
} </syntaxhighlight><br />
<br />
==== Создание еды ====<br />
<br />
Item.createFoodItem("строковый ID", "имя предмета", текстура, параметры) - создает съедобный предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false,// если true, не добавляет предмет в креатив<br />
stack: 64, // размер стака<br />
food: 1 // восполнение здоровья едой<br />
}</syntaxhighlight><br />
<br />
==== Создание кидаемого предмета ====<br />
<br />
Item.createThrowableItem("строковый ID", "имя предмета", текстура, параметры) - создает кидаемый предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
stack: 64 // сколько предметов будет в одном стаке, максимум 64.<br />
}</syntaxhighlight><br />
<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"><br />
==== Пример кидаемого предмета. ====<br />
<pre>IDRegistry.genItemID("throwableItem");&nbsp;<br />
Item.createThrowableItem("throwableItem", "Throwable Item", { name: "throwable_item", meta: 0}, {})<br />
</pre><br />
</div> </div> </div> </div> </div> </div> <br />
==== Создание брони ====<br />
<pre>Item.createArmorItem(&quot;строковый ID&quot;, &quot;имя предмета&quot;, текстура, параметры) - создает предмет брони на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.</pre><br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
armor: 1, // количество добавляемой брони в шкале защиты<br />
type: <обязательное значение>, // тип предмета "helmet"/"chestplate"/"leggings"/"boots"<br />
texture: <обязательное значение>, // текстура модели данной брони<br />
durability: 1 // прочность брони<br />
}</syntaxhighlight><br />
<br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
=== Пример брони ===<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="Javascript">IDRegistry.genItemID("myHelmet"); // генерируем ID для шлема<br />
IDRegistry.genItemID("myChestplate"); // генерируем ID для нагрудника<br />
IDRegistry.genItemID("myLeggings"); // генерируем ID для понож<br />
IDRegistry.genItemID("myBoots"); // генерируем ID для ботинок<br />
<br />
Item.createArmorItem("myHelmet", "Helmet", {name: "helmet"}, {type: "helmet", armor: 2, durability: 149, texture: "armor/lay_1.png"}); // создаём шлем с ID myHelmet<br />
Item.createArmorItem("myChestplate", "Chestplate", {name: "chestplate"}, {type: "chestplate", armor: 6, durability: 216, texture: "armor/lay_1.png"}); // создаём нагрудник с ID myChestplate<br />
Item.createArmorItem("myLeggings", "Leggings", {name: "leggings"}, {type: "leggings", armor: 5, durability: 203, texture: "armor/lay_2.png"}); // создаём поножи с ID myLeggings<br />
Item.createArmorItem("myBoots", "Boots", {name: "boots"}, {type: "boots", armor: 2, durability: 176, texture: "armor/lay_1.png"}); // создаём ботинки с ID myBoots</syntaxhighlight><br />
<div class="mw-parser-output">&nbsp;</div> </div></div><br />
<br />
=== Пример предмета ===<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="Javascript">IDRegistry.genItemID("testItem");<br />
Item.createItem("testItem", "test item", {name: "stick", meta: 0}, {}); // создаем обычный предмет на ID testItem с текстурой палки и стандартными параметрами<br />
</syntaxhighlight><br />
</div> </div> </div> </div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2_%D0%B8_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BE%D0%B2&diff=2578InnerCore/Создание блоков и предметов2020-12-27T15:53:22Z<p>MineExplorer: </p>
<hr />
<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"><br />
=== Регистрация ID ===<br />
<br />
ID - уникальный идентефикатор блока\предмета, задается строкой и натуральным числом, которое сопоставляется этой строке. Чтобы зарегистрировать ID, используется модуль IDRegistry.<br />
<br />
Для регистрации ID блока используется метод IDRegistry.genBlockID("строковый ID") - после вызова этой функции сгенерируется новый уникальный ID для блока, доступ к числовому значению которого может быть произведен как BlockID.<строковый ID><br />
<br />
Для регистрации ID предмета используется метод IDRegistry.genItemID("строковый ID") - после вызова этой функции сгенерируется новый уникальный ID для предмета, доступ к числовому значению которого может быть произведен как ItemID.<строковый ID><br />
<br />
Примеры:<br />
<syntaxhighlight lang="Javascript">IDRegistry.genBlockID("testBlock"); // доступ BlockID.testBlock<br />
IDRegistry.genItemID("testItem"); // доступ ItemID.testItem</syntaxhighlight><br />
</div> <div class="mw-parser-output"><br />
=== Текстуры ===<br />
<br />
В ресурсах мода текстуры блоков и предметов задаются в определенном формате: каждая текстура должна быть в формате .png и имеет имя и номер, название любой текстуры выглядит так: имя_номер.png и никак иначе. Номера текстур с одним именем должны идти последовательно и начинаться с 0.<br />
<br />
Текстуры блоков в ресурспаке располагаются по адресу res/terrain-atlas/<br />
<br />
Текстуры предметов&nbsp;в ресурспаке располагаются по адресу res/items-opaque/<br />
<br />
Текстуры брони в ресурспаке распологаются по адресу res/armor<br />
</div> <br />
=== Создание блоков ===<br />
<br />
После регистрации ID для блока, создается сам блок на этом ID. На одном ID может быть создано несколько вариаций блока, каждая из которых обладает своим именем и текстурой, разные вариации одного блока в мире будут иметь один ID, но разные значения metadata, подробнее об этом будет позднее. Для создания блоков используется модуль Block.<br />
<br />
Метод Block.createBlock("строковый ID", [вариация1, вариация2, ...]) - создает блок и все его вариации на ранее зарегистрированном ID, если вариация 1, то просто создает данный блок.<br />
<br />
Каждая вариация в массиве имеет формат<br />
<syntaxhighlight lang="Javascript">{<br />
name: "имя вариации", <br />
texture: [<br />
["название1", индекс1], // bottom<br />
["название2", индекс2], // top<br />
["название3", индекс3], // back<br />
["название4", индекс4], // front<br />
["название5", индекс5], // left<br />
["название6", индекс6] // right<br />
], <br />
inCreative: true/false //(добавлять ли данную вариацию блока в креатив)<br />
}</syntaxhighlight><br />
<br />
Если текстур указано меньше, чем 6, то последняя из них будет дублирована несколько раз, чтобы дополнить их кол-во до 6.<br />
<br />
'''Пример''':<br />
<syntaxhighlight lang="Javascript">IDRegistry.genBlockID("testBlock"); // регистрация<br />
Block.createBlock("testBlock", [<br />
{name: "test block", texture: [["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0], ["planks", 0]], inCreative: true}<br />
]); // создание простого блока на ID "testBlock" с текстурой досок на всех сторонах, будет добавлен в креатив</syntaxhighlight><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
==== Создание блоков с поворотом ====<br />
<br />
Метод Block.createBlockWithRotation -&nbsp;&nbsp;принимает те же аргументы, что и Block.createBlock, но для каждой вариации блока создает 4 вариации, которые реализуют поворот, блок, созданный этим методом, автоматически будет ставиться с нужным поворотом.<br />
</div> </div> <br />
=== Создание предметов ===<br />
<br />
После регистрации ID предмета, создается сам предмет на этом ID. Предметы могут быть разных типов: обычный, броня, еда и кидаемый, для каждого из них существует свой метод. Для создания предметов используется модуль Item. Каждый предмет имеет текстуру, которая задается в формате {name: "имя текстуры", meta: <номер текстуры>}, если номер текстуры 0, его можно не указывать.<br />
<br />
Item.createItem("строковый ID", "имя предмета", текстура, параметры) - создает обычный предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
stack: 64 // размер стака<br />
} </syntaxhighlight><br />
<br />
==== Создание еды ====<br />
<br />
Item.createFoodItem("строковый ID", "имя предмета", текстура, параметры) - создает съедобный предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false,// если true, не добавляет предмет в креатив<br />
stack: 64, // размер стака<br />
food: 1 // восполнение здоровья едой<br />
}</syntaxhighlight><br />
<br />
==== Создание кидаемого предмета ====<br />
<br />
Item.createThrowableItem("строковый ID", "имя предмета", текстура, параметры) - создает кидаемый предмет на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.<br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
stack: 64 // сколько предметов будет в одном стаке, максимум 64.<br />
}</syntaxhighlight><br />
<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"><br />
==== Пример кидаемого предмета. ====<br />
<pre>IDRegistry.genItemID("throwableItem");&nbsp;<br />
Item.createThrowableItem("throwableItem", "Throwable Item", { name: "throwable_item", meta: 0}, {})<br />
</pre><br />
</div> </div> </div> </div> </div> </div> <br />
==== Создание брони ====<br />
<pre>Item.createArmorItem(&quot;строковый ID&quot;, &quot;имя предмета&quot;, текстура, параметры) - создает предмет брони на ранее зарегистрированном строковом ID, с данным именем, текстурой и параметрами.</pre><br />
<br />
Параметры имеют формат, если вы не хотите изменять значения по-умолчанию, просто не пишите их:<br />
<syntaxhighlight lang="Javascript">{<br />
isTech: false, // если true, не добавляет предмет в креатив<br />
armor: 1, // количество добавляемой брони в шкале защиты<br />
type: <обязательное значение>, // тип предмета "helmet"/"chestplate"/"leggings"/"boots"<br />
texture: <обязательное значение>, // текстура модели данной брони<br />
durability: 1 // прочность брони<br />
}</syntaxhighlight><br />
<br />
<div class="mw-parser-output"><br />
=== Пример брони ===<br />
<syntaxhighlight lang="Javascript">IDRegistry.genItemID("myHelmet"); // генерируем ID для шлема<br />
IDRegistry.genItemID("myChestplate"); // генерируем ID для нагрудника<br />
IDRegistry.genItemID("myLeggings"); // генерируем ID для понож<br />
IDRegistry.genItemID("myBoots"); // генерируем ID для ботинок<br />
<br />
Item.createArmorItem("myHelmet", "Helmet", {name: "helmet"}, {type: "helmet", armor: 2, durability: 149, texture: "armor/lay_1.png"}); // создаём шлем<br />
Item.createArmorItem("myChestplate", "Chestplate", {name: "chestplate"}, {type: "chestplate", armor: 6, durability: 216, texture: "armor/lay_1.png"}); // создаём нагрудник<br />
Item.createArmorItem("myLeggings", "Leggings", {name: "leggings"}, {type: "leggings", armor: 5, durability: 203, texture: "armor/lay_2.png"}); // создаём поножи<br />
Item.createArmorItem("myBoots", "Boots", {name: "boots"}, {type: "boots", armor: 2, durability: 176, texture: "armor/lay_1.png"}); // создаём ботинки</syntaxhighlight><br />
<div class="mw-parser-output">&nbsp;</div> </div><br />
<br />
=== Пример предмета ===<br />
<br />
&nbsp;<br />
<syntaxhighlight lang="Javascript">IDRegistry.genItemID("testItem");<br />
Item.createItem("testItem", "test item", {name: "stick", meta: 0}, {}); // создаем обычный предмет на ID testItem с текстурой палки и стандартными параметрами<br />
</syntaxhighlight><br />
</div> </div> </div> </div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/ToolLib&diff=2577InnerCore/Libs/ToolLib2020-12-27T15:43:46Z<p>MineExplorer: </p>
<hr />
<div>ToolLib -&nbsp;Библиотека, предоставляющая универсальные типы инструментов и упрощающая создание инструментов.<br />
<br />
== Загрузка ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1" style="width: 579px;"<br />
|-<br />
| style="width: 68px; text-align: center;" | '''Версия'''<br />
| style="width: 81px; text-align: center;" | '''Скачать'''<br />
| style="width: 305px; text-align: center;" | '''Изменения'''<br />
| style="width: 100px; text-align: center;" | '''Дата выхода'''<br />
|-<br />
| style="width: 68px; text-align: center;" | '''23'''<br />
| style="width: 81px; text-align: center;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/toollib-v23 Скачать]<br />
| style="width: 305px;" | - Поддержка мультиплеера<br />
| style="width: 100px; text-align: center;" | 27.12.20<br />
|-<br />
| style="width: 68px; text-align: center;" | '''22'''<br />
| style="width: 81px; text-align: center;" | -<br />
| style="width: 305px;" | - Топоры могут делать обтёсанную древесину<br/> -&nbsp;Исправления ошибок<br />
| style="width: 100px; text-align: center;" | 24.08.20<br />
|-<br />
| style="width: 68px; text-align: center;" | '''21'''<br />
| style="width: 81px; text-align: center;" | -<br />
| style="width: 305px;" | - Добавлен enum&nbsp;MiningLevel<br />
| style="width: 100px; text-align: center;" | 11.07.20<br />
|}<br />
== <br/> Документация ==<br />
<br />
=== Подключение ===<br />
<br />
Чтобы подключить библиотеку, необходимо расположить файл библиотеки в папку lib в корне мода&nbsp;написать следующее в начале вашего кода:<br />
<syntaxhighlight lang="JavaScript">IMPORT("ToolLib");</syntaxhighlight><br />
<br />
После этого вам станет доступен весь функционал библиотеки.<br />
=== Добавление инструмента ===<br />
<br />
Для регистрации инструмента используется метод ToolLib.setTool(ItemID, toolMaterial, toolType)<br />
<syntaxhighlight lang="JavaScript">ToolLib.setTool(ItemID.myTool, "wood", ToolType.axe);<br />
</syntaxhighlight><br />
<br />
Так же вместо названия материала может напрямую быть передан объект с его свойствами.<br />
<br />
Для регистрации нового материала инструментов используется метод&nbsp;ToolAPI.addToolMaterial(toolMaterial, params)<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addToolMaterial("dirt", {<br />
durability: 15, // Прочность (сколько блоков можно сломать)<br />
level: 1, // Уровень инструмента - определяет, какие блоки инструмент может добыть.<br />
efficiency: 10, // Эффективность - модификатор скорости ломания блока<br />
damage: 1, // Увеличение базового урона инструмента данным материалом<br />
enchantability: 14 // Зачаровываемость, чем выше, тем более хорошие чары будут при зачаровании<br />
});<br />
</syntaxhighlight><br />
=== Уровни добычи ===<br />
<br />
Библиотека позволяет вместо чисел использовать константы для уровней блоков и инструментов:<br />
<br />
MiningLevel.STONE&nbsp;=&nbsp;1 - камень<br/> MiningLevel.IRON&nbsp;=&nbsp;2 - железная руда<br/> MiningLevel.DIAMOND&nbsp;=&nbsp;3 - алмазная руда<br/> MiningLevel.OBSIDIAN&nbsp;=&nbsp;4 - обсидиан<br />
=== Типы инструментов ===<br />
<br />
Cтандартные типы:<br />
<br />
ToolType.sword - меч<br/> ToolType.shovel - лопата<br/> ToolType.pickaxe - кирка<br/> ToolType.axe - топор<br/> ToolType.hoe - мотыга<br />
<br />
Создание своего типа инструментов<br />
<syntaxhighlight lang="JavaScript">ToolType.myType = {<br />
enchantType: Native.EnchantType.pickaxe, //Тип чар для инструмента<br />
damage: 2, // Базовый урон инструмента<br />
blockTypes: ["dirt", "stone", "test"], // Материалы блоков, которые может ломать инструмент<br />
onAttack: function(item) {<br />
if (item.data > Item.getMaxDamage(item.id)) {<br />
item.id = item.data = item.count = 0;<br />
}<br />
}<br />
} </syntaxhighlight><br />
=== Все методы ===<br />
<br />
// Скоро будут добавлены</div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/ToolAPI&diff=2576InnerCore/ToolAPI2020-12-27T15:36:26Z<p>MineExplorer: </p>
<hr />
<div>ToolAPI - это API, позваляющий&nbsp;регистрировать инструменты и добываемые ими блоки.<br />
=== Добавление инструмента ===<br />
<br />
Для регистрации инструмента используется метод ToolAPI.registerTool(id, toolMaterial, blockMaterials, params)<br/> ''toolMaterial ''- название материала инструмента&nbsp;или объект его описания<br/> ''blockMaterials ''- массив с типами блоков, которые может добыть инструмент<br/> ''params ''- дополнительные параметры и функции инструмента<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerTool(ItemID.myPickaxe, "wood", ["stone"], {<br />
damage: 1, // Базовый урон инструмента,<br />
brokenId: 0, // Id предмета, который установится вместо инструмента при ломании<br />
isWeapon: false, // Является ли инструмент оружием (влияет на уменьшение прочности)<br />
// Действие при атаке<br />
onAttack: function(item, victim, attacker) {<br />
return true; // возврат true предотвращает повреждение инструмента<br />
},<br />
// Действие при разрушении блока<br />
onDestroy: function(item, coords, block, player) {<br />
return true;<br />
},<br />
// Расчёт времени разрушения блока инструментом<br />
calcDestroyTime: function(toolData, coords, block, params, destroyTime, enchantData) {<br />
return 0;<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
Для регистрации нового материала инструментов используется метод&nbsp;ToolAPI.addToolMaterial(toolMaterial, params)<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addToolMaterial("dirt", {<br />
durability: 15, // Прочность (сколько блоков можно сломать)<br />
level: 1, // Уровень инструмента - определяет, какие блоки инструмент может добыть.<br />
efficiency: 10, // Эффективность - модификатор скорости ломания блока<br />
damage: 1 // Урон от материала (складывается с базовым уроном)<br />
});</syntaxhighlight><br />
<br />
=== Регистрация блоков ===<br />
<br />
Для регистрации блока используется метод&nbsp;ToolAPI.registerBlockMaterial(BlockID, blockMaterial, level);<br/> ''blockMaterial ''- материал блока.<br/> ''level ''- уровень добычи<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerBlockMaterial(BlockID.myBlock, "stone", 1);<br />
</syntaxhighlight><br />
<br />
Уровни добычи блоков из майнкрафта:<br/> 1 - камень<br/> 2 - железная руда<br/> 3 - алмазная руда<br/> 4 - обсидиан<br />
<br />
По умолчанию доступны следующие материалы:<br/> "stone" - каменный,<br/> "wood" - деревянный,<br/> "dirt" - земляной,<br/> "plant" - растения,<br/> "fibre" - паутина,<br/> "unbreaking" - неломаемый<br />
<br />
Для регистрации материала блока используется метод&nbsp;ToolAPI.addBlockMaterial(blockMaterial, breakingMultiplier);<br/> ''blockMaterial ''- название материала.<br/> ''breakingMultiplier ''- модификатор времени ломания блока при добыче без подходящего инструмента.<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addBlockMaterial("test", 3);</syntaxhighlight></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/ToolAPI&diff=2575InnerCore/ToolAPI2020-12-27T15:34:21Z<p>MineExplorer: </p>
<hr />
<div>ToolAPI - это API, позваляющий&nbsp;регистрировать инструменты и добываемые ими блоки. <br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
=== Добавление инструмента ===<br />
<br />
Для регистрации инструмента используется метод ToolAPI.registerTool(id, toolMaterial, blockMaterials, params)<br/> ''toolMaterial ''- название материала инструмента&nbsp;или объект его описания<br/> ''blockMaterials ''- массив с типами блоков, которые может добыть инструмент<br/> ''params ''- дополнительные параметры и функции инструмента<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerTool(ItemID.myPickaxe, "wood", ["stone"], {<br />
damage: 1, // Базовый урон инструмента,<br />
brokenId: 0, // Id предмета, который установится вместо инструмента при ломании<br />
isWeapon: false, // Является ли инструмент оружием (влияет на уменьшение прочности)<br />
// Действие при атаке<br />
onAttack: function(item, victim, attacker) {<br />
return true; // возврат true предотвращает повреждение инструмента<br />
}<br />
// Действие при разрушении блока<br />
onDestroy: function(item, coords, block, player) {<br />
return true;<br />
}<br />
// Расчёт времени разрушения блока инструментом<br />
calcDestroyTime: function(toolData, coords, block, params, destroyTime, enchantData) {<br />
return 0;<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
Для регистрации нового материала инструментов используется метод&nbsp;ToolAPI.addToolMaterial(toolMaterial, params)<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addToolMaterial("dirt", {<br />
durability: 15, // Прочность (сколько блоков можно сломать)<br />
level: 1, // Уровень инструмента - определяет, какие блоки инструмент может добыть.<br />
efficiency: 10, // Эффективность - модификатор скорости ломания блока<br />
damage: 1, // Урон от материала (складывается с базовым уроном)<br />
});</syntaxhighlight><br />
</div><br />
<br />
=== Регистрация блоков ===<br />
<br />
Для регистрации блока используется метод&nbsp;ToolAPI.registerBlockMaterial(BlockID, blockMaterial, level);<br/> ''blockMaterial ''- материал блока.<br/> ''level ''- уровень добычи<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerBlockMaterial(BlockID.myBlock, "stone", 1);<br />
</syntaxhighlight><br />
<br />
Уровни добычи блоков из майнкрафта:<br/> 1 - камень<br/> 2 - железная руда<br/> 3 - алмазная руда<br/> 4 - обсидиан<br />
<br />
По умолчанию доступны следующие материалы:<br/> "stone" - каменный,<br/> "wood" - деревянный,<br/> "dirt" - земляной,<br/> "plant" - растения,<br/> "fibre" - паутина,<br/> "unbreaking" - неломаемый<br />
<br />
Для регистрации материала блока используется метод&nbsp;ToolAPI.addBlockMaterial(blockMaterial, breakingMultiplier);<br/> ''blockMaterial ''- название материала.<br/> ''breakingMultiplier ''- модификатор времени ломания блока при добыче без подходящего инструмента.<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addBlockMaterial("test", 3);</syntaxhighlight></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/ToolAPI&diff=2574InnerCore/ToolAPI2020-12-27T15:33:23Z<p>MineExplorer: </p>
<hr />
<div>ToolAPI - это API, позваляющий&nbsp;регистрировать инструменты и добываемые ими блоки. <br />
<div class="mw-parser-output"><br />
=== Добавление инструмента ===<br />
<br />
Для регистрации инструмента используется метод ToolAPI.registerTool(id, toolMaterial, blockMaterials, params)<br/> ''toolMaterial ''- название материала инструмента&nbsp;или объект его описания<br/> ''blockMaterials ''- массив с типами блоков, которые может добыть инструмент<br/> ''params ''- дополнительные параметры и функции инструмента<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerTool(ItemID.myPickaxe, "wood", ["stone"], {<br />
damage: 1, // Базовый урон инструмента,<br />
brokenId: 0, // Id предмета, который установится вместо инструмента при ломании<br />
isWeapon: false, // Является ли инструмент оружием (влияет на уменьшение прочности)<br />
// Действие при атаке<br />
onAttack: function(item, victim, attacker) {<br />
return true; // возврат true предотвращает повреждение инструмента<br />
}<br />
// Действие при разрушении блока<br />
onDestroy: function(item, coords, block, player) {<br />
return true;<br />
}<br />
// Расчёт времени разрушения блока инструментом<br />
calcDestroyTime: function(toolData, coords, block, params, destroyTime, enchantData) {<br />
return 0;<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
Для регистрации нового материала инструментов используется метод&nbsp;ToolAPI.addToolMaterial(toolMaterial, params)<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addToolMaterial("dirt", {<br />
durability: 15, // Прочность (сколько блоков можно сломать)<br />
level: 1, // Уровень инструмента - определяет, какие блоки инструмент может добыть.<br />
efficiency: 10, // Эффективность - модификатор скорости ломания блока<br />
damage: 1, // Урон от материала (складывается с базовым уроном)<br />
enchantability: 14 // Зачаровываемость, чем выше, тем более хорошие чары будут при зачаровании<br />
});</syntaxhighlight><br />
</div><br />
<br />
=== Регистрация блоков ===<br />
<br />
Для регистрации блока используется метод&nbsp;ToolAPI.registerBlockMaterial(BlockID, blockMaterial, level);<br/> ''blockMaterial ''- материал блока.<br/> ''level ''- уровень добычи<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerBlockMaterial(BlockID.myBlock, "stone", 1);<br />
</syntaxhighlight><br />
<br />
Уровни добычи блоков из майнкрафта:<br/> 1 - камень<br/> 2 - железная руда<br/> 3 - алмазная руда<br/> 4 - обсидиан<br />
<br />
По умолчанию доступны следующие материалы:<br/> "stone" - каменный,<br/> "wood" - деревянный,<br/> "dirt" - земляной,<br/> "plant" - растения,<br/> "fibre" - паутина,<br/> "unbreaking" - неломаемый<br />
<br />
Для регистрации материала блока используется метод&nbsp;ToolAPI.addBlockMaterial(blockMaterial, breakingMultiplier);<br/> ''blockMaterial ''- название материала.<br/> ''breakingMultiplier ''- модификатор времени ломания блока при добыче без подходящего инструмента.<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addBlockMaterial("test", 3);</syntaxhighlight></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/ToolAPI&diff=2573InnerCore/ToolAPI2020-12-27T15:31:54Z<p>MineExplorer: </p>
<hr />
<div>ToolAPI - это API, позваляющий&nbsp;регистрировать инструменты и добываемые ими блоки. <br />
=== Добавление инструмента ===<br />
<br />
Для регистрации инструмента используется метод ToolAPI.registerTool(id, toolMaterial, blockMaterials, params)<br/> ''toolMaterial ''- название материала инструмента&nbsp;или объект его описания<br/> ''blockMaterials ''- массив с типами блоков, которые может добыть инструмент<br/> ''params ''- дополнительные параметры и функции инструмента<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerTool(ItemID.myPickaxe, "wood", ["stone"], {<br />
damage: 1, // Базовый урон инструмента,<br />
brokenId: 0, // Id предмета, который установится вместо инструмента при ломании<br />
isWeapon: false, // Является ли инструмент оружием (влияет на уменьшение прочности)<br />
// Действие при атаке<br />
onAttack: function(item, victim, attacker) {<br />
return true; // возврат true предотвращает ломание инструмента<br />
}<br />
// Действие при ломании блока<br />
onDestroy: function(item, coords, block, player) {<br />
return true;<br />
}<br />
// Расчёт времени ломания блока инструментом<br />
calcDestroyTime: function(toolData, coords, block, params, destroyTime, enchantData) {<br />
return 0;<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
Для регистрации нового материала инструментов используется метод&nbsp;ToolAPI.addToolMaterial(toolMaterial, params)<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addToolMaterial("dirt", {<br />
durability: 15, // Прочность (сколько блоков можно сломать)<br />
level: 1, // Уровень инструмента - определяет, какие блоки инструмент может добыть.<br />
efficiency: 10, // Эффективность - модификатор скорости ломания блока<br />
damage: 1, // Урон от материала (складывается с базовым уроном)<br />
enchantability: 14 // Зачаровываемость, чем выше, тем более хорошие чары будут при зачаровании<br />
});</syntaxhighlight><br />
<br />
=== Регистрация блоков ===<br />
<br />
Для регистрации блока используется метод&nbsp;ToolAPI.registerBlockMaterial(BlockID, blockMaterial, level);<br/> ''blockMaterial ''- материал блока.<br/> ''level ''- уровень добычи<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerBlockMaterial(BlockID.myBlock, "stone", 1);<br />
</syntaxhighlight><br />
<br />
Уровни добычи блоков из майнкрафта:<br/> 1 - камень<br/> 2 - железная руда<br/> 3 - алмазная руда<br/> 4 - обсидиан<br />
<br />
По умолчанию доступны следующие материалы:<br/> "stone" - каменный,<br/> "wood" - деревянный,<br/> "dirt" - земляной,<br/> "plant" - растения,<br/> "fibre" - паутина,<br/> "unbreaking" - неломаемый<br />
<br />
Для регистрации материала блока используется метод&nbsp;ToolAPI.addBlockMaterial(blockMaterial, breakingMultiplier);<br/> ''blockMaterial ''- название материала.<br/> ''breakingMultiplier ''- модификатор времени ломания блока при добыче без подходящего инструмента.<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addBlockMaterial("test", 3);</syntaxhighlight></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/StorageInterface&diff=2572InnerCore/Libs/StorageInterface2020-12-27T15:29:56Z<p>MineExplorer: </p>
<hr />
<div>Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью&nbsp;интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей.<br />
<div class="mw-parser-output"><br />
== Загрузка ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Версия<br />
| style="width: 36px;" | Ссылка<br />
| style="width: 393px;" | Список изменений<br />
| style="width: 250px;" | Дата релиза<br />
|-<br />
| '''9'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v9 Скачать]<br />
| style="width: 393px;" | <br />
*Новые методы для интерфейсов хранилищ:<br/> - getContainerSlots()<br/> -&nbsp;getInputSlots(side)<br/> -&nbsp;getReceivingItemCount(item, side)<br/> -&nbsp;addItemToSlot(name, item, maxCount)<br/> -&nbsp;clearContainer() <br />
*Исправлен стандартный интерфейс TIleEntity <br />
<br />
| style="width: 250px;" | 14.12.2020<br />
|-<br />
| '''8'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v8 Скачать]<br />
| style="width: 393px;" | <br />
*Поддержка мультиплеера <br />
*Добавлены стандартные интерфейсы для всех видов контейнеров <br />
*Добавлены методы для получение интерфейсов хранилищ <br />
*Добавлены методы для установки валидации предметов и макс стака&nbsp;слотов в ItemContainer <br />
<br />
| style="width: 250px;" | 10.12.2020<br />
|-<br />
| '''7'''<br />
| style="text-align: center; width: 36px;" | -<br />
| style="width: 393px;" | <br />
- В описании слота в интерфейсе хранилища теперь можно указать стороны, через которые с ним можно взаимодействовать<br />
<br />
| style="width: 250px;" | 10.06.2020<br />
|-<br />
| '''6'''<br />
| style="width: 36px;" | [https://yadi.sk/d/TITakdpdsjIGug Скачать]<br />
| style="width: 393px;" | - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров.<br />
| style="width: 250px;" | 18.04.2020<br />
|-<br />
| '''5'''<br />
| style="width: 36px;" | [https://yadi.sk/d/Om5TRGdlhylfQA Скачать]<br />
| style="width: 393px;" | - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid<br />
| style="width: 250px;" | 09.03.2020<br />
|-<br />
| '''4'''<br />
| style="width: 36px;" | [https://yadi.sk/d/1gBu4a-fEme-jA Скачать]<br />
| style="width: 393px;" | <br />
*Улучшена работа с жидкостями <br />
*В интерфейс добавлено поле liquidStorage <br />
<br />
| style="width: 250px;" | 05.03.2020<br />
|-<br />
| '''3'''<br />
| style="width: 36px;" | [https://drive.google.com/file/d/1Hsp2nLIER0wF-ZzDvdsy1btxWFhnebv1/view?usp=sharing Скачать]<br />
| style="width: 393px;" | - Релиз библиотеки<br />
| style="width: 250px;" | 02.02.2020<br />
|}<br />
</div><br />
<br />
<div class="mw-parser-output"><br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IC_Libraries/blob/master/library/StorageInterface.js StorageInterface.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).<br />
<br />
Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<pre>IMPORT("StorageInterface");<br />
</pre><br />
<div class="mw-parser-output">&nbsp;</div> </div><br />
<br />
== Интерфейсы хранилищ блоков ==<br />
<br />
Интерфейсы хранилищ объединяют в себе функции для работы с контейнерами и хранилищем жидкости и позволяют описать логику передачи предметов и жидкостей. В библиотеке есть стандартные интерфейсы для ванильных контейнеров и TileEntity, но вы можете зарегистрировать свой собственный для вашего TileEntity.<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Регистрация интерфейса&nbsp;хранилища ===<br />
<br />
''StorageInterface.createInterface(id блока, прототип интерфейса).''<br />
<br />
Все параметры слотов и функции прототипа интерфейса опциональны.<br/> Прототип интерфейса выглядит так:<br />
<syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, {<br />
slots: {<br />
"slot1": {<br />
input: boolean, // может ли слот принимать предметы<br />
output: boolean, // может ли слот отдавать предметы<br />
// Сторона блока, через которую доступен слот.<br />
// Значение - число или одна из настроек: "horizontal", "verctical", "down", "up".<br />
side: int | string,<br />
// Максимальное количество предметов в слоте<br />
maxStack: int,<br />
// Может ли слот принять предмет item со стороны side<br />
isValid: function(item, side, tileEntity) {<br />
return boolean;<br />
},<br />
// Можно ли извлечь предмет из слота (item - предмет в слоте)<br />
canOutput: function(item, side, tileEntity) {<br />
return boolean;<br />
}<br />
},<br />
// Означает все слоты с индексами от 2 до 10 (slot2, slot3, ..., slot10).<br />
"slot^2-10": {<br />
...<br />
},<br />
...<br />
},<br />
// функции интерфейса<br />
});</syntaxhighlight><br />
</div> </div> <br />
=== <br/> Функции интерфейса хранилища ===<br />
<br />
Интерфейс хранилища обладает следующими функциями. Вы можете заменить их на свои в прототипе интерфейса при регистрации.<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Название<br />
| Аргументы<br />
| Описание<br />
|-<br />
| '''getSlot'''<br />
| name<br />
| Возвращает слот контейнера.<br />
|-<br />
| '''setSlot'''<br />
| name, id, count, data, extra<br />
| Устанавливает предмет в слот контейнера.<br />
|-<br />
| '''isValidInput'''<br />
| item, side, tileEntity<br />
| Аналогична функции isValid слота, но действует на все слоты контейнера. По умолчанию возвращает true.<br />
|-<br />
| '''addItem'''<br />
| item, side, maxCount<br />
| Функция добавления предмета. Возвращает количество добавленных предметов.<br />
|-<br />
| '''addItemToSlot'''<br />
| name, item, maxCount<br />
| Добавляет предмет в слот контейнера, maxCount - максимальное количество предмета, которое будет добавлено.<br />
|-<br />
| <br />
'''getReceivingItemCount'''<br />
<br />
| item, side<br />
| Возвращает сколько предметов из стака контейнер может принять.<br />
|-<br />
| <br />
'''getContainerSlots'''<br />
<br />
| -<br />
| Возвращает все слоты контейнера<br />
|-<br />
| '''getInputSlots'''<br />
| side<br />
| Возвращяет названия слотов входа,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''getOutputSlots'''<br />
| side<br />
| Возвращает названия слотов выхода,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''clearContainer'''<br />
| -<br />
| Очищает содержимое контейнера<br />
|-<br />
| '''canReceiveLiquid'''<br />
| liquid, side<br />
| Может ли&nbsp;TileEntity принять жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''canTransportLiquid'''<br />
| liquid, side<br />
| Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''.&nbsp;По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''addLiquid'''<br />
| liquid, amount<br />
| Функция добавление жидкости. По умолчанию работает с liquidStorage.<br />
|-<br />
| '''getLiquid'''<br />
| liquid, amount<br />
| Функция извлечения жидкости.&nbsp;По умолчанию работает с liquidStorage.<br />
|-<br />
| '''getLiquidStored'''<br />
| storageName<br />
| <br />
Функция получения жидкости, хранящейся в tile entity. Позволяет возвращать разные жидкости для входа и выхода.<br/> '''storageName''' - "input" для получения жидкости на вход и "output" для жидкости на выход.<br />
<br />
|-<br />
| '''getLiquidStorage'''<br />
| storageName<br />
| <br />
Возвращает хранилище жидкости.&nbsp;По умолчанию возвращает liquidStorage из TileEntity. Позволяет использовать альтернативные&nbsp;хранилища жидкостей.<br/> '''storageName''' - "input" для хранилища, принимающего жидкость, и "output" для отдающего.<br />
<br />
|}<br />
<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, {<br />
slots: {<br />
"slotSource": {<br />
input: true,<br />
side: "up",<br />
isValid: function(item, side){<br />
return Recipes.getFurnaceRecipeResult(item.id, "iron");<br />
}<br />
},<br />
"slotFuel": {<br />
input: true,<br />
side: "horizontal",<br />
isValid: function(item, side){<br />
return Recipes.getFuelBurnDuration(item.id, item.data) > 0;<br />
}<br />
},<br />
"slotResult": {output: true}<br />
}<br />
});</syntaxhighlight><br />
<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"><br />
=== Методы для получения&nbsp;интерфесов хранилищ ===<br />
<br />
*'''StorageInterface.newStorage('''''container ''или ''tileEntity''''')''' - возвращает новый интерфейс хранилища для TileEntity или контейнера. <br />
*'''StorageInterface.getStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища для блока, являющегося контейнером. <br />
*'''StorageInterface.getLiquidStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища, если на указанных координатах находится TileEntity с хранилищем жидкости. <br />
*'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side. <br />
*'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side,&nbsp;если там находится TileEntity с хранилищем жидкости. <br />
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <br />
== Остальные методы StorageInterface ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| style="width: 178px;" | Название<br />
| style="width: 114px;" | Аргументы<br />
| style="width: 458px;" | Описание<br />
|-<br />
| style="width: 178px;" | '''getNearestContainers'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Возвращает соседние контейнеры относительно блока на координатах ''coords ''в виде объекта, где ключами являются стороны блока.<br />
|-<br />
| style="width: 178px;" | '''getNearestLiquidStorages'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Работает аналогично предыдущему, но возвращает интерфейсы хранилищ для всех соседних TileEntity, имеющих хранилища жидкостей.<br />
|-<br />
| style="width: 178px;" | '''putItems'''<br />
| style="width: 114px;" | items, containers<br />
| style="width: 458px;" | Добавляет предметы из массива items в контейнеры из объекта, возвращаемого методом&nbsp;''getNearestContainers'''''.'''<br />
|-<br />
| style="width: 178px;" | '''putItemToContainer'''<br />
| style="width: 114px;" | item, container, side, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов в контейнер.<br/> '''maxCount '''- максимальное количество предметов, которое может быть передано за раз&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromContainer'''<br />
| style="width: 114px;" | inputСontainer , outputContainer, side, maxCount, oneStack<br />
| style="width: 458px;" | <br />
Позволяет извлечь предмет из контейнера и добавить его в tile entity или контейнер.<br/> '''inputStorage&nbsp;'''- TileEntity или контейнер, в который будут добавлены предметы<br/> '''outputContainer '''- контейнер, из которого будут извлечены предметы<br/> '''maxCount '''- сколько предметов может быть извлечено (по умолчанию не ограничено)<br/> '''oneStack '''- если true, то извлечёт&nbsp;только один стак предметов.<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromStorage'''<br />
| style="width: 114px;" | inputStorage, outputStorage, side, maxCount, oneStack<br />
| style="width: 458px;" | Аналогичен предыдущему, но принимает аргументами интерфейсы хранилищ.<br />
|-<br />
| style="width: 178px;" | '''transportLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, outputStorage, inputStorage, outputSide<br />
| style="width: 458px;" | <br />
Передаёт жидкость из одного TileEntity в другой.<br/> '''liquid&nbsp;'''- название жидкости<br/> '''maxAmount&nbsp;'''- максимальное количество, которое будет передано<br/> '''outputStorage&nbsp;'''- интерфейс хранилища или TileEntity, из которого будет передана жидкость<br/> '''inputStorage&nbsp;'''- интерфейс хранилища, принимающего жидкость<br/> '''outputSide&nbsp;'''- сторона блока, через которую передаётся жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, inputStorage, outputStorage, inputSide<br />
| style="width: 458px;" | <br />
Похож на предыдущий, но позволяет извлечь жидкость из TileEntity<br/> '''liquid '''- название жидкости. Если не указано, то извлечёт любую жидкость&nbsp;из&nbsp;''outputStorage'',&nbsp;если она может быть принята в&nbsp;''inputStorage.''<br/> '''inputStorage&nbsp;'''- интерфейс хранилища или TileEntity,&nbsp;принимающий жидкость<br/> '''outputStorage&nbsp;'''- интерфейс хранилища, из которого будет извлечена жидкость<br/> '''inputSide '''- сторона блока, которая будет принимать жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''checkHoppers'''<br />
| style="width: 114px;" | tileEntity<br />
| style="width: 458px;" | Позволяет TileEntity взаимодействовать с воронками. Для этого должен вызываться в функции тика TileEntity .<br />
|-<br />
| style="width: 178px;" | '''addItemToSlot'''<br />
| style="width: 114px;" | item, slot, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов&nbsp;в слот. Изменяет только объект слота, для корректной работы требуется установить слот через&nbsp;''container.setSlot.''<br/> '''maxCount '''- максимальное количество, которое будет передано в слот&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|}</div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/StorageInterface&diff=2571InnerCore/Libs/StorageInterface2020-12-27T15:29:41Z<p>MineExplorer: </p>
<hr />
<div>Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью&nbsp;интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей.<br />
<div class="mw-parser-output"><br />
== Загрузка ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Версия<br />
| style="width: 36px;" | Ссылка<br />
| style="width: 393px;" | Список изменений<br />
| style="width: 250px;" | Дата релиза<br />
|-<br />
| '''9'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v9 Скачать]<br />
| style="width: 393px;" | <br />
*Новые методы для интерфейсов хранилищ:<br/> - getContainerSlots()<br/> -&nbsp;getInputSlots(side)<br/> -&nbsp;getReceivingItemCount(item, side)<br/> -&nbsp;addItemToSlot(name, item, maxCount)<br/> -&nbsp;clearContainer() <br />
*Исправлен стандартный интерфейс TIleEntity <br />
<br />
| style="width: 250px;" | 14.12.2020<br />
|-<br />
| '''8'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v8 Скачать]<br />
| style="width: 393px;" | <br />
*Поддержка мультиплеера <br />
*Добавлены стандартные интерфейсы для всех видов контейнеров <br />
*Добавлены методы для получение интерфейсов хранилищ <br />
*Добавлены методы для установки валидации предметов и макс стака&nbsp;слотов в ItemContainer <br />
<br />
| style="width: 250px;" | 10.12.2020<br />
|-<br />
| '''7'''<br />
| style="text-align: center; width: 36px;" | -<br />
| style="width: 393px;" | <br />
- В описании слота в интерфейсе хранилища теперь можно указать стороны, через которые с ним можно взаимодействовать<br />
<br />
| style="width: 250px;" | 10.06.2020<br />
|-<br />
| '''6'''<br />
| style="width: 36px;" | [https://yadi.sk/d/TITakdpdsjIGug Скачать]<br />
| style="width: 393px;" | - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров.<br />
| style="width: 250px;" | 18.04.2020<br />
|-<br />
| '''5'''<br />
| style="width: 36px;" | [https://yadi.sk/d/Om5TRGdlhylfQA Скачать]<br />
| style="width: 393px;" | - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid<br />
| style="width: 250px;" | 09.03.2020<br />
|-<br />
| '''4'''<br />
| style="width: 36px;" | [https://yadi.sk/d/1gBu4a-fEme-jA Скачать]<br />
| style="width: 393px;" | <br />
*Улучшена работа с жидкостями <br />
*В интерфейс добавлено поле liquidStorage <br />
<br />
| style="width: 250px;" | 05.03.2020<br />
|-<br />
| '''3'''<br />
| style="width: 36px;" | [https://drive.google.com/file/d/1Hsp2nLIER0wF-ZzDvdsy1btxWFhnebv1/view?usp=sharing Скачать]<br />
| style="width: 393px;" | - Релиз библиотеки<br />
| style="width: 250px;" | 02.02.2020<br />
|}<br />
</div><br />
<br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IC_Libraries/blob/master/library/StorageInterface.js StorageInterface.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).<br />
<br />
Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<pre>IMPORT("StorageInterface");</pre><br />
<div class="mw-parser-output"><div class="mw-parser-output">&nbsp;</div> </div> </div> </div> <div class="mw-parser-output"><br />
== Интерфейсы хранилищ блоков ==<br />
<br />
Интерфейсы хранилищ объединяют в себе функции для работы с контейнерами и хранилищем жидкости и позволяют описать логику передачи предметов и жидкостей. В библиотеке есть стандартные интерфейсы для ванильных контейнеров и TileEntity, но вы можете зарегистрировать свой собственный для вашего TileEntity.<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Регистрация интерфейса&nbsp;хранилища ===<br />
<br />
''StorageInterface.createInterface(id блока, прототип интерфейса).''<br />
<br />
Все параметры слотов и функции прототипа интерфейса опциональны.<br/> Прототип интерфейса выглядит так:<br />
<syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, {<br />
slots: {<br />
"slot1": {<br />
input: boolean, // может ли слот принимать предметы<br />
output: boolean, // может ли слот отдавать предметы<br />
// Сторона блока, через которую доступен слот.<br />
// Значение - число или одна из настроек: "horizontal", "verctical", "down", "up".<br />
side: int | string,<br />
// Максимальное количество предметов в слоте<br />
maxStack: int,<br />
// Может ли слот принять предмет item со стороны side<br />
isValid: function(item, side, tileEntity) {<br />
return boolean;<br />
},<br />
// Можно ли извлечь предмет из слота (item - предмет в слоте)<br />
canOutput: function(item, side, tileEntity) {<br />
return boolean;<br />
}<br />
},<br />
// Означает все слоты с индексами от 2 до 10 (slot2, slot3, ..., slot10).<br />
"slot^2-10": {<br />
...<br />
},<br />
...<br />
},<br />
// функции интерфейса<br />
});</syntaxhighlight><br />
</div> </div> <br />
=== <br/> Функции интерфейса хранилища ===<br />
<br />
Интерфейс хранилища обладает следующими функциями. Вы можете заменить их на свои в прототипе интерфейса при регистрации.<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Название<br />
| Аргументы<br />
| Описание<br />
|-<br />
| '''getSlot'''<br />
| name<br />
| Возвращает слот контейнера.<br />
|-<br />
| '''setSlot'''<br />
| name, id, count, data, extra<br />
| Устанавливает предмет в слот контейнера.<br />
|-<br />
| '''isValidInput'''<br />
| item, side, tileEntity<br />
| Аналогична функции isValid слота, но действует на все слоты контейнера. По умолчанию возвращает true.<br />
|-<br />
| '''addItem'''<br />
| item, side, maxCount<br />
| Функция добавления предмета. Возвращает количество добавленных предметов.<br />
|-<br />
| '''addItemToSlot'''<br />
| name, item, maxCount<br />
| Добавляет предмет в слот контейнера, maxCount - максимальное количество предмета, которое будет добавлено.<br />
|-<br />
| <br />
'''getReceivingItemCount'''<br />
<br />
| item, side<br />
| Возвращает сколько предметов из стака контейнер может принять.<br />
|-<br />
| <br />
'''getContainerSlots'''<br />
<br />
| -<br />
| Возвращает все слоты контейнера<br />
|-<br />
| '''getInputSlots'''<br />
| side<br />
| Возвращяет названия слотов входа,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''getOutputSlots'''<br />
| side<br />
| Возвращает названия слотов выхода,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''clearContainer'''<br />
| -<br />
| Очищает содержимое контейнера<br />
|-<br />
| '''canReceiveLiquid'''<br />
| liquid, side<br />
| Может ли&nbsp;TileEntity принять жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''canTransportLiquid'''<br />
| liquid, side<br />
| Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''.&nbsp;По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''addLiquid'''<br />
| liquid, amount<br />
| Функция добавление жидкости. По умолчанию работает с liquidStorage.<br />
|-<br />
| '''getLiquid'''<br />
| liquid, amount<br />
| Функция извлечения жидкости.&nbsp;По умолчанию работает с liquidStorage.<br />
|-<br />
| '''getLiquidStored'''<br />
| storageName<br />
| <br />
Функция получения жидкости, хранящейся в tile entity. Позволяет возвращать разные жидкости для входа и выхода.<br/> '''storageName''' - "input" для получения жидкости на вход и "output" для жидкости на выход.<br />
<br />
|-<br />
| '''getLiquidStorage'''<br />
| storageName<br />
| <br />
Возвращает хранилище жидкости.&nbsp;По умолчанию возвращает liquidStorage из TileEntity. Позволяет использовать альтернативные&nbsp;хранилища жидкостей.<br/> '''storageName''' - "input" для хранилища, принимающего жидкость, и "output" для отдающего.<br />
<br />
|}<br />
<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, {<br />
slots: {<br />
"slotSource": {<br />
input: true,<br />
side: "up",<br />
isValid: function(item, side){<br />
return Recipes.getFurnaceRecipeResult(item.id, "iron");<br />
}<br />
},<br />
"slotFuel": {<br />
input: true,<br />
side: "horizontal",<br />
isValid: function(item, side){<br />
return Recipes.getFuelBurnDuration(item.id, item.data) > 0;<br />
}<br />
},<br />
"slotResult": {output: true}<br />
}<br />
});</syntaxhighlight><br />
<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"><br />
=== Методы для получения&nbsp;интерфесов хранилищ ===<br />
<br />
*'''StorageInterface.newStorage('''''container ''или ''tileEntity''''')''' - возвращает новый интерфейс хранилища для TileEntity или контейнера. <br />
*'''StorageInterface.getStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища для блока, являющегося контейнером. <br />
*'''StorageInterface.getLiquidStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища, если на указанных координатах находится TileEntity с хранилищем жидкости. <br />
*'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side. <br />
*'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side,&nbsp;если там находится TileEntity с хранилищем жидкости. <br />
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <br />
== Остальные методы StorageInterface ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| style="width: 178px;" | Название<br />
| style="width: 114px;" | Аргументы<br />
| style="width: 458px;" | Описание<br />
|-<br />
| style="width: 178px;" | '''getNearestContainers'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Возвращает соседние контейнеры относительно блока на координатах ''coords ''в виде объекта, где ключами являются стороны блока.<br />
|-<br />
| style="width: 178px;" | '''getNearestLiquidStorages'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Работает аналогично предыдущему, но возвращает интерфейсы хранилищ для всех соседних TileEntity, имеющих хранилища жидкостей.<br />
|-<br />
| style="width: 178px;" | '''putItems'''<br />
| style="width: 114px;" | items, containers<br />
| style="width: 458px;" | Добавляет предметы из массива items в контейнеры из объекта, возвращаемого методом&nbsp;''getNearestContainers'''''.'''<br />
|-<br />
| style="width: 178px;" | '''putItemToContainer'''<br />
| style="width: 114px;" | item, container, side, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов в контейнер.<br/> '''maxCount '''- максимальное количество предметов, которое может быть передано за раз&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromContainer'''<br />
| style="width: 114px;" | inputСontainer , outputContainer, side, maxCount, oneStack<br />
| style="width: 458px;" | <br />
Позволяет извлечь предмет из контейнера и добавить его в tile entity или контейнер.<br/> '''inputStorage&nbsp;'''- TileEntity или контейнер, в который будут добавлены предметы<br/> '''outputContainer '''- контейнер, из которого будут извлечены предметы<br/> '''maxCount '''- сколько предметов может быть извлечено (по умолчанию не ограничено)<br/> '''oneStack '''- если true, то извлечёт&nbsp;только один стак предметов.<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromStorage'''<br />
| style="width: 114px;" | inputStorage, outputStorage, side, maxCount, oneStack<br />
| style="width: 458px;" | Аналогичен предыдущему, но принимает аргументами интерфейсы хранилищ.<br />
|-<br />
| style="width: 178px;" | '''transportLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, outputStorage, inputStorage, outputSide<br />
| style="width: 458px;" | <br />
Передаёт жидкость из одного TileEntity в другой.<br/> '''liquid&nbsp;'''- название жидкости<br/> '''maxAmount&nbsp;'''- максимальное количество, которое будет передано<br/> '''outputStorage&nbsp;'''- интерфейс хранилища или TileEntity, из которого будет передана жидкость<br/> '''inputStorage&nbsp;'''- интерфейс хранилища, принимающего жидкость<br/> '''outputSide&nbsp;'''- сторона блока, через которую передаётся жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, inputStorage, outputStorage, inputSide<br />
| style="width: 458px;" | <br />
Похож на предыдущий, но позволяет извлечь жидкость из TileEntity<br/> '''liquid '''- название жидкости. Если не указано, то извлечёт любую жидкость&nbsp;из&nbsp;''outputStorage'',&nbsp;если она может быть принята в&nbsp;''inputStorage.''<br/> '''inputStorage&nbsp;'''- интерфейс хранилища или TileEntity,&nbsp;принимающий жидкость<br/> '''outputStorage&nbsp;'''- интерфейс хранилища, из которого будет извлечена жидкость<br/> '''inputSide '''- сторона блока, которая будет принимать жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''checkHoppers'''<br />
| style="width: 114px;" | tileEntity<br />
| style="width: 458px;" | Позволяет TileEntity взаимодействовать с воронками. Для этого должен вызываться в функции тика TileEntity .<br />
|-<br />
| style="width: 178px;" | '''addItemToSlot'''<br />
| style="width: 114px;" | item, slot, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов&nbsp;в слот. Изменяет только объект слота, для корректной работы требуется установить слот через&nbsp;''container.setSlot.''<br/> '''maxCount '''- максимальное количество, которое будет передано в слот&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|}</div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/StorageInterface&diff=2570InnerCore/Libs/StorageInterface2020-12-27T15:29:13Z<p>MineExplorer: </p>
<hr />
<div>Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью&nbsp;интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей.<br />
== Загрузка ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Версия<br />
| style="width: 36px;" | Ссылка<br />
| style="width: 393px;" | Список изменений<br />
| style="width: 250px;" | Дата релиза<br />
|-<br />
| '''9'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v9 Скачать]<br />
| style="width: 393px;" | <br />
*Новые методы для интерфейсов хранилищ:<br/> - getContainerSlots()<br/> -&nbsp;getInputSlots(side)<br/> -&nbsp;getReceivingItemCount(item, side)<br/> -&nbsp;addItemToSlot(name, item, maxCount)<br/> -&nbsp;clearContainer() <br />
*Исправлен стандартный интерфейс TIleEntity <br />
<br />
| style="width: 250px;" | 14.12.2020<br />
|-<br />
| '''8'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v8 Скачать]<br />
| style="width: 393px;" | <br />
*Поддержка мультиплеера <br />
*Добавлены стандартные интерфейсы для всех видов контейнеров <br />
*Добавлены методы для получение интерфейсов хранилищ <br />
*Добавлены методы для установки валидации предметов и макс стака&nbsp;слотов в ItemContainer <br />
<br />
| style="width: 250px;" | 10.12.2020<br />
|-<br />
| '''7'''<br />
| style="text-align: center; width: 36px;" | -<br />
| style="width: 393px;" | <br />
- В описании слота в интерфейсе хранилища теперь можно указать стороны, через которые с ним можно взаимодействовать<br />
<br />
| style="width: 250px;" | 10.06.2020<br />
|-<br />
| '''6'''<br />
| style="width: 36px;" | [https://yadi.sk/d/TITakdpdsjIGug Скачать]<br />
| style="width: 393px;" | - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров.<br />
| style="width: 250px;" | 18.04.2020<br />
|-<br />
| '''5'''<br />
| style="width: 36px;" | [https://yadi.sk/d/Om5TRGdlhylfQA Скачать]<br />
| style="width: 393px;" | - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid<br />
| style="width: 250px;" | 09.03.2020<br />
|-<br />
| '''4'''<br />
| style="width: 36px;" | [https://yadi.sk/d/1gBu4a-fEme-jA Скачать]<br />
| style="width: 393px;" | <br />
*Улучшена работа с жидкостями <br />
*В интерфейс добавлено поле liquidStorage <br />
<br />
| style="width: 250px;" | 05.03.2020<br />
|-<br />
| '''3'''<br />
| style="width: 36px;" | [https://drive.google.com/file/d/1Hsp2nLIER0wF-ZzDvdsy1btxWFhnebv1/view?usp=sharing Скачать]<br />
| style="width: 393px;" | - Релиз библиотеки<br />
| style="width: 250px;" | 02.02.2020<br />
|}<br />
</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"><br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IC_Libraries/blob/master/library/StorageInterface.js StorageInterface.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).<br />
<br />
Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<pre>IMPORT("StorageInterface");</pre><br />
<div class="mw-parser-output"><div class="mw-parser-output">&nbsp;</div> </div> </div> </div> <div class="mw-parser-output"><br />
== Интерфейсы хранилищ блоков ==<br />
<br />
Интерфейсы хранилищ объединяют в себе функции для работы с контейнерами и хранилищем жидкости и позволяют описать логику передачи предметов и жидкостей. В библиотеке есть стандартные интерфейсы для ванильных контейнеров и TileEntity, но вы можете зарегистрировать свой собственный для вашего TileEntity.<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Регистрация интерфейса&nbsp;хранилища ===<br />
<br />
''StorageInterface.createInterface(id блока, прототип интерфейса).''<br />
<br />
Все параметры слотов и функции прототипа интерфейса опциональны.<br/> Прототип интерфейса выглядит так:<br />
<syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, {<br />
slots: {<br />
"slot1": {<br />
input: boolean, // может ли слот принимать предметы<br />
output: boolean, // может ли слот отдавать предметы<br />
// Сторона блока, через которую доступен слот.<br />
// Значение - число или одна из настроек: "horizontal", "verctical", "down", "up".<br />
side: int | string,<br />
// Максимальное количество предметов в слоте<br />
maxStack: int,<br />
// Может ли слот принять предмет item со стороны side<br />
isValid: function(item, side, tileEntity) {<br />
return boolean;<br />
},<br />
// Можно ли извлечь предмет из слота (item - предмет в слоте)<br />
canOutput: function(item, side, tileEntity) {<br />
return boolean;<br />
}<br />
},<br />
// Означает все слоты с индексами от 2 до 10 (slot2, slot3, ..., slot10).<br />
"slot^2-10": {<br />
...<br />
},<br />
...<br />
},<br />
// функции интерфейса<br />
});</syntaxhighlight><br />
</div> </div> <br />
=== <br/> Функции интерфейса хранилища ===<br />
<br />
Интерфейс хранилища обладает следующими функциями. Вы можете заменить их на свои в прототипе интерфейса при регистрации.<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Название<br />
| Аргументы<br />
| Описание<br />
|-<br />
| '''getSlot'''<br />
| name<br />
| Возвращает слот контейнера.<br />
|-<br />
| '''setSlot'''<br />
| name, id, count, data, extra<br />
| Устанавливает предмет в слот контейнера.<br />
|-<br />
| '''isValidInput'''<br />
| item, side, tileEntity<br />
| Аналогична функции isValid слота, но действует на все слоты контейнера. По умолчанию возвращает true.<br />
|-<br />
| '''addItem'''<br />
| item, side, maxCount<br />
| Функция добавления предмета. Возвращает количество добавленных предметов.<br />
|-<br />
| '''addItemToSlot'''<br />
| name, item, maxCount<br />
| Добавляет предмет в слот контейнера, maxCount - максимальное количество предмета, которое будет добавлено.<br />
|-<br />
| <br />
'''getReceivingItemCount'''<br />
<br />
| item, side<br />
| Возвращает сколько предметов из стака контейнер может принять.<br />
|-<br />
| <br />
'''getContainerSlots'''<br />
<br />
| -<br />
| Возвращает все слоты контейнера<br />
|-<br />
| '''getInputSlots'''<br />
| side<br />
| Возвращяет названия слотов входа,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''getOutputSlots'''<br />
| side<br />
| Возвращает названия слотов выхода,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''clearContainer'''<br />
| -<br />
| Очищает содержимое контейнера<br />
|-<br />
| '''canReceiveLiquid'''<br />
| liquid, side<br />
| Может ли&nbsp;TileEntity принять жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''canTransportLiquid'''<br />
| liquid, side<br />
| Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''.&nbsp;По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''addLiquid'''<br />
| liquid, amount<br />
| Функция добавление жидкости. По умолчанию работает с liquidStorage.<br />
|-<br />
| '''getLiquid'''<br />
| liquid, amount<br />
| Функция извлечения жидкости.&nbsp;По умолчанию работает с liquidStorage.<br />
|-<br />
| '''getLiquidStored'''<br />
| storageName<br />
| <br />
Функция получения жидкости, хранящейся в tile entity. Позволяет возвращать разные жидкости для входа и выхода.<br/> '''storageName''' - "input" для получения жидкости на вход и "output" для жидкости на выход.<br />
<br />
|-<br />
| '''getLiquidStorage'''<br />
| storageName<br />
| <br />
Возвращает хранилище жидкости.&nbsp;По умолчанию возвращает liquidStorage из TileEntity. Позволяет использовать альтернативные&nbsp;хранилища жидкостей.<br/> '''storageName''' - "input" для хранилища, принимающего жидкость, и "output" для отдающего.<br />
<br />
|}<br />
<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, {<br />
slots: {<br />
"slotSource": {<br />
input: true,<br />
side: "up",<br />
isValid: function(item, side){<br />
return Recipes.getFurnaceRecipeResult(item.id, "iron");<br />
}<br />
},<br />
"slotFuel": {<br />
input: true,<br />
side: "horizontal",<br />
isValid: function(item, side){<br />
return Recipes.getFuelBurnDuration(item.id, item.data) > 0;<br />
}<br />
},<br />
"slotResult": {output: true}<br />
}<br />
});</syntaxhighlight><br />
<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"><br />
=== Методы для получения&nbsp;интерфесов хранилищ ===<br />
<br />
*'''StorageInterface.newStorage('''''container ''или ''tileEntity''''')''' - возвращает новый интерфейс хранилища для TileEntity или контейнера. <br />
*'''StorageInterface.getStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища для блока, являющегося контейнером. <br />
*'''StorageInterface.getLiquidStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища, если на указанных координатах находится TileEntity с хранилищем жидкости. <br />
*'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side. <br />
*'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side,&nbsp;если там находится TileEntity с хранилищем жидкости. <br />
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <br />
== Остальные методы StorageInterface ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| style="width: 178px;" | Название<br />
| style="width: 114px;" | Аргументы<br />
| style="width: 458px;" | Описание<br />
|-<br />
| style="width: 178px;" | '''getNearestContainers'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Возвращает соседние контейнеры относительно блока на координатах ''coords ''в виде объекта, где ключами являются стороны блока.<br />
|-<br />
| style="width: 178px;" | '''getNearestLiquidStorages'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Работает аналогично предыдущему, но возвращает интерфейсы хранилищ для всех соседних TileEntity, имеющих хранилища жидкостей.<br />
|-<br />
| style="width: 178px;" | '''putItems'''<br />
| style="width: 114px;" | items, containers<br />
| style="width: 458px;" | Добавляет предметы из массива items в контейнеры из объекта, возвращаемого методом&nbsp;''getNearestContainers'''''.'''<br />
|-<br />
| style="width: 178px;" | '''putItemToContainer'''<br />
| style="width: 114px;" | item, container, side, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов в контейнер.<br/> '''maxCount '''- максимальное количество предметов, которое может быть передано за раз&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromContainer'''<br />
| style="width: 114px;" | inputСontainer , outputContainer, side, maxCount, oneStack<br />
| style="width: 458px;" | <br />
Позволяет извлечь предмет из контейнера и добавить его в tile entity или контейнер.<br/> '''inputStorage&nbsp;'''- TileEntity или контейнер, в который будут добавлены предметы<br/> '''outputContainer '''- контейнер, из которого будут извлечены предметы<br/> '''maxCount '''- сколько предметов может быть извлечено (по умолчанию не ограничено)<br/> '''oneStack '''- если true, то извлечёт&nbsp;только один стак предметов.<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromStorage'''<br />
| style="width: 114px;" | inputStorage, outputStorage, side, maxCount, oneStack<br />
| style="width: 458px;" | Аналогичен предыдущему, но принимает аргументами интерфейсы хранилищ.<br />
|-<br />
| style="width: 178px;" | '''transportLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, outputStorage, inputStorage, outputSide<br />
| style="width: 458px;" | <br />
Передаёт жидкость из одного TileEntity в другой.<br/> '''liquid&nbsp;'''- название жидкости<br/> '''maxAmount&nbsp;'''- максимальное количество, которое будет передано<br/> '''outputStorage&nbsp;'''- интерфейс хранилища или TileEntity, из которого будет передана жидкость<br/> '''inputStorage&nbsp;'''- интерфейс хранилища, принимающего жидкость<br/> '''outputSide&nbsp;'''- сторона блока, через которую передаётся жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, inputStorage, outputStorage, inputSide<br />
| style="width: 458px;" | <br />
Похож на предыдущий, но позволяет извлечь жидкость из TileEntity<br/> '''liquid '''- название жидкости. Если не указано, то извлечёт любую жидкость&nbsp;из&nbsp;''outputStorage'',&nbsp;если она может быть принята в&nbsp;''inputStorage.''<br/> '''inputStorage&nbsp;'''- интерфейс хранилища или TileEntity,&nbsp;принимающий жидкость<br/> '''outputStorage&nbsp;'''- интерфейс хранилища, из которого будет извлечена жидкость<br/> '''inputSide '''- сторона блока, которая будет принимать жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''checkHoppers'''<br />
| style="width: 114px;" | tileEntity<br />
| style="width: 458px;" | Позволяет TileEntity взаимодействовать с воронками. Для этого должен вызываться в функции тика TileEntity .<br />
|-<br />
| style="width: 178px;" | '''addItemToSlot'''<br />
| style="width: 114px;" | item, slot, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов&nbsp;в слот. Изменяет только объект слота, для корректной работы требуется установить слот через&nbsp;''container.setSlot.''<br/> '''maxCount '''- максимальное количество, которое будет передано в слот&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|}</div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/StorageInterface&diff=2569InnerCore/Libs/StorageInterface2020-12-27T15:27:59Z<p>MineExplorer: </p>
<hr />
<div>Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью&nbsp;интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей.<br />
<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"><br />
== Загрузка ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Версия<br />
| style="width: 36px;" | Ссылка<br />
| style="width: 393px;" | Список изменений<br />
| style="width: 250px;" | Дата релиза<br />
|-<br />
| '''9'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v9 Скачать]<br />
| style="width: 393px;" | <br />
*Новые методы для интерфейсов хранилищ:<br/> - getContainerSlots()<br/> -&nbsp;getInputSlots(side)<br/> -&nbsp;getReceivingItemCount(item, side)<br/> -&nbsp;addItemToSlot(name, item, maxCount)<br/> -&nbsp;clearContainer() <br />
*Исправлен стандартный интерфейс TIleEntity <br />
<br />
| style="width: 250px;" | 14.12.2020<br />
|-<br />
| '''8'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v8 Скачать]<br />
| style="width: 393px;" | <br />
*Поддержка мультиплеера <br />
*Добавлены стандартные интерфейсы для всех видов контейнеров <br />
*Добавлены методы для получение интерфейсов хранилищ <br />
*Добавлены методы для установки валидации предметов и макс стака&nbsp;слотов в ItemContainer <br />
<br />
| style="width: 250px;" | 10.12.2020<br />
|-<br />
| '''7'''<br />
| style="text-align: center; width: 36px;" | -<br />
| style="width: 393px;" | <br />
- В описании слота в интерфейсе хранилища теперь можно указать стороны, через которые с ним можно взаимодействовать<br />
<br />
| style="width: 250px;" | 10.06.2020<br />
|-<br />
| '''6'''<br />
| style="width: 36px;" | [https://yadi.sk/d/TITakdpdsjIGug Скачать]<br />
| style="width: 393px;" | - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров.<br />
| style="width: 250px;" | 18.04.2020<br />
|-<br />
| '''5'''<br />
| style="width: 36px;" | [https://yadi.sk/d/Om5TRGdlhylfQA Скачать]<br />
| style="width: 393px;" | - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid<br />
| style="width: 250px;" | 09.03.2020<br />
|-<br />
| '''4'''<br />
| style="width: 36px;" | [https://yadi.sk/d/1gBu4a-fEme-jA Скачать]<br />
| style="width: 393px;" | <br />
*Улучшена работа с жидкостями <br />
*В интерфейс добавлено поле liquidStorage <br />
<br />
| style="width: 250px;" | 05.03.2020<br />
|-<br />
| '''3'''<br />
| style="width: 36px;" | [https://drive.google.com/file/d/1Hsp2nLIER0wF-ZzDvdsy1btxWFhnebv1/view?usp=sharing Скачать]<br />
| style="width: 393px;" | - Релиз библиотеки<br />
| style="width: 250px;" | 02.02.2020<br />
|}<br />
</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"><br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IC_Libraries/blob/master/library/StorageInterface.js StorageInterface.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).<br />
<br />
Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<pre>IMPORT("StorageInterface");</pre><br />
<div class="mw-parser-output"><div class="mw-parser-output">&nbsp;</div> </div> </div> </div> <br />
<div class="mw-parser-output"><br />
== Интерфейсы хранилищ блоков ==<br />
<br />
Интерфейсы хранилищ объединяют в себе функции для работы с контейнерами и хранилищем жидкости и позволяют описать логику передачи предметов и жидкостей. В библиотеке есть стандартные интерфейсы для ванильных контейнеров и TileEntity, но вы можете зарегистрировать свой собственный для вашего TileEntity.<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Регистрация интерфейса&nbsp;хранилища ===<br />
<br />
''StorageInterface.createInterface(id блока, прототип интерфейса).''<br />
<br />
Все параметры слотов и функции прототипа интерфейса опциональны.<br/> Прототип интерфейса выглядит так:<br />
<syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, {<br />
slots: {<br />
"slot1": {<br />
input: boolean, // может ли слот принимать предметы<br />
output: boolean, // может ли слот отдавать предметы<br />
// Сторона блока, через которую доступен слот.<br />
// Значение - число или одна из настроек: "horizontal", "verctical", "down", "up".<br />
side: int | string,<br />
// Максимальное количество предметов в слоте<br />
maxStack: int,<br />
// Может ли слот принять предмет item со стороны side<br />
isValid: function(item, side, tileEntity) {<br />
return boolean;<br />
},<br />
// Можно ли извлечь предмет из слота (item - предмет в слоте)<br />
canOutput: function(item, side, tileEntity) {<br />
return boolean;<br />
}<br />
},<br />
// Означает все слоты с индексами от 2 до 10 (slot2, slot3, ..., slot10).<br />
"slot^2-10": {<br />
...<br />
},<br />
...<br />
},<br />
// функции интерфейса<br />
});</syntaxhighlight><br />
</div> </div> <br />
=== <br/> Функции интерфейса хранилища ===<br />
<br />
Интерфейс хранилища обладает следующими функциями. Вы можете заменить их на свои в прототипе интерфейса при регистрации.<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Название<br />
| Аргументы<br />
| Описание<br />
|-<br />
| '''getSlot'''<br />
| name<br />
| Возвращает слот контейнера.<br />
|-<br />
| '''setSlot'''<br />
| name, id, count, data, extra<br />
| Устанавливает предмет в слот контейнера.<br />
|-<br />
| '''isValidInput'''<br />
| item, side, tileEntity<br />
| Аналогична функции isValid слота, но действует на все слоты контейнера. По умолчанию возвращает true.<br />
|-<br />
| '''addItem'''<br />
| item, side, maxCount<br />
| Функция добавления предмета. Возвращает количество добавленных предметов.<br />
|-<br />
| '''addItemToSlot'''<br />
| name, item, maxCount<br />
| Добавляет предмет в слот контейнера, maxCount - максимальное количество предмета, которое будет добавлено.<br />
|-<br />
| <br />
'''getReceivingItemCount'''<br />
<br />
| item, side<br />
| Возвращает сколько предметов из стака контейнер может принять.<br />
|-<br />
| <br />
'''getContainerSlots'''<br />
<br />
| -<br />
| Возвращает все слоты контейнера<br />
|-<br />
| '''getInputSlots'''<br />
| side<br />
| Возвращяет названия слотов входа,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''getOutputSlots'''<br />
| side<br />
| Возвращает названия слотов выхода,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''clearContainer'''<br />
| -<br />
| Очищает содержимое контейнера<br />
|-<br />
| '''canReceiveLiquid'''<br />
| liquid, side<br />
| Может ли&nbsp;TileEntity принять жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''canTransportLiquid'''<br />
| liquid, side<br />
| Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''.&nbsp;По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''addLiquid'''<br />
| liquid, amount<br />
| Функция добавление жидкости. По умолчанию работает с liquidStorage.<br />
|-<br />
| '''getLiquid'''<br />
| liquid, amount<br />
| Функция извлечения жидкости.&nbsp;По умолчанию работает с liquidStorage.<br />
|-<br />
| '''getLiquidStored'''<br />
| storageName<br />
| <br />
Функция получения жидкости, хранящейся в tile entity. Позволяет возвращать разные жидкости для входа и выхода.<br/> '''storageName''' - "input" для получения жидкости на вход и "output" для жидкости на выход.<br />
<br />
|-<br />
| '''getLiquidStorage'''<br />
| storageName<br />
| <br />
Возвращает хранилище жидкости.&nbsp;По умолчанию возвращает liquidStorage из TileEntity. Позволяет использовать альтернативные&nbsp;хранилища жидкостей.<br/> '''storageName''' - "input" для хранилища, принимающего жидкость, и "output" для отдающего.<br />
<br />
|}<br />
<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, {<br />
slots: {<br />
"slotSource": {<br />
input: true,<br />
side: "up",<br />
isValid: function(item, side){<br />
return Recipes.getFurnaceRecipeResult(item.id, "iron");<br />
}<br />
},<br />
"slotFuel": {<br />
input: true,<br />
side: "horizontal",<br />
isValid: function(item, side){<br />
return Recipes.getFuelBurnDuration(item.id, item.data) > 0;<br />
}<br />
},<br />
"slotResult": {output: true}<br />
}<br />
});</syntaxhighlight><br />
<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"><br />
=== Методы для получения&nbsp;интерфесов хранилищ ===<br />
<br />
*'''StorageInterface.newStorage('''''container ''или ''tileEntity''''')''' - возвращает новый интерфейс хранилища для TileEntity или контейнера. <br />
*'''StorageInterface.getStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища для блока, являющегося контейнером. <br />
*'''StorageInterface.getLiquidStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища, если на указанных координатах находится TileEntity с хранилищем жидкости. <br />
*'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side. <br />
*'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side,&nbsp;если там находится TileEntity с хранилищем жидкости. <br />
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div><br />
<br />
== Остальные методы StorageInterface ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| style="width: 178px;" | Название<br />
| style="width: 114px;" | Аргументы<br />
| style="width: 458px;" | Описание<br />
|-<br />
| style="width: 178px;" | '''getNearestContainers'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Возвращает соседние контейнеры относительно блока на координатах ''coords ''в виде объекта, где ключами являются стороны блока.<br />
|-<br />
| style="width: 178px;" | '''getNearestLiquidStorages'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Работает аналогично предыдущему, но возвращает интерфейсы хранилищ для всех соседних TileEntity, имеющих хранилища жидкостей.<br />
|-<br />
| style="width: 178px;" | '''putItems'''<br />
| style="width: 114px;" | items, containers<br />
| style="width: 458px;" | Добавляет предметы из массива items в контейнеры из объекта, возвращаемого методом&nbsp;''getNearestContainers'''''.'''<br />
|-<br />
| style="width: 178px;" | '''putItemToContainer'''<br />
| style="width: 114px;" | item, container, side, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов в контейнер.<br/> '''maxCount '''- максимальное количество предметов, которое может быть передано за раз&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromContainer'''<br />
| style="width: 114px;" | inputСontainer , outputContainer, side, maxCount, oneStack<br />
| style="width: 458px;" | <br />
Позволяет извлечь предмет из контейнера и добавить его в tile entity или контейнер.<br/> '''inputStorage&nbsp;'''- TileEntity или контейнер, в который будут добавлены предметы<br/> '''outputContainer '''- контейнер, из которого будут извлечены предметы<br/> '''maxCount '''- сколько предметов может быть извлечено (по умолчанию не ограничено)<br/> '''oneStack '''- если true, то извлечёт&nbsp;только один стак предметов.<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromStorage'''<br />
| style="width: 114px;" | inputStorage, outputStorage, side, maxCount, oneStack<br />
| style="width: 458px;" | Аналогичен предыдущему, но принимает аргументами интерфейсы хранилищ.<br />
|-<br />
| style="width: 178px;" | '''transportLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, outputStorage, inputStorage, outputSide<br />
| style="width: 458px;" | <br />
Передаёт жидкость из одного TileEntity в другой.<br/> '''liquid&nbsp;'''- название жидкости<br/> '''maxAmount&nbsp;'''- максимальное количество, которое будет передано<br/> '''outputStorage&nbsp;'''- интерфейс хранилища или TileEntity, из которого будет передана жидкость<br/> '''inputStorage&nbsp;'''- интерфейс хранилища, принимающего жидкость<br/> '''outputSide&nbsp;'''- сторона блока, через которую передаётся жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, inputStorage, outputStorage, inputSide<br />
| style="width: 458px;" | <br />
Похож на предыдущий, но позволяет извлечь жидкость из TileEntity<br/> '''liquid '''- название жидкости. Если не указано, то извлечёт любую жидкость&nbsp;из&nbsp;''outputStorage'',&nbsp;если она может быть принята в&nbsp;''inputStorage.''<br/> '''inputStorage&nbsp;'''- интерфейс хранилища или TileEntity,&nbsp;принимающий жидкость<br/> '''outputStorage&nbsp;'''- интерфейс хранилища, из которого будет извлечена жидкость<br/> '''inputSide '''- сторона блока, которая будет принимать жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''checkHoppers'''<br />
| style="width: 114px;" | tileEntity<br />
| style="width: 458px;" | Позволяет TileEntity взаимодействовать с воронками. Для этого должен вызываться в функции тика TileEntity .<br />
|-<br />
| style="width: 178px;" | '''addItemToSlot'''<br />
| style="width: 114px;" | item, slot, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов&nbsp;в слот. Изменяет только объект слота, для корректной работы требуется установить слот через&nbsp;''container.setSlot.''<br/> '''maxCount '''- максимальное количество, которое будет передано в слот&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|}</div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/StorageInterface&diff=2568InnerCore/Libs/StorageInterface2020-12-27T15:26:23Z<p>MineExplorer: </p>
<hr />
<div>Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью&nbsp;интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей.<br />
<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"><br />
== Загрузка ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Версия<br />
| style="width: 36px;" | Ссылка<br />
| style="width: 393px;" | Список изменений<br />
| style="width: 250px;" | Дата релиза<br />
|-<br />
| '''9'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v9 Скачать]<br />
| style="width: 393px;" | <br />
*Новые методы для интерфейсов хранилищ:<br/> - getContainerSlots()<br/> -&nbsp;getInputSlots(side)<br/> -&nbsp;getReceivingItemCount(item, side)<br/> -&nbsp;addItemToSlot(name, item, maxCount)<br/> -&nbsp;clearContainer() <br />
*Исправлен стандартный интерфейс TIleEntity <br />
<br />
| style="width: 250px;" | 14.12.2020<br />
|-<br />
| '''8'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v8 Скачать]<br />
| style="width: 393px;" | <br />
*Поддержка мультиплеера <br />
*Добавлены стандартные интерфейсы для всех видов контейнеров <br />
*Добавлены методы для получение интерфейсов хранилищ <br />
*Добавлены методы для установки валидации предметов и макс стака&nbsp;слотов в ItemContainer <br />
<br />
| style="width: 250px;" | 10.12.2020<br />
|-<br />
| '''7'''<br />
| style="text-align: center; width: 36px;" | -<br />
| style="width: 393px;" | <br />
- В описании слота в интерфейсе хранилища теперь можно указать стороны, через которые с ним можно взаимодействовать<br />
<br />
| style="width: 250px;" | 10.06.2020<br />
|-<br />
| '''6'''<br />
| style="width: 36px;" | [https://yadi.sk/d/TITakdpdsjIGug Скачать]<br />
| style="width: 393px;" | - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров.<br />
| style="width: 250px;" | 18.04.2020<br />
|-<br />
| '''5'''<br />
| style="width: 36px;" | [https://yadi.sk/d/Om5TRGdlhylfQA Скачать]<br />
| style="width: 393px;" | - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid<br />
| style="width: 250px;" | 09.03.2020<br />
|-<br />
| '''4'''<br />
| style="width: 36px;" | [https://yadi.sk/d/1gBu4a-fEme-jA Скачать]<br />
| style="width: 393px;" | <br />
*Улучшена работа с жидкостями <br />
*В интерфейс добавлено поле liquidStorage <br />
<br />
| style="width: 250px;" | 05.03.2020<br />
|-<br />
| '''3'''<br />
| style="width: 36px;" | [https://drive.google.com/file/d/1Hsp2nLIER0wF-ZzDvdsy1btxWFhnebv1/view?usp=sharing Скачать]<br />
| style="width: 393px;" | - Релиз библиотеки<br />
| style="width: 250px;" | 02.02.2020<br />
|}<br />
</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"><br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IC_Libraries/blob/master/library/StorageInterface.js StorageInterface.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).<br />
<br />
Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<pre>IMPORT("StorageInterface");</pre><br />
<div class="mw-parser-output"><div class="mw-parser-output">&nbsp;</div> </div> </div> </div> <br />
== Интерфейсы хранилищ блоков ==<br />
<br />
Интерфейсы хранилищ объединяют в себе функции для работы с контейнерами и хранилищем жидкости и позволяют описать логику передачи предметов и жидкостей. В библиотеке есть стандартные интерфейсы для ванильных контейнеров и TileEntity, но вы можете зарегистрировать свой собственный для вашего TileEntity.<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Регистрация интерфейса&nbsp;хранилища ===<br />
<br />
''StorageInterface.createInterface(id блока, прототип интерфейса).''<br />
<br />
Все параметры слотов и функции прототипа интерфейса опциональны.<br/> Прототип интерфейса выглядит так:<br />
<syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, {<br />
slots: {<br />
"slot1": {<br />
input: boolean, // может ли слот принимать предметы<br />
output: boolean, // может ли слот отдавать предметы<br />
// Сторона блока, через которую доступен слот.<br />
// Значение - число или одна из настроек: "horizontal", "verctical", "down", "up".<br />
side: int | string,<br />
// Максимальное количество предметов в слоте<br />
maxStack: int,<br />
// Может ли слот принять предмет item со стороны side<br />
isValid: function(item, side, tileEntity) {<br />
return boolean;<br />
},<br />
// Можно ли извлечь предмет из слота (item - предмет в слоте)<br />
canOutput: function(item, side, tileEntity) {<br />
return boolean;<br />
}<br />
},<br />
// Означает все слоты с индексами от 2 до 10 (slot2, slot3, ..., slot10).<br />
"slot^2-10": {<br />
...<br />
},<br />
...<br />
},<br />
// функции интерфейса<br />
});</syntaxhighlight><br />
</div> </div> <br />
=== <br/> Функции интерфейса хранилища ===<br />
<br />
Интерфейс хранилища обладает следующими функциями. Вы можете заменить их на свои в прототипе интерфейса при регистрации.<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Название<br />
| Аргументы<br />
| Описание<br />
|-<br />
| '''getSlot'''<br />
| name<br />
| Возвращает слот контейнера.<br />
|-<br />
| '''setSlot'''<br />
| name, id, count, data, extra<br />
| Устанавливает предмет в слот контейнера.<br />
|-<br />
| '''isValidInput'''<br />
| item, side, tileEntity<br />
| Аналогична функции isValid слота, но действует на все слоты контейнера. По умолчанию возвращает true.<br />
|-<br />
| '''addItem'''<br />
| item, side, maxCount<br />
| Функция добавления предмета. Возвращает количество добавленных предметов.<br />
|-<br />
| '''addItemToSlot'''<br />
| name, item, maxCount<br />
| Добавляет предмет в слот контейнера, maxCount - максимальное количество предмета, которое будет добавлено.<br />
|-<br />
| <br />
'''getReceivingItemCount'''<br />
<br />
| item, side<br />
| Возвращает сколько предметов из стака контейнер может принять.<br />
|-<br />
| <br />
'''getContainerSlots'''<br />
<br />
| -<br />
| Возвращает все слоты контейнера<br />
|-<br />
| '''getInputSlots'''<br />
| side<br />
| Возвращяет названия слотов входа,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''getOutputSlots'''<br />
| side<br />
| Возвращает названия слотов выхода,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''clearContainer'''<br />
| -<br />
| Очищает содержимое контейнера<br />
|-<br />
| '''canReceiveLiquid'''<br />
| liquid, side<br />
| Может ли&nbsp;TileEntity принять жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''canTransportLiquid'''<br />
| liquid, side<br />
| Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''.&nbsp;По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''addLiquid'''<br />
| liquid, amount<br />
| Функция добавление жидкости. По умолчанию работает с liquidStorage.<br />
|-<br />
| '''getLiquid'''<br />
| liquid, amount<br />
| Функция извлечения жидкости.&nbsp;По умолчанию работает с liquidStorage.<br />
|-<br />
| '''getLiquidStored'''<br />
| storageName<br />
| <br />
Функция получения жидкости, хранящейся в tile entity. Позволяет возвращать разные жидкости для входа и выхода.<br/> '''storageName''' - "input" для получения жидкости на вход и "output" для жидкости на выход.<br />
<br />
|-<br />
| '''getLiquidStorage'''<br />
| storageName<br />
| <br />
Возвращает хранилище жидкости.&nbsp;По умолчанию возвращает liquidStorage из TileEntity. Позволяет использовать альтернативные&nbsp;хранилища жидкостей.<br/> '''storageName''' - "input" для хранилища, принимающего жидкость, и "output" для отдающего.<br />
<br />
|}<br />
<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, {<br />
slots: {<br />
"slotSource": {<br />
input: true,<br />
side: "up",<br />
isValid: function(item, side){<br />
return Recipes.getFurnaceRecipeResult(item.id, "iron");<br />
}<br />
},<br />
"slotFuel": {<br />
input: true,<br />
side: "horizontal",<br />
isValid: function(item, side){<br />
return Recipes.getFuelBurnDuration(item.id, item.data) > 0;<br />
}<br />
},<br />
"slotResult": {output: true}<br />
}<br />
});<br />
</syntaxhighlight><br />
</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"><br />
=== Методы для получения&nbsp;интерфесов хранилищ ===<br />
<br />
*'''StorageInterface.newStorage('''''container ''или ''tileEntity''''')''' - возвращает новый интерфейс хранилища для TileEntity или контейнера. <br />
*'''StorageInterface.getStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища для блока, являющегося контейнером. <br />
*'''StorageInterface.getLiquidStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища, если на указанных координатах находится TileEntity с хранилищем жидкости. <br />
*'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side. <br />
*'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side,&nbsp;если там находится TileEntity с хранилищем жидкости. <br />
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <br />
== Остальные методы StorageInterface ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| style="width: 178px;" | Название<br />
| style="width: 114px;" | Аргументы<br />
| style="width: 458px;" | Описание<br />
|-<br />
| style="width: 178px;" | '''getNearestContainers'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Возвращает соседние контейнеры относительно блока на координатах ''coords ''в виде объекта, где ключами являются стороны блока.<br />
|-<br />
| style="width: 178px;" | '''getNearestLiquidStorages'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Работает аналогично предыдущему, но возвращает интерфейсы хранилищ для всех соседних TileEntity, имеющих хранилища жидкостей.<br />
|-<br />
| style="width: 178px;" | '''putItems'''<br />
| style="width: 114px;" | items, containers<br />
| style="width: 458px;" | Добавляет предметы из массива items в контейнеры из объекта, возвращаемого методом&nbsp;''getNearestContainers'''''.'''<br />
|-<br />
| style="width: 178px;" | '''putItemToContainer'''<br />
| style="width: 114px;" | item, container, side, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов в контейнер.<br/> '''maxCount '''- максимальное количество предметов, которое может быть передано за раз&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromContainer'''<br />
| style="width: 114px;" | inputСontainer , outputContainer, side, maxCount, oneStack<br />
| style="width: 458px;" | <br />
Позволяет извлечь предмет из контейнера и добавить его в tile entity или контейнер.<br/> '''inputStorage&nbsp;'''- TileEntity или контейнер, в который будут добавлены предметы<br/> '''outputContainer '''- контейнер, из которого будут извлечены предметы<br/> '''maxCount '''- сколько предметов может быть извлечено (по умолчанию не ограничено)<br/> '''oneStack '''- если true, то извлечёт&nbsp;только один стак предметов.<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromStorage'''<br />
| style="width: 114px;" | inputStorage, outputStorage, side, maxCount, oneStack<br />
| style="width: 458px;" | Аналогичен предыдущему, но принимает аргументами интерфейсы хранилищ.<br />
|-<br />
| style="width: 178px;" | '''transportLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, outputStorage, inputStorage, outputSide<br />
| style="width: 458px;" | <br />
Передаёт жидкость из одного TileEntity в другой.<br/> '''liquid&nbsp;'''- название жидкости<br/> '''maxAmount&nbsp;'''- максимальное количество, которое будет передано<br/> '''outputStorage&nbsp;'''- интерфейс хранилища или TileEntity, из которого будет передана жидкость<br/> '''inputStorage&nbsp;'''- интерфейс хранилища, принимающего жидкость<br/> '''outputSide&nbsp;'''- сторона блока, через которую передаётся жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, inputStorage, outputStorage, inputSide<br />
| style="width: 458px;" | <br />
Похож на предыдущий, но позволяет извлечь жидкость из TileEntity<br/> '''liquid '''- название жидкости. Если не указано, то извлечёт любую жидкость&nbsp;из&nbsp;''outputStorage'',&nbsp;если она может быть принята в&nbsp;''inputStorage.''<br/> '''inputStorage&nbsp;'''- интерфейс хранилища или TileEntity,&nbsp;принимающий жидкость<br/> '''outputStorage&nbsp;'''- интерфейс хранилища, из которого будет извлечена жидкость<br/> '''inputSide '''- сторона блока, которая будет принимать жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''checkHoppers'''<br />
| style="width: 114px;" | tileEntity<br />
| style="width: 458px;" | Позволяет TileEntity взаимодействовать с воронками. Для этого должен вызываться в функции тика TileEntity .<br />
|-<br />
| style="width: 178px;" | '''addItemToSlot'''<br />
| style="width: 114px;" | item, slot, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов&nbsp;в слот. Изменяет только объект слота, для корректной работы требуется установить слот через&nbsp;''container.setSlot.''<br/> '''maxCount '''- максимальное количество, которое будет передано в слот&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|}</div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/StorageInterface&diff=2567InnerCore/Libs/StorageInterface2020-12-27T15:24:37Z<p>MineExplorer: </p>
<hr />
<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"><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"><br />
Данная библиотека для Inner Core позволяет описать взаимодействие блоков с трубами, воронками и прочими предметами для транспортировки предметов и жидкостей с помощью&nbsp;интерфейсов хранилищ, а так же добавляет методы для извлечения и загрузки предметов и жидкостей.<br />
<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"><br />
== Загрузка ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Версия<br />
| style="width: 36px;" | Ссылка<br />
| style="width: 393px;" | Список изменений<br />
| style="width: 250px;" | Дата релиза<br />
|-<br />
| '''9'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v9 Скачать]<br />
| style="width: 393px;" | <br />
*Новые методы для интерфейсов хранилищ:<br/> - getContainerSlots()<br/> -&nbsp;getInputSlots(side)<br/> -&nbsp;getReceivingItemCount(item, side)<br/> -&nbsp;addItemToSlot(name, item, maxCount)<br/> -&nbsp;clearContainer() <br />
*Исправлен стандартный интерфейс TIleEntity <br />
<br />
| style="width: 250px;" | 14.12.2020<br />
|-<br />
| '''8'''<br />
| style="width: 36px;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/storage-interface-v8 Скачать]<br />
| style="width: 393px;" | <br />
*Поддержка мультиплеера <br />
*Добавлены стандартные интерфейсы для всех видов контейнеров <br />
*Добавлены методы для получение интерфейсов хранилищ <br />
*Добавлены методы для установки валидации предметов и макс стака&nbsp;слотов в ItemContainer <br />
<br />
| style="width: 250px;" | 10.12.2020<br />
|-<br />
| '''7'''<br />
| style="text-align: center; width: 36px;" | -<br />
| style="width: 393px;" | <br />
- В описании слота в интерфейсе хранилища теперь можно указать стороны, через которые с ним можно взаимодействовать<br />
<br />
| style="width: 250px;" | 10.06.2020<br />
|-<br />
| '''6'''<br />
| style="width: 36px;" | [https://yadi.sk/d/TITakdpdsjIGug Скачать]<br />
| style="width: 393px;" | - Библиотека обновлена на InnerCore для Horizon: добавлена поддержка новых ванильных контейнеров.<br />
| style="width: 250px;" | 18.04.2020<br />
|-<br />
| '''5'''<br />
| style="width: 36px;" | [https://yadi.sk/d/Om5TRGdlhylfQA Скачать]<br />
| style="width: 393px;" | - Исправлена ошибка взаимодействия с tile entity без интерфейса хранилища в методе StorageInterface.transportLiquid<br />
| style="width: 250px;" | 09.03.2020<br />
|-<br />
| '''4'''<br />
| style="width: 36px;" | [https://yadi.sk/d/1gBu4a-fEme-jA Скачать]<br />
| style="width: 393px;" | <br />
*Улучшена работа с жидкостями <br />
*В интерфейс добавлено поле liquidStorage <br />
<br />
| style="width: 250px;" | 05.03.2020<br />
|-<br />
| '''3'''<br />
| style="width: 36px;" | [https://drive.google.com/file/d/1Hsp2nLIER0wF-ZzDvdsy1btxWFhnebv1/view?usp=sharing Скачать]<br />
| style="width: 393px;" | - Релиз библиотеки<br />
| style="width: 250px;" | 02.02.2020<br />
|}<br />
</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"><br />
== Импорт ==<br />
<br />
Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IC_Libraries/blob/master/library/StorageInterface.js StorageInterface.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).<br />
<br />
Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:<br />
<pre>IMPORT("StorageInterface");</pre><br />
<div class="mw-parser-output"><div class="mw-parser-output">&nbsp;</div> </div> </div> </div> <br />
== Интерфейсы хранилищ блоков ==<br />
<br />
Интерфейсы хранилищ объединяют в себе функции для работы с контейнерами и хранилищем жидкости и позволяют описать логику передачи предметов и жидкостей. В библиотеке есть стандартные интерфейсы для ванильных контейнеров и TileEntity, но вы можете зарегистрировать свой собственный для вашего TileEntity.<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Регистрация интерфейса&nbsp;хранилища ===<br />
<br />
''StorageInterface.createInterface(id блока, прототип интерфейса).''<br />
<br />
Все параметры слотов и функции прототипа интерфейса опциональны.<br/> Прототип интерфейса выглядит так:<br />
<syntaxhighlight lang="JavaScript">StorageInterface.createInterface(id блока, {<br />
slots: {<br />
"slot1": {<br />
input: boolean, // может ли слот принимать предметы<br />
output: boolean, // может ли слот отдавать предметы<br />
// Сторона блока, через которую доступен слот.<br />
// Значение - число или одна из настроек: "horizontal", "verctical", "down", "up".<br />
side: int | string,<br />
// Максимальное количество предметов в слоте<br />
maxStack: int,<br />
// Может ли слот принять предмет item со стороны side<br />
isValid: function(item, side, tileEntity) {<br />
return boolean;<br />
},<br />
// Можно ли извлечь предмет из слота (item - предмет в слоте)<br />
canOutput: function(item, side, tileEntity) {<br />
return boolean;<br />
}<br />
},<br />
// Означает все слоты с индексами от 2 до 10 (slot2, slot3, ..., slot10).<br />
"slot^2-10": {<br />
...<br />
},<br />
...<br />
},<br />
// функции интерфейса<br />
});</syntaxhighlight><br />
</div> </div> <br />
=== <br/> Функции интерфейса хранилища ===<br />
<br />
Интерфейс хранилища обладает следующими функциями. Вы можете заменить их на свои в прототипе интерфейса при регистрации.<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| Название<br />
| Аргументы<br />
| Описание<br />
|-<br />
| '''getSlot'''<br />
| name<br />
| Возвращает слот контейнера.<br />
|-<br />
| '''setSlot'''<br />
| name, id, count, data, extra<br />
| Устанавливает предмет в слот контейнера.<br />
|-<br />
| '''isValidInput'''<br />
| item, side, tileEntity<br />
| Аналогична функции isValid слота, но действует на все слоты контейнера. По умолчанию возвращает true.<br />
|-<br />
| '''addItem'''<br />
| item, side, maxCount<br />
| Функция добавления предмета. Возвращает количество добавленных предметов.<br />
|-<br />
| '''addItemToSlot'''<br />
| name, item, maxCount<br />
| Добавляет предмет в слот контейнера, maxCount - максимальное количество предмета, которое будет добавлено.<br />
|-<br />
| <br />
'''getReceivingItemCount'''<br />
<br />
| item, side<br />
| Возвращает сколько предметов из стака контейнер может принять.<br />
|-<br />
| <br />
'''getContainerSlots'''<br />
<br />
| -<br />
| Возвращает все слоты контейнера<br />
|-<br />
| '''getInputSlots'''<br />
| side<br />
| Возвращяет названия слотов входа,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''getOutputSlots'''<br />
| side<br />
| Возвращает названия слотов выхода,&nbsp;доступных со стороны ''side''.<br />
|-<br />
| '''clearContainer'''<br />
| -<br />
| Очищает содержимое контейнера<br />
|-<br />
| '''canReceiveLiquid'''<br />
| liquid, side<br />
| Может ли&nbsp;TileEntity принять жидкость с именем ''liquid ''со стороны ''side''. По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''canTransportLiquid'''<br />
| liquid, side<br />
| Может ли TileEntity отдать жидкость с именем ''liquid ''со стороны ''side''.&nbsp;По умолчанию возвращает true если в liquidStorage установлен лимит для этой жидкости.<br />
|-<br />
| '''addLiquid'''<br />
| liquid, amount<br />
| Функция добавление жидкости. По умолчанию работает с liquidStorage.<br />
|-<br />
| '''getLiquid'''<br />
| liquid, amount<br />
| Функция извлечения жидкости.&nbsp;По умолчанию работает с liquidStorage.<br />
|-<br />
| '''getLiquidStored'''<br />
| storageName<br />
| <br />
Функция получения жидкости, хранящейся в tile entity. Позволяет возвращать разные жидкости для входа и выхода.<br/> '''storageName''' - "input" для получения жидкости на вход и "output" для жидкости на выход.<br />
<br />
|-<br />
| '''getLiquidStorage'''<br />
| storageName<br />
| <br />
Возвращает хранилище жидкости.&nbsp;По умолчанию возвращает liquidStorage из TileEntity. Позволяет использовать альтернативные&nbsp;хранилища жидкостей.<br/> '''storageName''' - "input" для хранилища, принимающего жидкость, и "output" для отдающего.<br />
<br />
|}<br />
<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, {<br />
slots: {<br />
"slotSource": {<br />
input: true,<br />
side: "up",<br />
isValid: function(item, side){<br />
return Recipes.getFurnaceRecipeResult(item.id, "iron");<br />
}<br />
},<br />
"slotFuel": {<br />
input: true,<br />
side: "horizontal",<br />
isValid: function(item, side){<br />
return Recipes.getFuelBurnDuration(item.id, item.data) > 0;<br />
}<br />
},<br />
"slotResult": {output: true}<br />
}<br />
});<br />
</syntaxhighlight><br />
</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"><br />
=== Методы для получения&nbsp;интерфесов хранилищ ===<br />
<br />
*'''StorageInterface.newStorage('''''container ''или ''tileEntity''''')''' - возвращает новый интерфейс хранилища для TileEntity или контейнера. <br />
*'''StorageInterface.getStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища для блока, являющегося контейнером. <br />
*'''StorageInterface.getLiquidStorage('''''blockSource, x, y, z''''')''' - возвращает интерфейс хранилища, если на указанных координатах находится TileEntity с хранилищем жидкости. <br />
*'''StorageInterface.getNeighbourStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side. <br />
*'''StorageInterface.getNeighbourLiquidStorage('''''blockSource, coords, side''''')''' - возвращает интерфейс хранилища для соседнего блока со стороны side,&nbsp;если там находится TileEntity с хранилищем жидкости. <br />
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <br />
== Остальные методы StorageInterface ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1"<br />
|-<br />
| style="width: 178px;" | Название<br />
| style="width: 114px;" | Аргументы<br />
| style="width: 458px;" | Описание<br />
|-<br />
| style="width: 178px;" | '''getNearestContainers'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Возвращает соседние контейнеры относительно блока на координатах ''coords ''в виде объекта, где ключами являются стороны блока.<br />
|-<br />
| style="width: 178px;" | '''getNearestLiquidStorages'''<br />
| style="width: 114px;" | coords, blockSource<br />
| style="width: 458px;" | Работает аналогично предыдущему, но возвращает интерфейсы хранилищ для всех соседних TileEntity, имеющих хранилища жидкостей.<br />
|-<br />
| style="width: 178px;" | '''putItems'''<br />
| style="width: 114px;" | items, containers<br />
| style="width: 458px;" | Добавляет предметы из массива items в контейнеры из объекта, возвращаемого методом&nbsp;''getNearestContainers'''''.'''<br />
|-<br />
| style="width: 178px;" | '''putItemToContainer'''<br />
| style="width: 114px;" | item, container, side, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов в контейнер.<br/> '''maxCount '''- максимальное количество предметов, которое может быть передано за раз&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromContainer'''<br />
| style="width: 114px;" | inputСontainer , outputContainer, side, maxCount, oneStack<br />
| style="width: 458px;" | <br />
Позволяет извлечь предмет из контейнера и добавить его в tile entity или контейнер.<br/> '''inputStorage&nbsp;'''- TileEntity или контейнер, в который будут добавлены предметы<br/> '''outputContainer '''- контейнер, из которого будут извлечены предметы<br/> '''maxCount '''- сколько предметов может быть извлечено (по умолчанию не ограничено)<br/> '''oneStack '''- если true, то извлечёт&nbsp;только один стак предметов.<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractItemsFromStorage'''<br />
| style="width: 114px;" | inputStorage, outputStorage, side, maxCount, oneStack<br />
| style="width: 458px;" | Аналогичен предыдущему, но принимает аргументами интерфейсы хранилищ.<br />
|-<br />
| style="width: 178px;" | '''transportLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, outputStorage, inputStorage, outputSide<br />
| style="width: 458px;" | <br />
Передаёт жидкость из одного TileEntity в другой.<br/> '''liquid&nbsp;'''- название жидкости<br/> '''maxAmount&nbsp;'''- максимальное количество, которое будет передано<br/> '''outputStorage&nbsp;'''- интерфейс хранилища или TileEntity, из которого будет передана жидкость<br/> '''inputStorage&nbsp;'''- интерфейс хранилища, принимающего жидкость<br/> '''outputSide&nbsp;'''- сторона блока, через которую передаётся жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''extractLiquid'''<br />
| style="width: 114px;" | liquid, maxAmount, inputStorage, outputStorage, inputSide<br />
| style="width: 458px;" | <br />
Похож на предыдущий, но позволяет извлечь жидкость из TileEntity<br/> '''liquid '''- название жидкости. Если не указано, то извлечёт любую жидкость&nbsp;из&nbsp;''outputStorage'',&nbsp;если она может быть принята в&nbsp;''inputStorage.''<br/> '''inputStorage&nbsp;'''- интерфейс хранилища или TileEntity,&nbsp;принимающий жидкость<br/> '''outputStorage&nbsp;'''- интерфейс хранилища, из которого будет извлечена жидкость<br/> '''inputSide '''- сторона блока, которая будет принимать жидкость.<br />
<br />
Возвращает количество переданной жидкости.<br />
<br />
|-<br />
| style="width: 178px;" | '''checkHoppers'''<br />
| style="width: 114px;" | tileEntity<br />
| style="width: 458px;" | Позволяет TileEntity взаимодействовать с воронками. Для этого должен вызываться в функции тика TileEntity .<br />
|-<br />
| style="width: 178px;" | '''addItemToSlot'''<br />
| style="width: 114px;" | item, slot, maxCount<br />
| style="width: 458px;" | <br />
Добавляет стак предметов&nbsp;в слот. Изменяет только объект слота, для корректной работы требуется установить слот через&nbsp;''container.setSlot.''<br/> '''maxCount '''- максимальное количество, которое будет передано в слот&nbsp;(по умолчанию 64).<br />
<br />
Возвращает количество переданных предметов.<br />
<br />
|}<br />
</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> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div></div></div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore&diff=2566InnerCore2020-12-27T15:12:24Z<p>MineExplorer: </p>
<hr />
<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"><div class="mw-parser-output"><br />
InnerCore был создан на базе чистого MCPE 1.0.3 и является полноценной средой для создания и игры с модами, дающей возможности куда большие, чем [[CoreEngine|CoreEngine]]&nbsp;& [[BlockLauncher|BlockLauncher]].<br/> Написанная с нуля нативная часть позволила решить абсолютное большинство проблем, связанных с моддингом на базе [[BlockLauncher|BlockLauncher]] и сделать API намного эффективнее.<br />
<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"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
== Документация по Inner Core ==<br />
<br />
*Построение модов <br />
**[[InnerCore/Структура_модов|Структура модов]] <br />
**[[InnerCore/Стандартный_шаблон_модов|Стандартный шаблон модов]] <br />
**[[InnerCore/Ресурсы|Ресурсы]] <br />
**[[InnerCore/Компиляция_в_байткод|Компиляция в байткод]] <br />
**[[InnerCore/Базовые_методы_и_переменные_исполняемых_файлов|Базовые методы и переменные исполняемых файлов]] <br />
**[[InnerCore/Библиотеки|Библиотеки]] <br />
*[[InnerCore/Глобальные_методы_и_переменные_CoreEngine|Глобальные методы и переменные CoreEngine]] <br />
*События в игре. Модуль Callback <br />
**[[InnerCore/Модуль_Callback|Модуль Callback]] <br />
**[[InnerCore/Список_коллбеков|Список коллбеков]] <br />
**[[InnerCore/Список_назаний_ванильных_экранов|Список названий ванильных экранов]] <br />
*Блоки и предметы <br />
**[[InnerCore/Создание_блоков_и_предметов|Создание блоков и предметов]] <br />
**[[InnerCore/Naming_Standart|Стандарт Именования Inner Core]] <br />
**[[InnerCore/Продвинутое_создание_блоков_и_предметов|Продвинутое создание блоков и предметов]] <br />
**[[InnerCore/ToolAPI|ToolAPI]] <br />
**[[InnerCore/Рендер_блоков|Рендер блоков]] <br />
**[[InnerCore/Визуальная_составляющая_ICRender|Визуальная составляющая&nbsp;ICRender]] <br />
**[[InnerCore/Форма_блоков|Форма блоков]] <br />
**[[InnerCore/Класс_RenderMesh|Класс&nbsp;RenderMesh]] <br />
**[[InnerCore/Дополнительные_данные_предмета|Дополнительные данные предмета]] <br />
**[[InnerCore/Случайные_обновления_блоков|Случайные обновления блоков]] <br />
**[[InnerCore/TileEntity|TileEntity]] <br />
**[[InnerCore/Рецепты|Рецепты]] <br />
**[[InnerCore/Жидкости_и_работа_с_ними|Жидкости и работа с ними]] <br />
**[[InnerCore/Броня|Броня]] <br />
*[[InnerCore/Модуль_World|Модуль World]] <br />
*Генерация <br />
**[[InnerCore/Модуль_GenerationUtils|Модуль GenerationUtils]] <br />
**[[InnerCore/Основы_генерации|Основы генерации]] <br />
*[[InnerCore/Модуль_Game|Модуль Game]] <br />
*Сущности <br />
**[[InnerCore/Модуль_Entity|Модуль Entity]] <br />
**[[InnerCore/Список_ванильных_рендеров|Список ванильных рендеров]] <br />
**[[InnerCore/Создание_мобов|Создание мобов]] <br />
**[[InnerCore/Пример_создания_моба|Пример создания моба]] <br />
**[[InnerCore/Кастомные_мобы|Кастомные мобы]] <br />
*[[InnerCore/Модуль_Player|Модуль Player]] <br />
*GUI <br />
**[[InnerCore/Модуль_UI|Модуль UI]] <br />
**[[InnerCore/Введение_в_GUI|Введение в GUI]] <br />
***[[InnerCore/Введение_в_GUI/Стандартный_интерфейс|Стандартный интерфейс]] <br />
***[[InnerCore/Введение_в_GUI/Однооконный_интерфейс|Однооконный интерфейс]] <br />
***[[InnerCore/Введение_в_GUI/Многооконный_интерфейс|Многооконный интерфейс]] <br />
**[[InnerCore/Контейнеры|Контейнеры]] <br />
**[[InnerCore/Динамичный_интерфейс|Динамичный интерфейс]] <br />
*[[InnerCore/Модуль_ModAPI|Модуль ModAPI]] <br />
*[[InnerCore/Модуль_Updatable|Модуль&nbsp;Updatable]] <br />
*[[InnerCore/Модуль_GameObject|Модуль GameObject]] <br />
*[[InnerCore/Анимации|Анимации]] <br />
*Отладка <br />
**[[InnerCore/Модуль_Logger|Модуль Logger]] <br />
**[[InnerCore/Модуль_Debug|Модуль Debug]] <br />
*[[InnerCore/Модуль_Particles|Модуль Particles]] <br />
*[[InnerCore/Модуль_FileTools|Модуль FileTools]] <br />
*[[InnerCore/Модуль_SaverScope|Модуль SaverScope]] <br />
*[[InnerCore/Модуль_Translation|Модуль Translation]] <br />
*[[InnerCore/Многопоточность|Многопоточность]] <br />
</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">&nbsp;</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 class="mw-parser-output"><div class="mw-parser-output">&nbsp;</div> </div> </div> </div> </div></div><br />
<br />
== Список модов: ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1" style="width: 100%;"<br />
|-<br />
| style="text-align: center; width: 93px;" | '''Мод/API'''<br />
| style="text-align: center; width: 226px;" | '''Автор / Официальный источник'''<br />
| style="text-align: center; width: 100px;" | '''Мод в браузере'''<br />
| style="text-align: center; width: 608px;" | '''Краткое описание'''<br />
|-<br />
| style="width: 93px; text-align: center;" | [[InnerCore/Libs/GuideAPI|GuideAPI]]<br />
| style="width: 226px; text-align: center;" | [https://vk.com/forestry_pe DDCompany]<br />
| style="text-align: center; width: 100px;" | [https://icmods.mineprogramming.org/mod?id=39 GuideAPI]<br />
| style="width: 608px;" | Мод-библиотека, предоставляющая большие возможности для создания игровых документаций .<br />
|-<br />
| style="width: 93px; text-align: center;" | [[InnerCore/Mods/Waila|Waila]]<br />
| style="width: 226px; text-align: center;" | [https://vk.com/forestry_pe DDCompany]<br />
| style="text-align: center; width: 100px;" | [https://icmods.mineprogramming.org/mod?id=144 Waila]<br />
| style="width: 608px;" | Мод позволяет увидеть название блока, его материал, возможность сломать, здоровье и айди моба, наведя на соответствующий объект в мире.<br />
|-<br />
| style="width: 93px; text-align: center;" | [[InnerCore/Mods/APO_Craft|A.P.O. Craft]]<br />
| style="width: 226px; text-align: center;" | [https://vk.com/igormelikhov IchZerowan]<br />
| style="text-align: center; width: 100px;" | [https://icmods.mineprogramming.org/mod?id=361 A.P.O. Craft]<br />
| style="width: 608px;" | Мод добавляет постаппокалиптический город в игру.<br />
|-<br />
| style="width: 93px; text-align: center;" | [[InnerCore/Mods/OresMod|OresMod]]<br />
| style="width: 226px; text-align: center;" | [https://vk.com/myrzicmur Kotoffey23]<br />
| style="text-align: center; width: 100px;" | [https://icmods.mineprogramming.org/mod?id=59 Ores Mod]<br />
| style="width: 608px;" | Мод добавляет механизмы и руды. Рутинно, но почему бы и нет?<br />
|-<br />
| style="width: 93px; text-align: center;" | [[InnerCore/Mods/WolfGunsMod|WolfGunsMod]]<br />
| style="width: 226px; text-align: center;" | [https://vk.com/wolf___team WolfTeam]<br />
| style="text-align: center; width: 100px;" | [https://icmods.mineprogramming.org/mod?id=397 WolfGunsMod]<br />
| style="width: 608px;" | Мод добавляет оружие.&nbsp;<br />
|-<br />
| style="width: 93px; text-align: center;" | [[WorldLoader|WorldLoader]]<br />
| style="width: 226px; text-align: center;" | [https://vk.com/wolf___team WolfTeam]<br />
| style="text-align: center; width: 100px;" | [https://icmods.mineprogramming.org/mod.php?id=470 WorldLoader]<br />
| style="width: 608px;" | Утилита позволяющая создавать миры модификаций.<br />
|}<br />
<br />
</div> </div><br />
<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;</div> </div> </div> </div> </div> </div> </div><br />
<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
== Список библиотек: ==<br />
<br />
{| align="center" border="1" cellpadding="1" cellspacing="1" style="width: 100%;"<br />
|-<br />
! scope="col" style="text-align: center; width: 121px;" | Библиотека<br />
! scope="col" style="text-align: center; width: 214px;" | Автор / Официальный источник<br />
! scope="col" style="width: 694px; text-align: center;" | Краткое описание<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Mods/AchievementsAPI|AchievementsAPI]]<br />
| style="text-align: center; width: 214px; height: 20px;" | [https://vk.com/forestry_pe DDCompany]<br />
| style="width: 694px;" | Библиотека для создания достижений<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/EnergyLib|EnergyLib]]<br />
| style="text-align: center; width: 214px; height: 20px;" | [https://vk.com/core_engine Inner Core]<br />
| style="width: 694px;" | Библиотека для создания и работы с различными видами энергии, проводами, генераторами и потребителями.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/EnergyNet|EnergyNet]]<br />
| style="text-align: center; width: 214px; height: 20px;" | [https://icmods.mineprogramming.org/search?author=19 MineExplorer]<br />
| style="width: 694px;" | Более продвинутая версия предыдущей библиотеки, позволяющая передавать энергию пакетами и устанавливать проводам лимит на передачу энергии.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/ToolLib|ToolLib]]<br />
| style="text-align: center; width: 214px; height: 20px;" | [https://icmods.mineprogramming.org/search?author=19 MineExplorer]<br />
| style="width: 694px;" | Библиотека, предоставляющая универсальные типы инструментов и добавляющая несколько вспомогательных методов.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/StorageInterface|StorageInterface]]<br />
| style="text-align: center; width: 214px; height: 20px;" | [https://icmods.mineprogramming.org/search?author=19 MineExplorer]<br />
| style="width: 694px;" | Библиотека, упрощающая передачу предметов и жидкостей и позволяющая её настраивать с помощью интерфейсов хранилищ.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/Dimensions|Dimensions]]<br />
| style="text-align: center; width: 214px; height: 20px;" | [https://vk.com/zheka_smirnov Zheka_Smirnov]<br />
| style="width: 694px;" | Библиотека, упрощающая создание измерений.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/modpacker|#modpacker]]<br />
| style="text-align: center; width: 214px;" | [https://www.mineprogramming.org/ #mineprogramming]<br />
| style="width: 694px;" | Библиотека для создания и загрузки управляемых сборок модов.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/EntityState|EntityState]]<br />
| style="text-align: center; width: 214px;" | [https://www.mineprogramming.org/ #mineprogramming]<br />
| style="width: 694px;" | Библиотека для получения текущего действия игрока (его движений).<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/ScalesRPG|ScalesRPG]]<br />
| style="text-align: center; width: 214px;" | [https://www.mineprogramming.org/ #mineprogramming]<br />
| style="width: 694px;" | Библиотека для регистрации различных шкал в дополнение к существующим (голода, здоровья, брони...).<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/SettingsManager|SettingsManager]]<br />
| style="text-align: center; width: 214px;" | [https://www.mineprogramming.org/ #mineprogramming]<br />
| style="width: 694px;" | Библиотека для упрощения работы с настройками игры.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/BackpackAPI|BackpackAPI]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/forestry_pe DDCompany]<br />
| style="width: 694px;" | Библиотека для регистрации рюкзаков.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/Baubles|Baubles]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/forestry_pe DDCompany]<br />
| style="width: 694px;" | Библиотека, предоставляющая АПИ для регистрации фенечек.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/AdvancedAI|AdvancedAI]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/trashboxbobylev TrashboxBobylev]<br />
| style="width: 694px;" | Библиотека, содержащая новые типы ИИ мобов.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/MobLib|MobLib]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/wolf___team WolfTeam]<br />
| style="width: 694px;" | Библиотека, упращающая создание мобов.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/RecipeTELib|RecipeTELib]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/wolf___team WolfTeam]<br />
| style="width: 694px;" | Библиотека, упрощающая создание верстаков и печей.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/ShootLib|ShootLib]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/wolf___team WolfTeam]<br />
| style="width: 694px;" | Библиотека для создания оружия.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/SoundAPI|SoundAPI]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/wolf___team WolfTeam]<br />
| style="width: 694px;" | Библиотека для работы со звуком.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/StructuresAPI|StructuresAPI]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/wolf___team WolfTeam]<br />
| style="width: 694px;" | Библиотека, упрощающая работу со структурами<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/Timer|Timer]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/tmm_corporation TooManyMods]<br />
| style="width: 694px;" | Библиотека, упрощающая работу с временем тика.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/BowLib|BowLib]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/tmm_corporation TooManyMods]<br />
| style="width: 694px;" | <br />
Библиотека, упрощающая создание собственного лука<br />
<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libraries/VanillaRecipe|VanillaRecipe]]<br />
| style="text-align: center; width: 214px;" | [https://icmods.mineprogramming.org/search?author=19 MineExplorer]<br />
| style="width: 694px;" | Библиотека, упрощающая внедрение рецептов крафта в Minecraft в формате JSON<br />
|}<br />
<br />
</div><br />
</div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/ToolAPI_%D0%B8_ToolType&diff=2565InnerCore/ToolAPI и ToolType2020-12-27T15:11:50Z<p>MineExplorer: MineExplorer переименовал страницу InnerCore/ToolAPI и ToolType в InnerCore/Libs/ToolLib: Разделение статей и переименование библиотеки</p>
<hr />
<div>#перенаправление [[InnerCore/Libs/ToolLib]]</div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/ToolLib&diff=2564InnerCore/Libs/ToolLib2020-12-27T15:11:49Z<p>MineExplorer: MineExplorer переименовал страницу InnerCore/ToolAPI и ToolType в InnerCore/Libs/ToolLib: Разделение статей и переименование библиотеки</p>
<hr />
<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"><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"><br />
ToolAPI - API позваляющий&nbsp;регистрировать инструменты.<br/> ToolLib -&nbsp;Библиотека, предоставляющая универсальные типы инструментов и содержащая несколько вспомогательных методов для работы с инструментами и блоками.<br />
<br />
== Загрузка ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1" style="width: 579px;"<br />
|-<br />
| style="width: 68px; text-align: center;" | '''Версия'''<br />
| style="width: 81px; text-align: center;" | '''Скачать'''<br />
| style="width: 305px; text-align: center;" | '''Изменения'''<br />
| style="width: 100px; text-align: center;" | '''Дата выхода'''<br />
|-<br />
| style="width: 68px; text-align: center;" | '''23'''<br />
| style="width: 81px; text-align: center;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/toollib-v23 Скачать]<br />
| style="width: 305px;" | - Поддержка мультиплеера<br />
| style="width: 100px; text-align: center;" | 27.12.20<br />
|-<br />
| style="width: 68px; text-align: center;" | '''22'''<br />
| style="width: 81px; text-align: center;" | -<br />
| style="width: 305px;" | - Топоры могут делать обтёсанную древесину<br/> -&nbsp;Исправления ошибок<br />
| style="width: 100px; text-align: center;" | 24.08.20<br />
|-<br />
| style="width: 68px; text-align: center;" | '''21'''<br />
| style="width: 81px; text-align: center;" | -<br />
| style="width: 305px;" | - Добавлен enum&nbsp;MiningLevel<br />
| style="width: 100px; text-align: center;" | 11.07.20<br />
|}<br />
<div class="mw-parser-output"><br />
== <br/> Документация ==<br />
<br />
=== Подключение ===<br />
<br />
Чтобы подключить библиотеку, необходимо расположить файл библиотеки в папку lib в корне мода&nbsp;написать следующее в начале вашего кода:<br />
<syntaxhighlight lang="JavaScript">IMPORT("ToolLib");</syntaxhighlight><br />
<br />
После этого вам станет доступен весь функционал библиотеки.<br />
<br />
<div class="mw-parser-output"><br />
=== Добавление инструмента ===<br />
<br />
Для регистрации инструмента используется метод ToolLib.setTool(ItemID, toolMaterial, toolType)<br />
<syntaxhighlight lang="JavaScript">ToolLib.setTool(ItemID.myTool, "wood", ToolType.axe);<br />
</syntaxhighlight><br />
<br />
Так же вместо названия материала может напрямую быть передан объект с его свойствами.<br />
<br />
Для регистрации нового материала инструментов используется метод&nbsp;ToolAPI.addToolMaterial(toolMaterial, params)<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addToolMaterial("dirt", {<br />
durability: 15, // Прочность (Сколько блоков можно сломать)<br />
level: 1, // Уровень инструмента - определяет, какие блоки инструмент может добыть.<br />
efficiency: 10, // Эффективность - модификатор скорости ломания блока<br />
damage: 1, // Увеличение базового урона инструмента данным материалом<br />
enchantability: 14 // Зачаровываемость, чем выше, тем более хорошие чары будут при зачаровании<br />
});<br />
</syntaxhighlight><br />
<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;</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div><br />
<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Регистрация блоков ===<br />
<br />
Для регистрации блока используется метод&nbsp;ToolAPI.registerBlockMaterial(BlockID, blockMaterial, level);<br/> ''blockMaterial ''- материал блока.<br/> ''level ''- уровень добычи<br />
<br />
Уровни добычи блоков можно задавать числами или используя константы из списка MiningLevel, добавляемого библиотекой:<br />
<br />
MiningLevel.STONE&nbsp;=&nbsp;1 - камень<br/> MiningLevel.IRON&nbsp;=&nbsp;2 - железная руда<br/> MiningLevel.DIAMOND&nbsp;=&nbsp;3 - алмазная руда<br/> MiningLevel.OBSIDIAN&nbsp;=&nbsp;4 - обсидиан<br />
<br />
Пример:<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerBlockMaterial(BlockID.myBlock, "stone", 1);<br />
ToolAPI.registerBlockMaterial(BlockID.myBlock2, "stone", MiningLevel.STONE);<br />
</syntaxhighlight><br />
<br />
По умолчанию доступны следующие материалы:<br/> "stone" - каменные блоки,<br/> "wood" - деревянные,<br/> "dirt" - земляные,<br/> "plant" - растения,<br/> "fibre" - паутина,<br/> "unbreaking" - неломаемые<br />
<br />
Для регистрации материала блока используется метод&nbsp;ToolAPI.addBlockMaterial(blockMaterial, breakingMultiplier);<br/> ''blockMaterial ''- название материала.<br/> ''breakingMultiplier ''- модификатор времени ломания блока при добыче без подходящего инструмента.<br />
<br />
Пример:<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addBlockMaterial("test", 3);</syntaxhighlight><br />
</div> </div><br />
<br />
=== Типы инструментов ===<br />
<br />
Cтандартные типы:<br />
<br />
ToolType.sword - меч<br/> ToolType.shovel - лопата<br/> ToolType.pickaxe - кирка<br/> ToolType.axe - топор<br/> ToolType.hoe - мотыга<br />
<br />
Создание своего типа инструментов<br />
<syntaxhighlight lang="JavaScript">ToolType.myType = {<br />
enchantType: Native.EnchantType.pickaxe, //Тип чар для инструмента<br />
damage: 2, // Базовый урон инструмента<br />
blockTypes: ["dirt", "stone", "test"], // Материалы блоков, которые может ломать инструмент<br />
onAttack: function(item) {<br />
if (item.data > Item.getMaxDamage(item.id)) {<br />
item.id = item.data = item.count = 0;<br />
}<br />
}<br />
} </syntaxhighlight><br />
</div> </div> </div> </div> <br />
=== Все методы ===<br />
<br />
// Скоро будут добавлены<br />
</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> </div> </div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/ToolAPI&diff=2563InnerCore/ToolAPI2020-12-27T15:08:40Z<p>MineExplorer: </p>
<hr />
<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">ToolAPI - это API, позваляющий&nbsp;регистрировать инструменты и добываемые ими блоки. <br />
=== Добавление инструмента ===<br />
<br />
Для регистрации инструмента используется метод ToolAPI.registerTool(id, toolMaterial, blockMaterials, params)<br/> ''toolMaterial ''- название материала инструмента&nbsp;или объект его описания<br/> ''blockMaterials ''- массив с типами блоков, которые может добыть инструмент<br/> ''params ''- дополнительные параметры и функции инструмента<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerTool(ItemID.myPickaxe, "wood", ["stone"], {<br />
damage: 1, // базовый урон инструмента,<br />
brokenId: 0, // id предмета, который установится вместо инструмента при ломании<br />
isWeapon: false, // является ли инструмент оружием (влияет на уменьшение прочности)<br />
onAttack: function(item, victim, attacker) { // действие при атаке<br />
return true; // возврат true предотвращает ломание иснутрумента<br />
}<br />
onDestroy: function(item, coords, block, player) { // действие при ломании блока<br />
return true;<br />
}<br />
// расчёт времени ломания блока инструментом<br />
calcDestroyTime: function(toolData, coords, block, params, destroyTime, enchantData) {<br />
return 0;<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
Для регистрации нового материала инструментов используется метод&nbsp;ToolAPI.addToolMaterial(toolMaterial, params)<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addToolMaterial("dirt", {<br />
durability: 15, // Прочность (сколько блоков можно сломать)<br />
level: 1, // Уровень инструмента - определяет, какие блоки инструмент может добыть.<br />
efficiency: 10, // Эффективность - модификатор скорости ломания блока<br />
damage: 1, // Урон от материала (складывается с базовым уроном)<br />
enchantability: 14 // Зачаровываемость, чем выше, тем более хорошие чары будут при зачаровании<br />
});</syntaxhighlight><br />
<br />
=== Регистрация блоков ===<br />
<br />
Для регистрации блока используется метод&nbsp;ToolAPI.registerBlockMaterial(BlockID, blockMaterial, level);<br/> ''blockMaterial ''- материал блока.<br/> ''level ''- уровень добычи<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerBlockMaterial(BlockID.myBlock, "stone", 1);<br />
</syntaxhighlight><br />
<br />
Уровни добычи блоков из майнкрафта:<br/> 1 - камень<br/> 2 - железная руда<br/> 3 - алмазная руда<br/> 4 - обсидиан<br />
<br />
По умолчанию доступны следующие материалы:<br/> "stone" - каменный,<br/> "wood" - деревянный,<br/> "dirt" - земляной,<br/> "plant" - растения,<br/> "fibre" - паутина,<br/> "unbreaking" - неломаемый<br />
<br />
Для регистрации материала блока используется метод&nbsp;ToolAPI.addBlockMaterial(blockMaterial, breakingMultiplier);<br/> ''blockMaterial ''- название материала.<br/> ''breakingMultiplier ''- модификатор времени ломания блока при добыче без подходящего инструмента.<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addBlockMaterial("test", 3);</syntaxhighlight><br />
</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore&diff=2562InnerCore2020-12-27T14:55:15Z<p>MineExplorer: </p>
<hr />
<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"><div class="mw-parser-output"><br />
InnerCore был создан на базе чистого MCPE 1.0.3 и является полноценной средой для создания и игры с модами, дающей возможности куда большие, чем [[CoreEngine|CoreEngine]]&nbsp;& [[BlockLauncher|BlockLauncher]].<br/> Написанная с нуля нативная часть позволила решить абсолютное большинство проблем, связанных с моддингом на базе [[BlockLauncher|BlockLauncher]] и сделать API намного эффективнее.<br />
<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"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
== Документация по Inner Core ==<br />
<br />
*Построение модов <br />
**[[InnerCore/Структура_модов|Структура модов]] <br />
**[[InnerCore/Стандартный_шаблон_модов|Стандартный шаблон модов]] <br />
**[[InnerCore/Ресурсы|Ресурсы]] <br />
**[[InnerCore/Компиляция_в_байткод|Компиляция в байткод]] <br />
**[[InnerCore/Базовые_методы_и_переменные_исполняемых_файлов|Базовые методы и переменные исполняемых файлов]] <br />
**[[InnerCore/Библиотеки|Библиотеки]] <br />
*[[InnerCore/Глобальные_методы_и_переменные_CoreEngine|Глобальные методы и переменные CoreEngine]] <br />
*События в игре. Модуль Callback <br />
**[[InnerCore/Модуль_Callback|Модуль Callback]] <br />
**[[InnerCore/Список_коллбеков|Список коллбеков]] <br />
**[[InnerCore/Список_назаний_ванильных_экранов|Список названий ванильных экранов]] <br />
*Блоки и предметы <br />
**[[InnerCore/Создание_блоков_и_предметов|Создание блоков и предметов]] <br />
**[[InnerCore/Naming_Standart|Стандарт Именования Inner Core]] <br />
**[[InnerCore/Продвинутое_создание_блоков_и_предметов|Продвинутое создание блоков и предметов]] <br />
**[[InnerCore/ToolAPI|ToolAPI]] <br />
**[[InnerCore/Рендер_блоков|Рендер блоков]] <br />
**[[InnerCore/Визуальная_составляющая_ICRender|Визуальная составляющая&nbsp;ICRender]] <br />
**[[InnerCore/Форма_блоков|Форма блоков]] <br />
**[[InnerCore/Класс_RenderMesh|Класс&nbsp;RenderMesh]] <br />
**[[InnerCore/Дополнительные_данные_предмета|Дополнительные данные предмета]] <br />
**[[InnerCore/Случайные_обновления_блоков|Случайные обновления блоков]] <br />
**[[InnerCore/TileEntity|TileEntity]] <br />
**[[InnerCore/Рецепты|Рецепты]] <br />
**[[InnerCore/Жидкости_и_работа_с_ними|Жидкости и работа с ними]] <br />
**[[InnerCore/Броня|Броня]] <br />
*[[InnerCore/Модуль_World|Модуль World]] <br />
*Генерация <br />
**[[InnerCore/Модуль_GenerationUtils|Модуль GenerationUtils]] <br />
**[[InnerCore/Основы_генерации|Основы генерации]] <br />
*[[InnerCore/Модуль_Game|Модуль Game]] <br />
*Сущности <br />
**[[InnerCore/Модуль_Entity|Модуль Entity]] <br />
**[[InnerCore/Список_ванильных_рендеров|Список ванильных рендеров]] <br />
**[[InnerCore/Создание_мобов|Создание мобов]] <br />
**[[InnerCore/Пример_создания_моба|Пример создания моба]] <br />
**[[InnerCore/Кастомные_мобы|Кастомные мобы]] <br />
*[[InnerCore/Модуль_Player|Модуль Player]] <br />
*GUI <br />
**[[InnerCore/Модуль_UI|Модуль UI]] <br />
**[[InnerCore/Введение_в_GUI|Введение в GUI]] <br />
***[[InnerCore/Введение_в_GUI/Стандартный_интерфейс|Стандартный интерфейс]] <br />
***[[InnerCore/Введение_в_GUI/Однооконный_интерфейс|Однооконный интерфейс]] <br />
***[[InnerCore/Введение_в_GUI/Многооконный_интерфейс|Многооконный интерфейс]] <br />
**[[InnerCore/Контейнеры|Контейнеры]] <br />
**[[InnerCore/Динамичный_интерфейс|Динамичный интерфейс]] <br />
*[[InnerCore/Модуль_ModAPI|Модуль ModAPI]] <br />
*[[InnerCore/Модуль_Updatable|Модуль&nbsp;Updatable]] <br />
*[[InnerCore/Модуль_GameObject|Модуль GameObject]] <br />
*[[InnerCore/Анимации|Анимации]] <br />
*Отладка <br />
**[[InnerCore/Модуль_Logger|Модуль Logger]] <br />
**[[InnerCore/Модуль_Debug|Модуль Debug]] <br />
*[[InnerCore/Модуль_Particles|Модуль Particles]] <br />
*[[InnerCore/Модуль_FileTools|Модуль FileTools]] <br />
*[[InnerCore/Модуль_SaverScope|Модуль SaverScope]] <br />
*[[InnerCore/Модуль_Translation|Модуль Translation]] <br />
*[[InnerCore/Многопоточность|Многопоточность]] <br />
</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">&nbsp;</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 class="mw-parser-output"><div class="mw-parser-output">&nbsp;</div> </div> </div> </div> </div></div><br />
<br />
== Список модов: ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1" style="width: 100%;"<br />
|-<br />
| style="text-align: center; width: 93px;" | '''Мод/API'''<br />
| style="text-align: center; width: 226px;" | '''Автор / Официальный источник'''<br />
| style="text-align: center; width: 100px;" | '''Мод в браузере'''<br />
| style="text-align: center; width: 608px;" | '''Краткое описание'''<br />
|-<br />
| style="width: 93px; text-align: center;" | [[InnerCore/Libs/GuideAPI|GuideAPI]]<br />
| style="width: 226px; text-align: center;" | [https://vk.com/forestry_pe DDCompany]<br />
| style="text-align: center; width: 100px;" | [https://icmods.mineprogramming.org/mod?id=39 GuideAPI]<br />
| style="width: 608px;" | Мод-библиотека, предоставляющая большие возможности для создания игровых документаций .<br />
|-<br />
| style="width: 93px; text-align: center;" | [[InnerCore/Mods/Waila|Waila]]<br />
| style="width: 226px; text-align: center;" | [https://vk.com/forestry_pe DDCompany]<br />
| style="text-align: center; width: 100px;" | [https://icmods.mineprogramming.org/mod?id=144 Waila]<br />
| style="width: 608px;" | Мод позволяет увидеть название блока, его материал, возможность сломать, здоровье и айди моба, наведя на соответствующий объект в мире.<br />
|-<br />
| style="width: 93px; text-align: center;" | [[InnerCore/Mods/APO_Craft|A.P.O. Craft]]<br />
| style="width: 226px; text-align: center;" | [https://vk.com/igormelikhov IchZerowan]<br />
| style="text-align: center; width: 100px;" | [https://icmods.mineprogramming.org/mod?id=361 A.P.O. Craft]<br />
| style="width: 608px;" | Мод добавляет постаппокалиптический город в игру.<br />
|-<br />
| style="width: 93px; text-align: center;" | [[InnerCore/Mods/OresMod|OresMod]]<br />
| style="width: 226px; text-align: center;" | [https://vk.com/myrzicmur Kotoffey23]<br />
| style="text-align: center; width: 100px;" | [https://icmods.mineprogramming.org/mod?id=59 Ores Mod]<br />
| style="width: 608px;" | Мод добавляет механизмы и руды. Рутинно, но почему бы и нет?<br />
|-<br />
| style="width: 93px; text-align: center;" | [[InnerCore/Mods/WolfGunsMod|WolfGunsMod]]<br />
| style="width: 226px; text-align: center;" | [https://vk.com/wolf___team WolfTeam]<br />
| style="text-align: center; width: 100px;" | [https://icmods.mineprogramming.org/mod?id=397 WolfGunsMod]<br />
| style="width: 608px;" | Мод добавляет оружие.&nbsp;<br />
|-<br />
| style="width: 93px; text-align: center;" | [[WorldLoader|WorldLoader]]<br />
| style="width: 226px; text-align: center;" | [https://vk.com/wolf___team WolfTeam]<br />
| style="text-align: center; width: 100px;" | [https://icmods.mineprogramming.org/mod.php?id=470 WorldLoader]<br />
| style="width: 608px;" | Утилита позволяющая создавать миры модификаций.<br />
|}<br />
<br />
</div> </div><br />
<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;</div> </div> </div> </div> </div> </div> </div><br />
<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
<div class="mw-parser-output"><br />
== Список библиотек: ==<br />
<br />
{| align="center" border="1" cellpadding="1" cellspacing="1" style="width: 100%;"<br />
|-<br />
! scope="col" style="text-align: center; width: 121px;" | Библиотека<br />
! scope="col" style="text-align: center; width: 214px;" | Автор / Официальный источник<br />
! scope="col" style="width: 694px; text-align: center;" | Краткое описание<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Mods/AchievementsAPI|AchievementsAPI]]<br />
| style="text-align: center; width: 214px; height: 20px;" | [https://vk.com/forestry_pe DDCompany]<br />
| style="width: 694px;" | Библиотека для создания достижений<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/EnergyLib|EnergyLib]]<br />
| style="text-align: center; width: 214px; height: 20px;" | [https://vk.com/core_engine Inner Core]<br />
| style="width: 694px;" | Библиотека для создания и работы с различными видами энергии, проводами, генераторами и потребителями.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/EnergyNet|EnergyNet]]<br />
| style="text-align: center; width: 214px; height: 20px;" | [https://icmods.mineprogramming.org/search?author=19 MineExplorer]<br />
| style="width: 694px;" | Более продвинутая версия предыдущей библиотеки, позволяющая передавать энергию пакетами и устанавливать проводам лимит на передачу энергии.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/ToolAPI_и_ToolType|ToolLib]]<br />
| style="text-align: center; width: 214px; height: 20px;" | [https://icmods.mineprogramming.org/search?author=19 MineExplorer]<br />
| style="width: 694px;" | Библиотека, предоставляющая универсальные типы инструментов и добавляющая несколько вспомогательных методов.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/StorageInterface|StorageInterface]]<br />
| style="text-align: center; width: 214px; height: 20px;" | [https://icmods.mineprogramming.org/search?author=19 MineExplorer]<br />
| style="width: 694px;" | Библиотека, упрощающая передачу предметов и жидкостей и позволяющая её настраивать с помощью интерфейсов хранилищ.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/Dimensions|Dimensions]]<br />
| style="text-align: center; width: 214px; height: 20px;" | [https://vk.com/zheka_smirnov Zheka_Smirnov]<br />
| style="width: 694px;" | Библиотека, упрощающая создание измерений.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/modpacker|#modpacker]]<br />
| style="text-align: center; width: 214px;" | [https://www.mineprogramming.org/ #mineprogramming]<br />
| style="width: 694px;" | Библиотека для создания и загрузки управляемых сборок модов.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/EntityState|EntityState]]<br />
| style="text-align: center; width: 214px;" | [https://www.mineprogramming.org/ #mineprogramming]<br />
| style="width: 694px;" | Библиотека для получения текущего действия игрока (его движений).<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/ScalesRPG|ScalesRPG]]<br />
| style="text-align: center; width: 214px;" | [https://www.mineprogramming.org/ #mineprogramming]<br />
| style="width: 694px;" | Библиотека для регистрации различных шкал в дополнение к существующим (голода, здоровья, брони...).<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/SettingsManager|SettingsManager]]<br />
| style="text-align: center; width: 214px;" | [https://www.mineprogramming.org/ #mineprogramming]<br />
| style="width: 694px;" | Библиотека для упрощения работы с настройками игры.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/BackpackAPI|BackpackAPI]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/forestry_pe DDCompany]<br />
| style="width: 694px;" | Библиотека для регистрации рюкзаков.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/Baubles|Baubles]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/forestry_pe DDCompany]<br />
| style="width: 694px;" | Библиотека, предоставляющая АПИ для регистрации фенечек.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/AdvancedAI|AdvancedAI]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/trashboxbobylev TrashboxBobylev]<br />
| style="width: 694px;" | Библиотека, содержащая новые типы ИИ мобов.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/MobLib|MobLib]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/wolf___team WolfTeam]<br />
| style="width: 694px;" | Библиотека, упращающая создание мобов.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/RecipeTELib|RecipeTELib]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/wolf___team WolfTeam]<br />
| style="width: 694px;" | Библиотека, упрощающая создание верстаков и печей.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/ShootLib|ShootLib]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/wolf___team WolfTeam]<br />
| style="width: 694px;" | Библиотека для создания оружия.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/SoundAPI|SoundAPI]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/wolf___team WolfTeam]<br />
| style="width: 694px;" | Библиотека для работы со звуком.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/StructuresAPI|StructuresAPI]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/wolf___team WolfTeam]<br />
| style="width: 694px;" | Библиотека, упрощающая работу со структурами<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/Timer|Timer]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/tmm_corporation TooManyMods]<br />
| style="width: 694px;" | Библиотека, упрощающая работу с временем тика.<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libs/BowLib|BowLib]]<br />
| style="text-align: center; width: 214px;" | [https://vk.com/tmm_corporation TooManyMods]<br />
| style="width: 694px;" | <br />
Библиотека, упрощающая создание собственного лука<br />
<br />
|-<br />
| style="text-align: center; width: 121px;" | [[InnerCore/Libraries/VanillaRecipe|VanillaRecipe]]<br />
| style="text-align: center; width: 214px;" | [https://icmods.mineprogramming.org/search?author=19 MineExplorer]<br />
| style="width: 694px;" | Библиотека, упрощающая внедрение рецептов крафта в Minecraft в формате JSON<br />
|}<br />
</div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/ToolAPI&diff=2561InnerCore/ToolAPI2020-12-27T14:53:55Z<p>MineExplorer: </p>
<hr />
<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">ToolAPI - это API, позваляющий&nbsp;регистрировать инструменты и добываемые ими блоки. <br />
== Добавление инструмента ==<br />
<br />
Для регистрации инструмента используется метод ToolAPI.registerTool(id, toolMaterial, blockMaterials, params)<br/> ''toolMaterial ''- название материала инструмента&nbsp;или объект его описания<br/> ''blockMaterials ''- массив с типами блоков, которые может добыть инструмент<br/> ''params ''- дополнительные параметры и функции инструмента<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerTool(ItemID.myPickaxe, "wood", ["stone"], {<br />
damage: 1 // базовый урон инструмента<br />
}<br />
</syntaxhighlight><br />
<br />
Для регистрации нового материала инструментов используется метод&nbsp;ToolAPI.addToolMaterial(toolMaterial, params)<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addToolMaterial("dirt", {<br />
durability: 15, // Прочность (сколько блоков можно сломать)<br />
level: 1, // Уровень инструмента - определяет, какие блоки инструмент может добыть.<br />
efficiency: 10, // Эффективность - модификатор скорости ломания блока<br />
damage: 1, // Урон от материала (складывается с базовым уроном)<br />
enchantability: 14 // Зачаровываемость, чем выше, тем более хорошие чары будут при зачаровании<br />
});</syntaxhighlight><br />
<br />
== Регистрация блоков ==<br />
<br />
Для регистрации блока используется метод&nbsp;ToolAPI.registerBlockMaterial(BlockID, blockMaterial, level);<br/> ''blockMaterial ''- материал блока.<br/> ''level ''- уровень добычи<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerBlockMaterial(BlockID.myBlock, "stone", 1);<br />
</syntaxhighlight><br />
<br />
Уровни добычи блоков из майнкрафта:<br/> 1 - камень<br/> 2 - железная руда<br/> 3 - алмазная руда<br/> 4 - обсидиан<br />
<br />
По умолчанию доступны следующие материалы:<br/> "stone" - каменный,<br/> "wood" - деревянный,<br/> "dirt" - земляной,<br/> "plant" - растения,<br/> "fibre" - паутина,<br/> "unbreaking" - неломаемый<br />
<br />
Для регистрации материала блока используется метод&nbsp;ToolAPI.addBlockMaterial(blockMaterial, breakingMultiplier);<br/> ''blockMaterial ''- название материала.<br/> ''breakingMultiplier ''- модификатор времени ломания блока при добыче без подходящего инструмента.<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addBlockMaterial("test", 3);</syntaxhighlight><br />
</div> </div> </div> </div> </div> </div> </div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/ToolAPI&diff=2560InnerCore/ToolAPI2020-12-27T14:53:28Z<p>MineExplorer: Новая страница: «<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="…»</p>
<hr />
<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">ToolAPI - это API, позваляющий&nbsp;регистрировать инструменты и добываемые ими блоки. <br />
=== Добавление инструмента ===<br />
<br />
Для регистрации инструмента используется метод ToolAPI.registerTool(id, toolMaterial, blockMaterials, params)<br/> ''toolMaterial ''- название материала инструмента&nbsp;или объект его описания<br/> ''blockMaterials ''- массив с типами блоков, которые может добыть инструмент<br/> ''params ''- дополнительные параметры и функции инструмента<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerTool(ItemID.myPickaxe, "wood", ["stone"], {<br />
damage: 1 // базовый урон инструмента<br />
}<br />
</syntaxhighlight><br />
<br />
Для регистрации нового материала инструментов используется метод&nbsp;ToolAPI.addToolMaterial(toolMaterial, params)<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addToolMaterial("dirt", {<br />
durability: 15, // Прочность (сколько блоков можно сломать)<br />
level: 1, // Уровень инструмента - определяет, какие блоки инструмент может добыть.<br />
efficiency: 10, // Эффективность - модификатор скорости ломания блока<br />
damage: 1, // Урон от материала (складывается с базовым уроном)<br />
enchantability: 14 // Зачаровываемость, чем выше, тем более хорошие чары будут при зачаровании<br />
});</syntaxhighlight><br />
<br />
=== Регистрация блоков ===<br />
<br />
Для регистрации блока используется метод&nbsp;ToolAPI.registerBlockMaterial(BlockID, blockMaterial, level);<br/> ''blockMaterial ''- материал блока.<br/> ''level ''- уровень добычи<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerBlockMaterial(BlockID.myBlock, "stone", 1);<br />
</syntaxhighlight><br />
<br />
Уровни добычи блоков из майнкрафта:<br/> 1 - камень<br/> 2 - железная руда<br/> 3 - алмазная руда<br/> 4 - обсидиан<br />
<br />
По умолчанию доступны следующие материалы:<br/> "stone" - каменный,<br/> "wood" - деревянный,<br/> "dirt" - земляной,<br/> "plant" - растения,<br/> "fibre" - паутина,<br/> "unbreaking" - неломаемый<br />
<br />
Для регистрации материала блока используется метод&nbsp;ToolAPI.addBlockMaterial(blockMaterial, breakingMultiplier);<br/> ''blockMaterial ''- название материала.<br/> ''breakingMultiplier ''- модификатор времени ломания блока при добыче без подходящего инструмента.<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addBlockMaterial("test", 3);</syntaxhighlight><br />
</div> </div> </div> </div> </div> </div> </div> </div></div>MineExplorerhttps://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/ToolLib&diff=2559InnerCore/Libs/ToolLib2020-12-27T14:27:01Z<p>MineExplorer: </p>
<hr />
<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"><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"><br />
ToolAPI - API позваляющий&nbsp;регистрировать инструменты.<br/> ToolLib -&nbsp;Библиотека, предоставляющая универсальные типы инструментов и содержащая несколько вспомогательных методов для работы с инструментами и блоками.<br />
<br />
== Загрузка ==<br />
<br />
{| border="1" cellpadding="1" cellspacing="1" style="width: 579px;"<br />
|-<br />
| style="width: 68px; text-align: center;" | '''Версия'''<br />
| style="width: 81px; text-align: center;" | '''Скачать'''<br />
| style="width: 305px; text-align: center;" | '''Изменения'''<br />
| style="width: 100px; text-align: center;" | '''Дата выхода'''<br />
|-<br />
| style="width: 68px; text-align: center;" | '''23'''<br />
| style="width: 81px; text-align: center;" | [https://github.com/MineExplorer/IC_Libraries/releases/tag/toollib-v23 Скачать]<br />
| style="width: 305px;" | - Поддержка мультиплеера<br />
| style="width: 100px; text-align: center;" | 27.12.20<br />
|-<br />
| style="width: 68px; text-align: center;" | '''22'''<br />
| style="width: 81px; text-align: center;" | -<br />
| style="width: 305px;" | - Топоры могут делать обтёсанную древесину<br/> -&nbsp;Исправления ошибок<br />
| style="width: 100px; text-align: center;" | 24.08.20<br />
|-<br />
| style="width: 68px; text-align: center;" | '''21'''<br />
| style="width: 81px; text-align: center;" | -<br />
| style="width: 305px;" | - Добавлен enum&nbsp;MiningLevel<br />
| style="width: 100px; text-align: center;" | 11.07.20<br />
|}<br />
<div class="mw-parser-output"><br />
== <br/> Документация ==<br />
<br />
=== Подключение ===<br />
<br />
Чтобы подключить библиотеку, необходимо расположить файл библиотеки в папку lib в корне мода&nbsp;написать следующее в начале вашего кода:<br />
<syntaxhighlight lang="JavaScript">IMPORT("ToolLib");</syntaxhighlight><br />
<br />
После этого вам станет доступен весь функционал библиотеки.<br />
<br />
<div class="mw-parser-output"><br />
=== Добавление инструмента ===<br />
<br />
Для регистрации инструмента используется метод ToolLib.setTool(ItemID, toolMaterial, toolType)<br />
<syntaxhighlight lang="JavaScript">ToolLib.setTool(ItemID.myTool, "wood", ToolType.axe);<br />
</syntaxhighlight><br />
<br />
Так же вместо названия материала может напрямую быть передан объект с его свойствами.<br />
<br />
Для регистрации нового материала инструментов используется метод&nbsp;ToolAPI.addToolMaterial(toolMaterial, params)<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addToolMaterial("dirt", {<br />
durability: 15, // Прочность (Сколько блоков можно сломать)<br />
level: 1, // Уровень инструмента - определяет, какие блоки инструмент может добыть.<br />
efficiency: 10, // Эффективность - модификатор скорости ломания блока<br />
damage: 1, // Увеличение базового урона инструмента данным материалом<br />
enchantability: 14 // Зачаровываемость, чем выше, тем более хорошие чары будут при зачаровании<br />
});<br />
</syntaxhighlight><br />
<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;</div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div><br />
<br />
<div class="mw-parser-output"><div class="mw-parser-output"><br />
=== Регистрация блоков ===<br />
<br />
Для регистрации блока используется метод&nbsp;ToolAPI.registerBlockMaterial(BlockID, blockMaterial, level);<br/> ''blockMaterial ''- материал блока.<br/> ''level ''- уровень добычи<br />
<br />
Уровни добычи блоков можно задавать числами или используя константы из списка MiningLevel, добавляемого библиотекой:<br />
<br />
MiningLevel.STONE&nbsp;=&nbsp;1 - камень<br/> MiningLevel.IRON&nbsp;=&nbsp;2 - железная руда<br/> MiningLevel.DIAMOND&nbsp;=&nbsp;3 - алмазная руда<br/> MiningLevel.OBSIDIAN&nbsp;=&nbsp;4 - обсидиан<br />
<br />
Пример:<br />
<syntaxhighlight lang="JavaScript">ToolAPI.registerBlockMaterial(BlockID.myBlock, "stone", 1);<br />
ToolAPI.registerBlockMaterial(BlockID.myBlock2, "stone", MiningLevel.STONE);<br />
</syntaxhighlight><br />
<br />
По умолчанию доступны следующие материалы:<br/> "stone" - каменные блоки,<br/> "wood" - деревянные,<br/> "dirt" - земляные,<br/> "plant" - растения,<br/> "fibre" - паутина,<br/> "unbreaking" - неломаемые<br />
<br />
Для регистрации материала блока используется метод&nbsp;ToolAPI.addBlockMaterial(blockMaterial, breakingMultiplier);<br/> ''blockMaterial ''- название материала.<br/> ''breakingMultiplier ''- модификатор времени ломания блока при добыче без подходящего инструмента.<br />
<br />
Пример:<br />
<syntaxhighlight lang="JavaScript">ToolAPI.addBlockMaterial("test", 3);</syntaxhighlight><br />
</div> </div><br />
<br />
=== Типы инструментов ===<br />
<br />
Cтандартные типы:<br />
<br />
ToolType.sword - меч<br/> ToolType.shovel - лопата<br/> ToolType.pickaxe - кирка<br/> ToolType.axe - топор<br/> ToolType.hoe - мотыга<br />
<br />
Создание своего типа инструментов<br />
<syntaxhighlight lang="JavaScript">ToolType.myType = {<br />
enchantType: Native.EnchantType.pickaxe, //Тип чар для инструмента<br />
damage: 2, // Базовый урон инструмента<br />
blockTypes: ["dirt", "stone", "test"], // Материалы блоков, которые может ломать инструмент<br />
onAttack: function(item) {<br />
if (item.data > Item.getMaxDamage(item.id)) {<br />
item.id = item.data = item.count = 0;<br />
}<br />
}<br />
} </syntaxhighlight><br />
</div> </div> </div> </div> <br />
=== Все методы ===<br />
<br />
// Скоро будут добавлены<br />
</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> </div> </div> </div> </div></div>MineExplorer