OC XNet Driver
Этот мод объединяет два популярных расширения для Minecraft - OpenComputers и XNet, предоставляя программируемый контроль над сетями передачи ресурсов. С его помощью компьютерные системы могут взаимодействовать с подключенными устройствами через сеть XNet.
Основные возможности
Мод позволяет автоматизировать передачу предметов, жидких ресурсов и энергии между различными блоками, подключенными к XNet сети. Доступен полный программный контроль над всеми операциями передачи.
Доступные методы управления
- getConnectedBlocks() - возвращает список всех блоков, подключенных к XNet сети
- getSupportedCapabilities(pos[, сторона]) - показывает все поддерживаемые возможности указанного блока
- getItems(pos[, сторона]) - отображает содержимое любого инвентаря
- getFluids(pos[, сторона]) - показывает содержимое резервуаров с жидкостями
- getEnergy(pos[, сторона]) - отображает текущий заряд и емкость устройств хранения энергии
- transferItem(исходная_позиция, исходный_слот, объем, целевая_позиция[, исходная_сторона[, целевая_сторона]]) - перемещает предметы между инвентарями
- transferFluid(исходная_позиция, объем, целевая_позиция[, название_жидкости][, исходная_сторона[, целевая_сторона]]) - перемещает жидкости между резервуарами
- transferEnergy(исходная_позиция, объем, целевая_позиция[, исходная_сторона[, целевая_сторона]]) - перемещает энергию между устройствами
- store(исходная_позиция, исходный_слот, база_данных, запись[, исходная_сторона]) - сохраняет предметы из сети в базу данных
Пример использования
local component = require('component')
local sides = require('sides')
local serialization = require('serialization');
local xnet = component.xnet
-- Поиск и классификация всех подключенных блоков
local chests = {}
local tanks = {}
local cells = {}
for i,block in ipairs(xnet.getConnectedBlocks()) do
print(serialization.serialize(block))
if(block.name == "minecraft:chest") then
chests[#chests+1] = block
elseif(block.name == "thermalexpansion:tank") then
tanks[#tanks+1] = block
elseif(block.name == "thermalexpansion:cell") then
cells[#cells+1] = block
end
end
-- Отображение содержимого сундука
print(serialization.serialize(xnet.getItems(chests[1].pos)))
-- Перемещение предметов между сундуками
print("Перемещено: " .. tostring(xnet.transferItem(chests[1].pos, 1, 5, chests[2].pos)))
Передача энергии: наглядный пример
local component = require('component')
local sides = require('sides')
local serialization = require('serialization')
local xnet = component.xnet
-- Поиск источника и приемника энергии
local energySource = nil
local energyTarget = nil
for i,block in ipairs(xnet.getConnectedBlocks()) do
if(block.name == "thermalexpansion:dynamo") then
energySource = block
elseif(block.name == "thermalexpansion:cell") then
energyTarget = block
end
end
-- Передача 1000RF энергии
if energySource and energyTarget then
local transferred, error = xnet.transferEnergy(energySource.pos, 1000, energyTarget.pos, sides[energySource.side], sides[energyTarget.side])
if(transferred ~= nil) then
print(" - Передано " .. transferred .. "RF " .. serialization.serialize(energyTarget.pos))
else
print("Ошибка: " .. error)
end
end
Известные ограничения
В текущей версии отсутствуют ограничения на объемы передачи - вы можете перемещать огромные количества ресурсов практически мгновенно.
Мод полностью совместим с ключевыми модификациями вроде Thermal Expansion и другими устройствами, поддерживающими стандартные способы взаимодействия.