Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Текущая версия | Ваш текст | ||
Строка 2: | Строка 2: | ||
== Загрузка == | == Загрузка == | ||
− | Последняя версия (v9) - [https://github.com/MineExplorer/IC_Libraries/releases/tag/energy-net-v9 скачать]<br/> Файлы:<br/> energy-net.js - сама библиотека<br/> energy-net.d.ts - заголовочный файл (API) | + | Последняя версия (v9) - [https://github.com/MineExplorer/IC_Libraries/releases/tag/energy-net-v9 скачать]<br/> Файлы:<br/> energy-net.js - сама библиотека<br/> energy-net.d.ts - заголовочный файл (API) |
== Импорт == | == Импорт == | ||
− | Для добавления библиотеки в мод ее файл ''(energy-net.js)'' нужно добавить в папку ''lib/'' в директории мода (если таковой нету, то ее нужно создать).Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку: | + | Для добавления библиотеки в мод ее файл ''(energy-net.js)'' нужно добавить в папку ''lib/'' в директории мода (если таковой нету, то ее нужно создать).Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку: |
<syntaxhighlight lang="JavaScript">IMPORT("EnergyNet"); | <syntaxhighlight lang="JavaScript">IMPORT("EnergyNet"); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 14: | Строка 14: | ||
#''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии | #''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии | ||
#''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity | #''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity | ||
− | #''EnergyGridBuilder'' - модуль построения энергосетей | + | #''EnergyGridBuilder'' - модуль построения энергосетей и взаимодействия с ними |
− | #''EnergyNet'' - модуль | + | #''EnergyNet ''- модуль для хранения и получения энергосетей |
− | #''EnergyNode'' - базовый класс энергоузла | + | #''EnergyNode ''- базовый класс энергоузла |
− | #''EnergyGrid'' - класс узла блока-проводника | + | #''EnergyGrid ''- класс узла блока-проводника |
== Механика передачи энергии == | == Механика передачи энергии == | ||
− | Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого строится граф (энергосеть), в которым механизмы и блоки-проводники являются узлами. Энергия передаётся пакетами от блока-источника по всем узлам, с которыми он соединён. Каждый пакет имеет определённое количество энергии и напряжение (количество энергии, которое в нём было изначально). | + | Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого строится граф (энергосеть), в которым механизмы и блоки-проводники являются узлами. Энергия передаётся пакетами от блока-источника по всем узлам, с которыми он соединён. Каждый пакет имеет определённое количество энергии и напряжение (количество энергии, которое в нём было изначально). |
В целях оптимизации провода одного типа, соединенные друг с другом, объединяются в один энергоузел, в то время как каждый блок-механизм имеет свой энергоузел. | В целях оптимизации провода одного типа, соединенные друг с другом, объединяются в один энергоузел, в то время как каждый блок-механизм имеет свой энергоузел. | ||
Строка 38: | Строка 38: | ||
*<''energyType''>''.name'' - имя данного типа энергии. | *<''energyType''>''.name'' - имя данного типа энергии. | ||
*<''energyType''>''.registerWire(id, value, energyGridClass?)'' – регистрирует провод с данным id. Параметры: | *<''energyType''>''.registerWire(id, value, energyGridClass?)'' – регистрирует провод с данным id. Параметры: | ||
− | **''value'' - лимит на размер пакета энергии (напряжение), который блок может проводить. При превышении максимального напряжения размер пакета уменьшается до лимита провода и вызывается функция onOverload в классе провода. | + | **''value ''- лимит на размер пакета энергии (напряжение), который блок может проводить. При превышении максимального напряжения размер пакета уменьшается до лимита провода и вызывается функция onOverload в классе провода. |
− | **''energyGridClass'' - опционально, позволяет задать свой класс провода, который должен быть наследован от класса ''EnergyGrid''. | + | **''energyGridClass'' - опционально, позволяет задать свой класс провода, который должен быть наследован от класса ''EnergyGrid''. |
'''Пример:''' | '''Пример:''' | ||
− | <syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку ( | + | <syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку (она должна находиться в lib/) importLib("energylib.js", "*"); |
// создаем тип энергии redstone flux | // создаем тип энергии redstone flux | ||
Строка 52: | Строка 52: | ||
== Привязка типов энергии к TileEntity == | == Привязка типов энергии к TileEntity == | ||
− | ''EnergyTileRegistry.addEnergyTypeForId( | + | ''EnergyTileRegistry.addEnergyTypeForId(tileEntityId, energyType)'' - добавляет tile entity с данным id дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.<br/> <u>Параметры:</u> |
− | *'' | + | *''tileEntityId'' – id блока, на который был зарегистрирован нужный tile entity. |
*''energyType'' - тип энергии, который требуется к нему привязать. | *''energyType'' - тип энергии, который требуется к нему привязать. | ||
Новые события: | Новые события: | ||
− | *''energyTick: function(type, | + | *''energyTick: function(type, src) { /* … */ }'' - вызывается каждый тик после функции tick для каждой энергосети, привязанной к данному tile entity.<br/> Параметры: |
**''type'' - название типа энергии, для которого вызвано это событие. | **''type'' - название типа энергии, для которого вызвано это событие. | ||
− | ** | + | **src - объект типа [[InnerCore/Libs/EnergyNet#Объект_EnergySource|EnergySource]] для добавления энергии |
*''energyReceive: function(type, amount, voltage) { /* … */ }'' – вызывается при приёме пакета энергии данным tile entity. Должна возвращать количество энергии, которое удалось добавить.<br/> Параметры: | *''energyReceive: function(type, amount, voltage) { /* … */ }'' – вызывается при приёме пакета энергии данным tile entity. Должна возвращать количество энергии, которое удалось добавить.<br/> Параметры: | ||
**''type'' - название типа энергии | **''type'' - название типа энергии | ||
**''amount'' – количество энергии | **''amount'' – количество энергии | ||
**''voltage'' – напряжение энергии | **''voltage'' – напряжение энергии | ||
− | *'' | + | *''isEnergySource: function(type) {return true;}'' – определяет, может ли tile entity вырабатывать энергию данного типа. Если да, то для него строится энергосеть. |
− | *'' | + | *''canReceiveEnergy: function(side, type) {return true/false;}'' – определяет, может ли tile entity получать энергию данного типа и с каких сторон. Вызывается при попытке соединения tile entity к энергосети. |
− | *'' | + | *''canExtractEnergy: function(side, type) {return true/false;}'' – определяет, с каких сторон tile entity может выдавать энергию. |
− | == Объект | + | == Объект EnergySource == |
− | Данный объект | + | Данный объект является интерфейсом для добавления энергии в сеть, который передается в события для работы с энергией (src).<br/> <u>Методы:</u> |
− | *''add(amount, voltage)'' - добавляет в сеть данное кол-во энергии ''(amount)'', возвращает, какое кол-во энергии добавить не удалось из-за переполнения (0, если вся энергия добавлена). Если значение ''voltage'' (напряжение) не указано, то оно будет равно ''amount''. | + | *''src.add(amount, voltage)'' - добавляет в сеть данное кол-во энергии ''(amount)'', возвращает, какое кол-во энергии добавить не удалось из-за переполнения (0, если вся энергия добавлена). Если значение ''voltage'' (напряжение) не указано, то оно будет равно ''amount''. |
− | *'' | + | *''src.addAll(amount, voltage)'' - аналогичен методу ''add'', но ничего не возвращает и работает быстрее, потому что добавляет энергию в буфер сети, позволяя объединять в один пакет множество пакетов, созданных генераторами. |
− | |||
− | |||
− | |||
− | |||
− | |||
== Работа с энергетическими сетями == | == Работа с энергетическими сетями == | ||
− | '' | + | Большая часть методов из модуля EnergyNetBuilder технические и используются только внутри библиотеки. Однако некоторые из них могут быть полезны и в модах: |
+ | |||
+ | ''EnergyNetBuilder.rebuildTileNet(объект tile entity)'' – удаляет все энергосети механизма и перестраивает все его соединения с другими сетями. Необходимо вызвать при изменении сторон, через которые tile entity может получать или передавать энергию. | ||
+ | |||
+ | ''EnergyNetBuilder.getNetOnCoords(x, y, z)'' – возвращает сеть, если на данных координатах есть её провод. Используется в IndustrialCraft для нанесения урона от оголённых проводов и для мультиметра. ''EnergyNetBuilder.getNetByBlock(x, y, z, wireId)'' – возвращает сеть, если блок на данных координатах имеет ид, указанное в параметре wireId. | ||
== Примеры == | == Примеры == | ||
=== Генератор === | === Генератор === | ||
− | |||
| | ||
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет вырабатывать энергию. | <syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет вырабатывать энергию. | ||
Строка 105: | Строка 103: | ||
=== Потребитель === | === Потребитель === | ||
− | |||
| | ||
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFconsumer", который будет потреблять энергию для производства алмазов. | <syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFconsumer", который будет потреблять энергию для производства алмазов. | ||
Строка 133: | Строка 130: | ||
=== Хранилище === | === Хранилище === | ||
− | Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе | + | Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе энергия между двумя связанных друг с другом механизмами могут бесконечно обмениваться энергией друг с другом, игнорируя другие tile enity. |
<syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху. | <syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху. | ||
TileEntity.registerPrototype(BlockID.RFstorage, { | TileEntity.registerPrototype(BlockID.RFstorage, { |