Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
− | Данная библиотека для Inner Core представляет собой инструмент для быстрого создания новых типов энергии и имеет большой функционал для работы с ними. | + | <div class="mw-parser-output"><div class="mw-parser-output"> |
− | + | Данная библиотека для Inner Core представляет собой инструмент для быстрого создания новых типов энергии и имеет большой функционал для работы с ними. | |
− | |||
− | |||
== Импорт == | == Импорт == | ||
+ | <div class="mw-parser-output">Для добавления библиотеки в мод ее файл ''(energy-net.js)'' нужно добавить в директорию ''lib/'' в директории мода (если таковой нету, то ее нужно создать).</div> <div class="mw-parser-output">Для импорта библиотеки в мод в заголовочном файле (или если он остутвует в первом файле кода) следует добавить строку:</div> <div class="mw-parser-output"><syntaxhighlight lang="JavaScript">IMPORT("EnergyNet");</syntaxhighlight> | ||
+ | <div class="mw-parser-output"> | ||
+ | == Модули == | ||
− | + | #''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии. | |
− | + | #''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity. | |
− | + | #''EnergyNetBuilder'' - модуль построения энергосетей и взаимодействия с ними. | |
− | + | </div> <div class="mw-parser-output"><div class="mw-parser-output"> | |
− | |||
− | |||
− | #''EnergyTypeRegistry'' - модуль для регистрации новых типов энергии | ||
− | #''EnergyTileRegistry'' - модуль для привязки типов энергии к TileEntity | ||
− | #'' | ||
− | |||
− | |||
− | |||
− | |||
− | = | ||
− | |||
− | |||
− | |||
− | |||
− | |||
== Создание нового типа энергии == | == Создание нового типа энергии == | ||
Строка 34: | Строка 20: | ||
*''value'' - сколько ''Eu'' (единиц энергии ''IndustrialCraft'') содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. ''Энергия Eu принята за эталон.'' | *''value'' - сколько ''Eu'' (единиц энергии ''IndustrialCraft'') содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. ''Энергия Eu принята за эталон.'' | ||
− | Возвращает функция тип с данным именем (созданный или | + | Возвращает функция тип с данным именем (созданный или импортированый), который обладает следующими методами и значениями: |
*<''energyType''>''.name'' - имя данного типа энергии. | *<''energyType''>''.name'' - имя данного типа энергии. | ||
− | *<''energyType''>''.registerWire(id, value | + | *<''energyType''>''.registerWire(id, value)'' – регистрирует провод с данным ид и устанавливает для него лимит по приёму энергии, записанный в параметре value. |
− | + | *<''energyType''>''.onNetOverload'' – функция, вызывающаяся при превышение лимита энергии в проводе. Для продвинутых разработчиков | |
− | * | ||
'''Пример:''' | '''Пример:''' | ||
− | <syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку ( | + | <syntaxhighlight lang="JavaScript">// в начале мода импортируем библиотеку (она должна находиться в lib/) importLib("energylib.js", "*"); |
// создаем тип энергии redstone flux | // создаем тип энергии redstone flux | ||
Строка 49: | Строка 34: | ||
energyRF.registerWire(BlockID.RFconduct, 2000); | energyRF.registerWire(BlockID.RFconduct, 2000); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | </div> </div> <div class="mw-parser-output"><div class="mw-parser-output"> | ||
+ | == Механика передачи энергии == | ||
+ | Энергия может передаваться как по проводам, так и напрямую от генератора к соседним механизмам. Для этого подобные механизмы объдиняются в энергосети. Энергосети - это программные объекты, которые передают энергию к подключенным к ним механизмам или другим энергосетям. Энергия передаётся пакетами с определённым количеством энергии и напряжением. | ||
+ | |||
+ | Энергосети формируются следующим образом:<br/> Для каждого блока генератора создаётся своя энергосеть, соединяющая его с подключенными к нему машинами-потребителями и энергосетями проводов. Энергосети проводов объединяют блоки с одним ид и соединяются с другими сетями того же типа энергии и машинами-потребителями энергии. Такая система позволяет разбивать провода по размеру пакета энергии, который они могут передать. Напряжение пакета энергии - это параметр, позволяющий объединять множество пакетов меньшего размера в один и передать его как будто бы с размером меньшего пакета. | ||
+ | </div> <div class="mw-parser-output"> | ||
+ | <div class="mw-parser-output"> | ||
== Привязка типов энергии к 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, sourceTile) { /* … */ }'' – вызывается при приёме пакета энергии данным tile entity. Должна возвращать количество энергии, которое удалось добавить.<br/> Параметры: |
**''type'' - название типа энергии | **''type'' - название типа энергии | ||
**''amount'' – количество энергии | **''amount'' – количество энергии | ||
**''voltage'' – напряжение энергии | **''voltage'' – напряжение энергии | ||
− | *'' | + | *''isEnergySource: function(type) {return true;}'' – определяет, может ли tile entity вырабатывать энергию данного типа. Если да, то для него строится энергосеть. |
− | *'' | + | *''canReceiveEnergy: function(type, side) {return true/false;}'' – определяет, может ли tile entity получать энергию даного типа и с каких сторон. Вызывается при попытке соединения tile entity к энергосети. |
− | *'' | + | *''canExtractEnergy: function(type, side) {return true/false;}'' – определяет, с каких сторон tile entity может выдавать энергию. |
+ | </div> | ||
− | == Объект | + | == Объект 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'', но ничего не возвращает и работает быстрее, потому что добавляет энергию в буфер сети, позволяя объединять в один пакет множество пакетов, созданных генераторами. |
− | + | </div> | |
− | |||
− | |||
− | |||
− | |||
− | == Работа с | + | <div class="mw-parser-output"> |
+ | == Работа с энгергитическими сетями == | ||
− | + | Большая часть методов модуля EnergyNetBuilder технические и используются только внутри библиотеки.Однако некоторые из них могут быть полезны и в модах: | |
+ | ''EnergyNetBuilder.rebuildTileNet(объект tile entity)'' – удаляет все энергосети механизма и перестраивает все его соединения с другими сетями. Необходимо вызвать при изменении сторон, через которые tile entity может получать или передавать энергию. | ||
+ | |||
+ | ''EnergyNetBuilder.getNetOnCoords(x, y, z)'' – возвращает сеть, если на данных координатах есть её провод. Используется в IndustrialCraft для нанесения урона от оголённых проводов и для мультиметра. | ||
+ | |||
+ | ''EnergyNetBuilder.getNetByBlock(x, y, z, wireId)'' – возвращает сеть, если блок на данных координатах имеет ид, указанное в параметре wireId. | ||
+ | </div> | ||
+ | |||
+ | <div class="mw-parser-output"> | ||
== Примеры == | == Примеры == | ||
=== Генератор === | === Генератор === | ||
− | + | <syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет выробатывать энергию. | |
− | |||
− | <syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFgenerator", который будет | ||
TileEntity.registerPrototype(BlockID.RFgenerator, { | TileEntity.registerPrototype(BlockID.RFgenerator, { | ||
+ | isEnergySource: function() { | ||
+ | return true; // может генерировать энергию | ||
+ | }, | ||
canReceiveEnergy: function(){ | canReceiveEnergy: function(){ | ||
return false; // не может получать энергию | return false; // не может получать энергию | ||
}, | }, | ||
energyTick: function(type, src) { | energyTick: function(type, src) { | ||
− | src. | + | src.addAll(10); // генерирует 10 RF за тик. Так как сразу отдаёт всю энергию, используется более быстрый метод. |
} | } | ||
}); | }); | ||
Строка 105: | Строка 104: | ||
=== Потребитель === | === Потребитель === | ||
− | |||
− | |||
<syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFconsumer", который будет потреблять энергию для производства алмазов. | <syntaxhighlight lang="JavaScript">// Cоздадим блок с id "RFconsumer", который будет потреблять энергию для производства алмазов. | ||
TileEntity.registerPrototype(BlockID.RFconsumer, { | TileEntity.registerPrototype(BlockID.RFconsumer, { | ||
defaultValues: { | defaultValues: { | ||
progress: 0 // сохраняемое значение прогресса работы | progress: 0 // сохраняемое значение прогресса работы | ||
− | |||
− | |||
− | |||
}, | }, | ||
energyReceive: function(type, amount, voltage) { | energyReceive: function(type, amount, voltage) { | ||
Строка 120: | Строка 114: | ||
}, | }, | ||
tick: function(){ | tick: function(){ | ||
− | if(this.data.progress > | + | if(this.data.progress > 10000){ |
this.data.progress = 0; | this.data.progress = 0; | ||
− | World.drop(this.x, this.y +1, this.z, 264 | + | World.drop(this.x, this.y +1, this.z, 264); // дропнуть алмаз на координатах tile entity. |
} | } | ||
} | } | ||
Строка 128: | Строка 122: | ||
// привяжем к этому tile entity наш тип энергии | // привяжем к этому tile entity наш тип энергии | ||
− | EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRF); | + | EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRF);</syntaxhighlight> |
− | </syntaxhighlight> | ||
=== Хранилище === | === Хранилище === | ||
− | Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе | + | Стороны приёма и отправки энергии для хранилища должны быть разделены. Иначе энергия между двумя связанных друг с другом механизмами могут бесконечно обмениваться энергией друг с другом, игнорируя другие tile enity. |
<syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху. | <syntaxhighlight lang="JavaScript">//Cоздадим блок с id "RFstorage" и настроим его так, чтобы он отдавал энергию снизу, а принимал сбоку или сверху. | ||
TileEntity.registerPrototype(BlockID.RFstorage, { | TileEntity.registerPrototype(BlockID.RFstorage, { | ||
Строка 139: | Строка 132: | ||
energy: 0 // сохраняемое значение, обозначающее запасенную энергию | energy: 0 // сохраняемое значение, обозначающее запасенную энергию | ||
}, | }, | ||
− | canReceiveEnergy: function(side | + | isEnergySource: function() { |
+ | return true; // блок может отдавать энергию | ||
+ | } | ||
+ | canReceiveEnergy: function(type, side) { | ||
return side != 0; // side != 0 выведет true, если сторона любая, кроме нижней. | return side != 0; // side != 0 выведет true, если сторона любая, кроме нижней. | ||
} , | } , | ||
− | canExtractEnergy: function(side | + | canExtractEnergy: function(type, side) { |
return side == 0; // выведет true при подключении блока для выхода энергии с нижней стороны. | return side == 0; // выведет true при подключении блока для выхода энергии с нижней стороны. | ||
}, | }, | ||
getCapacity: function(){ | getCapacity: function(){ | ||
− | return 2e6; // установим лимит хранилища энергии в 2 миллиона (2e6 - это способ записи числа | + | return 2e6; // установим лимит хранилища энергии в 2 миллиона (2e6 - это способ записи числа 2*106) |
}, | }, | ||
energyReceive: function(type, amount, voltage) { | energyReceive: function(type, amount, voltage) { | ||
− | amount = Math.min(amount, 1000); // | + | amount = Math.min(amount, 1000); // устанавлимаем максимальное количество энергии, которое может принять механизм равным 1000. |
var add = Math.min(amount, this.getCapacity() - this.data.energy); // уменьшаем количество энергии, так, чтобы хранилище не переполнялось; | var add = Math.min(amount, this.getCapacity() - this.data.energy); // уменьшаем количество энергии, так, чтобы хранилище не переполнялось; | ||
this.data.energy += add; // добавляем энергию в хранилище | this.data.energy += add; // добавляем энергию в хранилище | ||
Строка 161: | Строка 157: | ||
// привяжем к этому tile entity наш тип энергии | // привяжем к этому tile entity наш тип энергии | ||
− | EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRF);</syntaxhighlight> | + | EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRF); |
+ | </syntaxhighlight> | ||
+ | </div> |