<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://wiki.mineprogramming.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=93.81.0.243&amp;*</id>
		<title>mineprogramming wiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.mineprogramming.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=93.81.0.243&amp;*"/>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/93.81.0.243"/>
		<updated>2026-09-11T19:11:36Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/EnergyNet&amp;diff=2291</id>
		<title>InnerCore/Libs/EnergyNet</title>
		<link rel="alternate" type="text/html" href="https://wiki.mineprogramming.org/index.php?title=InnerCore/Libs/EnergyNet&amp;diff=2291"/>
				<updated>2019-11-23T18:12:33Z</updated>
		
		<summary type="html">&lt;p&gt;93.81.0.243: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&lt;br /&gt;
Данная библиотека для Inner Core представляет собой инструмент для быстрого создания новых типов энергии и имеет большой функционал для работы с ними.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&lt;br /&gt;
== Импорт ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;Для добавления библиотеки в мод ее файл ''([https://github.com/MineExplorer/IndustrialCraft_2/blob/master/IndustrialCraft²/lib/energy-net.js energy-net.js])'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;Для импорта библиотеки в мод в заголовочном файле (или если он остутвует в первом файле кода) следует добавить строку:&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;IMPORT(&amp;quot;EnergyNet&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Модули ==&lt;br /&gt;
&lt;br /&gt;
#''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии. &lt;br /&gt;
#''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity.&amp;amp;nbsp; &lt;br /&gt;
#''EnergyNetBuilder'' - модуль построения энергосетей и взаимодействия с ними. &lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&lt;br /&gt;
== Создание нового типа энергии ==&lt;br /&gt;
&lt;br /&gt;
''EnergyTypeRegistry.assureEnergyType(&amp;quot;name&amp;quot;, value)'' - создает новый тип энергии и возвращает его, если такой тип энергии уже существует, новый создан не будет, а вернется уже существующий, таким образом если 2 мода создают один тип энергии, он будет общий.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Параметры:&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*''name'' - уникальное название энергии, обычно используется сокращение (''&amp;quot;Eu&amp;quot; - energy units, &amp;quot;RF&amp;quot; - redstone flux'' и т.п.) &lt;br /&gt;
*''value'' - сколько ''Eu'' (единиц энергии ''IndustrialCraft'') содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. ''Энергия Eu принята за эталон.'' &lt;br /&gt;
&lt;br /&gt;
Возвращает функция тип с данным именем (созданный или импортированый), который обладает следующими методами и значениями:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;''energyType''&amp;gt;''.name'' - имя данного типа энергии. &lt;br /&gt;
*&amp;lt;''energyType''&amp;gt;''.registerWire(id, value)'' – регистрирует провод с данным ид и устанавливает для него лимит по приёму энергии, записанный в параметре value. &lt;br /&gt;
*&amp;lt;''energyType''&amp;gt;''.onNetOverload'' – функция, вызывающаяся при превышение лимита энергии в проводе. Для продвинутых разработчиков &lt;br /&gt;
&lt;br /&gt;
'''Пример:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;// в начале мода импортируем библиотеку (она должна находиться в lib/) importLib(&amp;quot;energylib.js&amp;quot;, &amp;quot;*&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// создаем тип энергии redstone flux&lt;br /&gt;
var energyRF = EnergyTypeRegistry.assureEnergyType(&amp;quot;RF&amp;quot;, 0.25);&lt;br /&gt;
// регистрируем блок-проводник для данного типа энергии&lt;br /&gt;
energyRF.registerWire(BlockID.RFconduct, 2000);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&lt;br /&gt;
== Механика передачи энергии ==&lt;br /&gt;
&lt;br /&gt;
Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого подобные механизмы объдиняются в энергосети. Энергосети - это программные объекты, которые передают энергию к подключенным к ним механизмам или другим энергосетям. Энергия передаётся пакетами с определённым количеством энергии и напряжением.&lt;br /&gt;
&lt;br /&gt;
Энергосети формируются следующим образом:&amp;lt;br/&amp;gt; Для каждого блока генератора создаётся своя энергосеть, соединяющая его с подключенными к нему машинами-потребителями и энергосетями проводов. Энергосети проводов объединяют блоки с одним ид и соединяются с другими сетями того же типа энергии и машинами-потребителями энергии. Такая система позволяет разбивать провода по размеру пакета энергии, который они могут передать. Напряжение пакета энергии - это параметр, позволяющий объединять множество пакетов меньшего размера в один и передать его как будто бы с размером меньшего пакета.&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&lt;br /&gt;
== Привязка типов энергии к TileEntity ==&lt;br /&gt;
&lt;br /&gt;
''EnergyTileRegistry.addEnergyTypeForId(tileEntityId, energyType)'' - добавляет tile entity с данным id дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.&amp;lt;br/&amp;gt; &amp;lt;u&amp;gt;Параметры:&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*''tileEntityId'' – id блока, на который был зарегистрирован нужный tile entity. &lt;br /&gt;
*''energyType'' - тип энергии, который требуется к нему привязать. &lt;br /&gt;
&lt;br /&gt;
Новые события:&lt;br /&gt;
&lt;br /&gt;
*''energyTick: function(type, src) { /* … */ }'' - вызывается каждый тик после функции tick для каждой энергосети, привязанной к данному tile entity.&amp;lt;br/&amp;gt; Параметры: &lt;br /&gt;
**''type'' - название типа энергии, для которого вызвано это событие. &lt;br /&gt;
**src - объект типа [[InnerCore/Libs/EnergyNet#Объект_EnergySource|EnergySource]] для добавления энергии   &lt;br /&gt;
*''energyReceive: function(type, amount, voltage) { /* … */ }'' – вызывается при приёме пакета энергии данным tile entity. Должна возвращать количество энергии, которое удалось добавить.&amp;lt;br/&amp;gt; Параметры: &lt;br /&gt;
**''type'' - название типа энергии &lt;br /&gt;
**''amount'' – количество энергии &lt;br /&gt;
**''voltage'' – напряжение энергии   &lt;br /&gt;
*''isEnergySource: function(type) {return true;}'' – определяет, может ли tile entity вырабатывать энергию данного типа. Если да, то для него строится энергосеть. &lt;br /&gt;
*''canReceiveEnergy: function(side, type) {return true/false;}'' – определяет, может ли tile entity получать энергию даного типа и с каких сторон. Вызывается при попытке соединения tile entity к энергосети. &lt;br /&gt;
*''canExtractEnergy: function(side, type) {return true/false;}'' – определяет, с каких сторон tile entity может выдавать энергию. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Объект EnergySource ==&lt;br /&gt;
&lt;br /&gt;
Данный объект является интерфейсом для добавления энергии в сеть, который передается в события для работы с энергией (src).&amp;lt;br/&amp;gt; &amp;lt;u&amp;gt;Методы:&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*''src.add(amount, voltage)'' - добавляет в сеть данное кол-во энергии ''(amount)'', возвращает, какое кол-во энергии добавить не удалось из-за переполнения (0, если вся энергия добавлена). Если значение ''voltage'' (напряжение) не указано, то оно будет равно ''amount''. &lt;br /&gt;
*''src.addAll(amount, voltage)'' - аналогичен методу ''add'', но ничего не возвращает и работает быстрее, потому что добавляет энергию в буфер сети, позволяя объединять в один пакет множество пакетов, созданных генераторами. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&lt;br /&gt;
== Работа с энгергитическими сетями ==&lt;br /&gt;
&lt;br /&gt;
Большая часть методов модуля EnergyNetBuilder технические и используются только внутри библиотеки.Однако некоторые из них могут быть полезны и в модах:&lt;br /&gt;
&lt;br /&gt;
''EnergyNetBuilder.rebuildTileNet(объект tile entity)'' – удаляет все энергосети механизма и перестраивает все его соединения с другими сетями. Необходимо вызвать при изменении сторон, через которые tile entity может получать или передавать энергию.&lt;br /&gt;
&lt;br /&gt;
''EnergyNetBuilder.getNetOnCoords(x, y, z)'' – возвращает сеть, если на данных координатах есть её провод. Используется в IndustrialCraft для нанесения урона от оголённых проводов и для мультиметра.&lt;br /&gt;
&lt;br /&gt;
''EnergyNetBuilder.getNetByBlock(x, y, z, wireId)'' – возвращает сеть, если блок на данных координатах имеет ид, указанное в параметре wireId. &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&lt;br /&gt;
=== Генератор ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;// Cоздадим блок с id &amp;quot;RFgenerator&amp;quot;, который будет выробатывать энергию.&lt;br /&gt;
TileEntity.registerPrototype(BlockID.RFgenerator, {&lt;br /&gt;
    isEnergySource: function() {&lt;br /&gt;
        return true; // может генерировать энергию&lt;br /&gt;
    },&lt;br /&gt;
    canReceiveEnergy: function(){&lt;br /&gt;
        return false; // не может получать энергию&lt;br /&gt;
    },&lt;br /&gt;
    energyTick: function(type, src) {&lt;br /&gt;
        src.addAll(10); // генерирует 10 RF за тик. Так как сразу отдаёт всю энергию, используется более быстрый метод.&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// привяжем к этому tile entity наш тип энергии&lt;br /&gt;
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFgenerator, energyRF);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&lt;br /&gt;
=== Потребитель ===&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;// Cоздадим блок с id &amp;quot;RFconsumer&amp;quot;, который будет потреблять энергию для производства алмазов.&lt;br /&gt;
TileEntity.registerPrototype(BlockID.RFconsumer, {&lt;br /&gt;
    defaultValues: {&lt;br /&gt;
        progress: 0 // сохраняемое значение прогресса работы&lt;br /&gt;
    },&lt;br /&gt;
    energyReceive: function(type, amount, voltage) {&lt;br /&gt;
        this.data.progress += amount; // увеличиваем прогресс производства алмаза.&lt;br /&gt;
        return amount; // и возвращаем сколько забрали энергии&lt;br /&gt;
    },&lt;br /&gt;
    tick: function(){&lt;br /&gt;
        if(this.data.progress &amp;gt;= 10000){&lt;br /&gt;
            this.data.progress = 0;&lt;br /&gt;
            World.drop(this.x, this.y +1, this.z, 264, 1); // дропнуть алмаз на координатах tile entity.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// привяжем к этому tile entity наш тип энергии&lt;br /&gt;
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRF);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-parser-output&amp;quot;&amp;gt;&lt;br /&gt;
=== Хранилище ===&lt;br /&gt;
&lt;br /&gt;
Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе энергия между двумя&amp;amp;nbsp;связанных друг с другом механизмами могут бесконечно обмениваться энергией друг с другом, игнорируя другие tile enity.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;//Cоздадим блок с id &amp;quot;RFstorage&amp;quot; и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху.&lt;br /&gt;
TileEntity.registerPrototype(BlockID.RFstorage, {&lt;br /&gt;
    defaultValues: {&lt;br /&gt;
        energy: 0 // сохраняемое значение, обозначающее запасенную энергию&lt;br /&gt;
    },&lt;br /&gt;
    isEnergySource: function() {&lt;br /&gt;
        return true; // блок может отдавать энергию&lt;br /&gt;
    }&lt;br /&gt;
    canReceiveEnergy: function(side, type) {&lt;br /&gt;
        return side != 0; // side != 0 выведет true, если сторона любая, кроме нижней.&lt;br /&gt;
    } ,&lt;br /&gt;
    canExtractEnergy: function(side, type) {&lt;br /&gt;
        return side == 0; // выведет true при подключении блока для выхода энергии с нижней стороны.&lt;br /&gt;
    },&lt;br /&gt;
    getCapacity: function(){&lt;br /&gt;
        return 2e6; // установим лимит хранилища энергии в 2 миллиона (2e6 - это способ записи числа 2000000)&lt;br /&gt;
    },&lt;br /&gt;
    energyReceive: function(type, amount, voltage) {&lt;br /&gt;
        amount = Math.min(amount, 1000); // устанавлимаем максимальное количество энергии, которое может принять механизм равным 1000.&lt;br /&gt;
        var add = Math.min(amount, this.getCapacity() - this.data.energy); // уменьшаем количество энергии, так, чтобы хранилище не переполнялось;&lt;br /&gt;
        this.data.energy += add; // добавляем энергию в хранилище&lt;br /&gt;
        return add; // и возвращаем сколько забрали энергии&lt;br /&gt;
    },&lt;br /&gt;
    energyTick: function(type, src){&lt;br /&gt;
        var output = Math.min(1000, this.data.energy); // определяем, сколько энергии блок может отдать&lt;br /&gt;
        this.data.energy += src.add(output) - output; // прибавляем к хранилищу количество энергии, которое осталось после отправки пакета, и вычитаем сколько отправляли.&lt;br /&gt;
    },&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// привяжем к этому tile entity наш тип энергии&lt;br /&gt;
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRF);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>93.81.0.243</name></author>	</entry>

	</feed>