ocxnetdriver
OpenComputers + XNet = :heart:
Позволяет OpenComputers использовать сети XNet для передачи предметов, жидкостей и энергии между подключенными блоками.
Известные проблемы
- В текущей реализации отсутствуют ограничения, что позволяет передавать огромные объёмы данных мгновенно.
Доступные методы
Метод | Описание |
---|---|
getConnectedBlocks() | Возвращает таблицу со всеми блоками, подключёнными к сети XNet |
getSupportedCapabilities(pos[, side]) | Перечисляет все поддерживаемые возможности указанного блока |
getItems(pos[, side]) | Возвращает таблицу со всеми предметами в указанном инвентаре |
getFluids(pos[, side]) | Перечисляет все жидкости в указанном резервуаре |
getEnergy(pos[, side]) | Возвращает ёмкость и запас энергии указанного энергохранилища |
transferItem(sourcePos, sourceSlot, amount, targetPos[, sourceSide[, targetSide]]) | Перемещает предметы между двумя инвентарями |
transferFluid(sourcePos, amount, targetPos[, fluidName][, sourceSide[, targetSide]]) | Перемещает жидкости между двумя резервуарами |
transferEnergy(sourcePos, amount, targetPos[, sourceSide[, targetSide]]) | Передаёт энергию между двумя хранилищами |
store(sourcePos, sourceSlot, database, entry[, sourceSide]) | Сохраняет предмет из сети XNet в апгрейд базы данных |
Пример использования
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(serialization.serialize(xnet.getFluids(tanks[1].pos)))
-- Вывести содержимое первого энергохранилища
print(serialization.serialize(xnet.getEnergy(cells[1].pos)))
-- Переместить 5 предметов из слота 1 сундука 1 в сундук 2
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
-- Найти Dynamo и энергохранилище, сохранить их позиции
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
-- Прервать при отсутствии источника
if(energySource == nil) then
print("Dynamo не найден. Прерывание!")
os.exit(1)
end
-- Прервать при отсутствии приёмника
if(energyTarget == nil) then
print("Хранилище не найдено. Прерывание!")
os.exit(2)
end
-- Передать 1000 RF от источника к приёмнику через разъёмы XNet
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