介绍
介绍由机器翻译自 CurseForge 原页面,仅供参考。
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
-- 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)))
简单的能量传输示例
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
评论
登录后评论和评分