Редактирование:EnergyNet

Внимание! Вы не авторизовались на сайте. Ваш 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&nbsp;- сама библиотека<br/> energy-net.d.ts&nbsp;- заголовочный файл (API)
  
 
== Импорт ==
 
== Импорт ==
  
Для добавления библиотеки в мод ее файл ''(energy-net.js)'' нужно добавить в папку ''lib/'' в директории мода (если таковой нету, то ее нужно создать).Для импорта библиотеки в мод в заголовочном файле (или если он отсутствует в первом файле кода) следует добавить строку:
+
Для добавления библиотеки в мод ее файл ''(energy-net.js)''&nbsp;нужно добавить в папку&nbsp;''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 ''- класс узла блока-проводника  
  
 
== Механика передачи энергии ==
 
== Механика передачи энергии ==
  
Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого строится граф (энергосеть), в которым механизмы и блоки-проводники являются узлами. Энергия передаётся пакетами от блока-источника по всем узлам, с которыми он соединён. Каждый пакет имеет определённое количество энергии и напряжение (количество энергии, которое в нём было изначально).
+
Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого строится граф (энергосеть), в которым механизмы и блоки-проводники являются узлами.&nbsp;Энергия передаётся пакетами от блока-источника по всем узлам, с которыми он соединён. Каждый пакет&nbsp;имеет определённое количество&nbsp;энергии и напряжение (количество энергии, которое в нём было изначально).
  
 
В целях оптимизации провода одного типа, соединенные друг с другом, объединяются в один энергоузел, в то время как каждый блок-механизм имеет свой энергоузел.
 
В целях оптимизации провода одного типа, соединенные друг с другом, объединяются в один энергоузел, в то время как каждый блок-механизм имеет свой энергоузел.
Строка 38: Строка 38:
 
*<''energyType''>''.name'' - имя данного типа энергии.  
 
*<''energyType''>''.name'' - имя данного типа энергии.  
 
*<''energyType''>''.registerWire(id, value, energyGridClass?)'' – регистрирует провод с данным id. Параметры:  
 
*<''energyType''>''.registerWire(id, value, energyGridClass?)'' – регистрирует провод с данным id. Параметры:  
**''value'' - лимит на размер пакета энергии (напряжение), который блок может проводить. При превышении максимального напряжения размер пакета уменьшается до лимита провода и вызывается функция onOverload в классе провода.  
+
**''value ''-&nbsp;лимит на размер пакета энергии (напряжение), который блок&nbsp;может проводить. При превышении максимального напряжения размер пакета уменьшается до лимита провода и вызывается функция onOverload в классе провода.  
**''energyGridClass'' - опционально, позволяет задать свой класс провода, который должен быть наследован от класса ''EnergyGrid''.   
+
**''energyGridClass''&nbsp;- опционально, позволяет задать свой класс провода, который должен быть наследован от класса&nbsp;''EnergyGrid''.   
  
 
'''Пример:'''
 
'''Пример:'''
<syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку (см. выше)
+
<syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку (она должна находиться в lib/) importLib("energylib.js", "*");
  
 
// создаем тип энергии redstone flux
 
// создаем тип энергии redstone flux
Строка 52: Строка 52:
 
== Привязка типов энергии к TileEntity ==
 
== Привязка типов энергии к TileEntity ==
  
