Данная библиотека для Core Engine представляет собой инструмент для быстрого создания новых типов энергии и работы с ними.
Для добавления библиотеки в мод ее файл (energylib.js) нужно добавить в директорию lib/ в директории мода (если таковой нету, то ее нужно создать).
Для импорта библиотеки в мод в заголовочном файле (или если он остутвует в первом файле кода) следует добавить строку importLib("energylib.js", "*") .
EnergyTypeRegistry.assureEnergyType("name", value) - создает новый тип энергии и возвращает его, если такой тип энергии уже существует, новый создан не будет, а вернется уже существующий, таким образом если 2 мода создают один тип энергии, он будет общий.
Параметры:
•value - сколько Eu (единиц энергии industrial craft) содержится в 1 единице данного типа энергии, данное значение используется для конвертации из одного вида энергии в другой. Энергия Eu принята за эталон.
Возвращает функция тип с данным именем (созданный или импортированый), который обладает следующими методами и значениями:
Пример:
// в начале мода импортируем библиотеку (она должна находиться в lib/)
importLib("energylib.js", "*");
// создаем тип энергии redstone flux var energyRedstoneFlux = EnergyTypeRegistry.assureEnergyType("RF", 0.25);
// создаем блок-проводник для данного типа энергии
IDRegistry.genBlockID("RFconduct");
Block.createBlock("RFconduct", [
{name: "RF Conduct", texture: [["rf_conduct", 0]], inCreative: true} // текстура images/terrain-atlas/rf_conduct_0.png должна находиться в ресурсах мода ], energyRestroneFlux.getWireSpecialType());
Для того, чтобы привязать тип энергии к tile entity используется метод
EnergyTileRegistry.addEnergyTypeForId(tileEntityId, energyType) - добавляет tile entity с данным id дополнительные события, которые позволяют ему работать с данным типом энергии. К одному tile entity можно привязать несколько разных типов энергии.
Параметры:
Новыесобытия:
energyTick: function(type, src) { /* … */ } - вызывается каждый тик для каждого типа энергии, привязанного к данному tile entity. Параметры:
energyReceive: function(type, src) { /* … */ } - аналогична energyTick, но вызывается только если в сети есть энергия.
isGenerator: function() {return true;} - данный метод нужно только если tile entity в основном генерирует энергию, а не забирает ее (является генератором), нужна для более точного расчёта.
Несколько tile entity поддерживающих одинаковый тип энергии и соединенные нужным проводником объединяются в энергетическую сеть. Tile entity имеют возможность забирать энергию из сети и передавать ее туда, при этом вся переданная энергия распределяется равномерно по потребителям.
Данный объект является интерфейсом для работы с энергией в сети, который передается в события для работы с энергией (src).
Методы:
•src.storage(receive, retreive) - данный метод является функцией хранилищ энергии. Как параметры принимает то, сколько энергии он максимально может принять (reveive) и сколько максимально может отдать (retreive) за данный тик. Возвращает изменение энергии (отрицательное, если энергия была отдана, положительное, если принята).
Пример 1 - генератор:
// требуется создать блок с id "RFgenerator"
TileEntity.registerPrototype(BlockID.RFgenerator, {
isGenerator: function() {
return true;
},
energyTick: function(type, src) {
src.add(10); // генерирует 10 RF за тик
}
});
// привяжем к этому tile entity наш тип энергии
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFgenerator, energyRedstoneFlux);
Пример 2 - потребитель:
// требуется создать блок с id "RFconsumer"
TileEntity.registerPrototype(BlockID.RFconsumer, {
energyTick: function(type, src) {
var energy = Math.floor(src.get(10)); // получить от 0 до 10 энергии, Math.floor используется в данном случае для устранения ошибки вычислений, в большинстве случаев это не нужно
for (var i = 0; i < energy; i++) { // чем больше энергии, тем больше частиц
Particles.addParticle(this.x + Math.random(), this.y + 1, this.z +
Math.random(), 6, 0, .07, 0); // создать частицу над блоком
}
}
});
// привяжем к этому tile entity наш тип энергии
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFconsumer, energyRedstoneFlux);
При соединении 2х этих блоков проводом, созданным ранее один из них будет испускать частицы, если потребителей будет несколько, а генератор один, то частиц на каждом по отдельности будет меньше, а суммарно столько же.
Пример 3 - хранилище:
// требуется создать блок с id "RFstorage"
TileEntity.registerPrototype(BlockID.RFstorage, {
defaultValues: {
energy: 0 // сохраняемое значение, обозначающее запасенную энергию
},
energyTick: function(type, src) {
this.data.energy += src.storage(Math.min(20, 1000 - this.data.energy), Math.min(20, this.data.energy)); // вызовем функцию хранилища: передаем не более 20 энергии в тик, при этом отдаем так, чтобы энергии не стало меньше 0, а принимаем так, чтобы не было больше 1000
}
});
// привяжем к этому tile entity наш тип энергии
EnergyTileRegistry.addEnergyTypeForId(BlockID.RFstorage, energyRedstoneFlux);
Для проверки хранилища, можно сначала подзаряжать его от генератора, а потом отключать генератор и подключать потребитель, который будет работать от него ограниченное время.