Mineuniverse
Mods
OC XNet Driver

OC XNet Driver

MOD
Allows OpenComputers to utilize XNet networks to transfer items, fluids and energy to connected blocks.
by davenonymous
Download Claim this project
14,644,364 downloads
0 likes
Updated Oct 14, 2026
0 hypes
Addons Energy, Fluid, and Item Transport
Advertisement Remove ads with Premium →

ocxnetdriver

OpenComputers + XNet = :heart:

Allows OpenComputers to utilize XNet networks to transfer items, fluids and energy to connected blocks.

Known Issues

  • This is currently unrestricted, i.e. you can transfer humongous amounts in no time.

Available Methods

Method Description
getConnectedBlocks() Returns a table with all blocks connected to the XNet network
getSupportedCapabilities(pos[, side]) List all capabilities the given block supports
getItems(pos[, side]) Returns a table with all items in the given inventory
getFluids(pos[, side]) List all fluids in the given tank
getEnergy(pos[, side]) Get capacity and stored energy of the given energy handler
transferItem(sourcePos, sourceSlot, amount, targetPos[, sourceSide[, targetSide]]) Transfer items between two inventories
transferFluid(sourcePos, amount, targetPos[, fluidName][, sourceSide[, targetSide]]) Transfer fluids between two tanks
transferEnergy(sourcePos, amount, targetPos[, sourceSide[, targetSide]]) Transfer energy between two energy handlers
store(sourcePos, sourceSlot, database, entry[, sourceSide]) Store an itemstack from somewhere in the XNet network in a database upgrade

Synopsis

local component = require('component')
local sides = require('sides')
local serialization = require('serialization');

local xnet = component.xnet

-- Dump all found blocks and track all vanilla types in a table
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
-- {name="thermalexpansion:cell",pos={z=0,y=-1,x=0},side="west",meta=0}
-- {name="opencomputers:case3",pos={z=0,y=-1,x=1},side="north",meta=1}
-- {name="thermalexpansion:tank",pos={z=0,y=0,x=-2},side="down",meta=0,connector="Dynamo"}
-- {name="minecraft:chest",pos={z=1,y=-1,x=-2},side="north",meta=3,connector="Dynamo"}
-- {name="thermalexpansion:dynamo",pos={z=0,y=-1,x=-3},side="east",meta=2,connector="Dynamo"}
-- {name="thermalexpansion:tank",pos={z=0,y=1,x=-1},side="down",meta=0}
-- {name="thermalexpansion:tank",pos={z=0,y=0,x=-2},side="east",meta=0}
-- {name="xnet:controller",pos={z=0,y=0,x=0},side="west",meta=3}

-- Dump the contents of the first chest:
print(serialization.serialize(xnet.getItems(chests[1].pos)))
-- {
--    {maxSize=64,size=64,hasTag=false,maxDamage=0,damage=0,name="minecraft:stone",label="Stone"},
--    {maxSize=64,size=64,hasTag=false,maxDamage=0,damage=0,name="minecraft:hay_block",label="Hay Bale"},
--    [27]={maxSize=64,size=1,hasTag=false,maxDamage=0,damage=0,name="xnet:controller",label="Controller"},
--    n=27
-- }

-- Dump the contents of the first tank
print(serialization.serialize(xnet.getFluids(tanks[1].pos)))
-- {
--    {content={label="Essence of Knowledge",amount=4000,hasTag=false,name="experience"},capacity=20000},
--    n=1
-- }

-- Dump the contents of the first cell
print(serialization.serialize(xnet.getEnergy(cells[1].pos)))
-- {canExtract=true,stored=4000,capacity=2000000,canReceive=true}

-- Transfer 5 of whatever is in slot 1 of chest 1 into chest 2
print("Transferred: " .. tostring(xnet.transferItem(chests[1].pos, 1, 5, chests[2].pos)))

Simple energy transfer example

local component = require('component')
local sides = require('sides')
local serialization = require('serialization')

local xnet = component.xnet

print(serialization.serialize(xnet.getConnectedBlocks()))
-- {
--    {pos={y=-1,x=0,z=0},name="thermalexpansion:cell",side="west",meta=0},
--    {pos={y=-1,x=1,z=0},name="opencomputers:case3",side="north",meta=1},
--    {pos={y=-1,x=-3,z=0},name="thermalexpansion:dynamo",side="east",meta=2,connector="Dynamo"},
--    {pos={y=0,x=0,z=0},name="xnet:controller",side="west",meta=3},
--    n=4
-- }

-- Find a dynamo and a cell and store their position etc
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

-- Abort if no source could be found
if(energySource == nil) then
    print("No dynamo found. Aborting!")
    os.exit(1)
end

-- Abort if no target could be found
if(energyTarget == nil) then
    print("No cell found. Aborting!")
    os.exit(2)
end

-- Transfer 1000RF from source to target using the sides next to the XNet Connector
local transferred, error = xnet.transferEnergy(energySource.pos, 1000, energyTarget.pos, sides[energySource.side], sides[energyTarget.side])
if(transferred ~= nil) then
    print(" - Transferred " .. transferred .. "RF to " .. serialization.serialize(energyTarget.pos))
    -- - Transferred 1000RF to {y=-1,x=0,z=0}
else
    print("Error: " .. error)
end
ocxnetdriver-1.0.3-b17.jar
MC 1.12.1, 1.12, 1.12.2
Release 2018-11-02 Get
ocxnetdriver-1.0.2-b11.jar
MC 1.12.1, 1.12, 1.12.2
Beta 2018-03-11 Get
ocxnetdriver-1.0.1-b8.jar
MC 1.12.1, 1.12, 1.12.2
Beta 2018-02-13 Get
ocxnetdriver-1.0.0-b5.jar
MC 1.12.1, 1.12, 1.12.2
Beta 2018-01-14 Get

More from davenonymous

Advertisement Remove ads with Premium →

You Might Also Like