You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求CC: Tweaked适配ThermalDynamics导管的存储网络物品转移Lua代码

基于OpenComputers + ThermalDynamics的物品转移Lua实现

前置准备

  • 用OpenComputers线缆将计算机分别连接到ThermalDynamics物品管道网络(或网络内任意箱子)和目标存放箱(deposit chest)
  • 执行component.list("inventory")命令,确认所有存储箱和存放箱都被识别,记录存放箱的组件地址(如果只有一个存放箱可跳过手动记录)

核心代码实现

-- 导入组件API
local component = require("component")

-- 配置项:替换为你的存放箱组件地址(可通过component.list("inventory")获取)
local DEPOSIT_CHEST_ADDR = "你的存放箱地址"

-- 核心转移函数
-- 参数:itemName(物品注册名,如"minecraft:diamond"),targetQuantity(需要转移的数量)
local function transferItemsFromNetwork(itemName, targetQuantity)
    local transferred = 0
    local depositChest = component.proxy(DEPOSIT_CHEST_ADDR)

    -- 遍历所有已连接的存储容器
    for addr, _ in component.list("inventory") do
        -- 跳过存放箱本身,避免重复操作
        if addr ~= DEPOSIT_CHEST_ADDR then
            local inv = component.proxy(addr)
            -- 遍历容器内所有槽位
            for slot = 1, inv.size() do
                if transferred >= targetQuantity then
                    break -- 已凑够数量,终止循环
                end
                local stack = inv.getStackInSlot(slot)
                if stack and stack.name == itemName then
                    -- 计算本次可转移的数量:取槽位剩余数量和目标剩余数量的较小值
                    local transferAmount = math.min(stack.size, targetQuantity - transferred)
                    -- 执行转移:从当前槽位转移到存放箱的第一个可用槽位
                    local moved = inv.transferItem(slot, depositChest.address, transferAmount)
                    transferred = transferred + moved
                end
            end
        end
        if transferred >= targetQuantity then
            break
        end
    end

    -- 输出结果
    print(string.format("已转移 %d/%d 个 %s", transferred, targetQuantity, itemName))
    if transferred < targetQuantity then
        print("警告:存储网络内剩余物品不足")
    end
end

-- 示例调用:转移64个钻石到存放箱
-- transferItemsFromNetwork("minecraft:diamond", 64)

针对你之前函数失败的常见原因排查

  • 参数无效:ThermalDynamics的Itemduct本身不是inventory组件,计算机需要连接到网络内的存储箱子或**物品接口(Item Interface)**才能访问存储网络,你之前传入的duct参数无法被识别为可操作的容器
  • 物品名错误:必须使用物品的注册名(如thermalfoundation:ingot而非"钢锭"),可通过inv.getStackInSlot(slot)查看已存在物品的name字段确认
  • 逻辑漏洞:未处理空槽位(stack == nil)的情况,导致代码报错终止;或transferItem参数顺序错误(正确顺序是源槽位, 目标容器地址, 转移数量)
  • 权限限制:部分服务器/整合包会限制OpenComputers的容器访问权限,需确认计算机拥有对应权限

扩展优化建议

  • 可以给函数添加参数,允许指定存放箱的目标槽位
  • 加入物品元数据(damage值)判断,支持区分不同耐久/类型的物品(比如不同附魔的工具)
  • 实现批量转移的进度提示,适合大量物品转移场景

内容的提问来源于stack exchange,提问作者Tremb1e

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:10:26