''EnergyTileRegistry.addEnergyTypeForId(blockId, energyType)'' - добавляет в tile entity объект класса [[InnerCore/Libs/EnergyNet#Объект_EnergyNode|EnergyNode]], который может быть получен через ''this.energyNode'' в функциях tile entity, а так же дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.<br/> <u>Параметры:</u>
+
''EnergyTileRegistry.addEnergyTypeForId(tileEntityId, energyType)'' - добавляет tile entity с данным id дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.<br/> <u>Параметры:</u>
  
*''blockId'' – id блока, на который был зарегистрирован нужный tile entity.  
+
*''tileEntityId'' – id блока, на который был зарегистрирован нужный tile entity.  
 
*''energyType'' - тип энергии, который требуется к нему привязать.  
 
*''energyType'' - тип энергии, который требуется к нему привязать.  
  
 
Новые события:
 
Новые события:
  
*''energyTick: function(type, node) { /* … */ }'' - вызывается каждый тик для энергоузла tile entity.<br/> Параметры:  
+
*''energyTick: function(type, src) { /* … */ }'' - вызывается каждый тик после функции tick для каждой энергосети, привязанной к данному tile entity.<br/> Параметры:  
 
**''type'' - название типа энергии, для которого вызвано это событие.  
 
**''type'' - название типа энергии, для которого вызвано это событие.  
**''node'' - энергоузел механизма, позволяет добавлять энергию    
+
**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'' – напряжение энергии   
*''canReceiveEnergy: function(side, type) {return boolean;}'' – определяет, может ли tile entity получать энергию данного типа и с каких сторон. Вызывается при попытке соединения tile entity к энергосети. По умолчанию возвращает ''true''.  
+
*''isEnergySource: function(type) {return true;}'' – определяет, может ли tile entity вырабатывать энергию данного типа. Если да, то для него строится энергосеть.  
*''canExtractEnergy: function(side, type) {return boolean;}'' – определяет, с каких сторон tile entity может выдавать энергию. По умолчанию возвращает ''true''.  
+
*''canReceiveEnergy: function(side, type) {return true/false;}'' – определяет, может ли tile entity получать энергию данного типа и с каких сторон. Вызывается при попытке соединения tile entity к энергосети.  
*''isConductor': function(type) {return boolean;}'' – определяет, может ли tile entity проводить энергию данного типа. По умолчанию возвращает ''false''.  
+
*''canExtractEnergy: function(side, type) {return true/false;}'' – определяет, с каких сторон tile entity может выдавать энергию.  
  
== Объект EnergyNode ==
+
== Объект EnergySource ==
  
Данный объект представляет собой узел энергосети.<br/> <u>Основные методы:</u>
+
Данный объект является интерфейсом для добавления энергии в сеть, который передается в события для работы с энергией (src).<br/> <u>Методы:</u>
  
*''add(amount, voltage)'' - добавляет в сеть данное кол-во энергии ''(amount)'', возвращает, какое кол-во энергии добавить не удалось из-за переполнения (0, если вся энергия добавлена). Если значение ''voltage'' (напряжение) не указано, то оно будет равно ''amount''.  
+
*''src.add(amount, voltage)'' - добавляет в сеть данное кол-во энергии ''(amount)'', возвращает, какое кол-во энергии добавить не удалось из-за переполнения (0, если вся энергия добавлена). Если значение ''voltage'' (напряжение) не указано, то оно будет равно ''amount''.  
*''addCoords(x, y, z)'' - добавляет блок на координатах x, y, z в список блоков энергоузла (позволяет, например, сделать проводящим энергию блоки обшивки в многоблочном механизме)
+
*''src.addAll(amount, voltage)'' - аналогичен методу ''add'', но ничего не возвращает и работает быстрее, потому что добавляет энергию в буфер сети, позволяя объединять в один пакет множество пакетов, созданных генераторами.  
*''removeCoords(x, y, z)'' - удаляет блок из энергоузла
 
*''addConnection(node)'' - добавляет выходящее соединение с другим узлом
 
*''removeConnection(node) ''- удаляет соединение с узлом
 
*''resetConnections()'' - удаляет все соединения с другими узлами
 
*''destroy()'' - удаляет энергоузел.  
 
  
 
== Работа с энергетическими сетями ==
 
== Работа с энергетическими сетями ==
  
''EnergyNet.getNodeOnCoords(blockSource, x, y, z)'' – возвращает узел на данных координатах, если он существует. Используется в IndustrialCraft для нанесения урона от оголённых проводов и для мультиметра.
+
Большая часть методов из модуля EnergyNetBuilder технические и используются только внутри библиотеки. Однако некоторые из них могут быть полезны и в модах:
 +
 
 +
''EnergyNetBuilder.rebuildTileNet(объект tile entity)'' – удаляет все энергосети механизма и перестраивает все его соединения с другими сетями. Необходимо вызвать при изменении сторон, через которые tile entity может получать или передавать энергию.
 +
 
 +
''EnergyNetBuilder.getNetOnCoords(x, y, z)'' – возвращает сеть, если на данных координатах есть её провод. Используется в IndustrialCraft для нанесения урона от оголённых проводов и для мультиметра. ''EnergyNetBuilder.getNetByBlock(x, y, z, wireId)'' – возвращает сеть, если блок на данных координатах имеет ид, указанное в параметре wireId.
  
 
== Примеры ==
 
== Примеры ==
  
 
=== Генератор ===
 
=== Генератор ===
 
 
&nbsp;
 
&nbsp;
 
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет вырабатывать энергию.
 
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет вырабатывать энергию.
Строка 105: Строка 103:
  
 
=== Потребитель ===
 
=== Потребитель ===
 
 
&nbsp;
 
&nbsp;
 
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFconsumer", который будет потреблять энергию для производства алмазов.
 
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFconsumer", который будет потреблять энергию для производства алмазов.
Строка 133: Строка 130:
 
=== Хранилище ===
 
=== Хранилище ===
  
Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе два хранилища будут бесконечно обмениваться энергией друг с другом, уменьшая количество энергии, отдаваемое другим tile enity.
+
Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе энергия между двумя&nbsp;связанных друг с другом механизмами могут бесконечно обмениваться энергией друг с другом, игнорируя другие tile enity.
 
<syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху.
 
<syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху.
 
TileEntity.registerPrototype(BlockID.RFstorage, {
 
TileEntity.registerPrototype(BlockID.RFstorage, {

Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии GNU Free Documentation License 1.3 или более поздняя (см. Mineprogramming wiki:Авторские права). Если вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого.
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!