本篇教程由作者设定未经允许禁止转载。

本教程采用OC 进行相关自动化

GTNH版本:2.6.1

自动化过程包括一下五个部分

  1. 仪式激活,物品投掷(由OC机器人完成)

  2. 采矿激活与岩石清理(由OC电脑,GT采矿机,BC填充机(清空模式))

  3. 采矿中阻止OC机器人进行坠星(OC电脑发出采矿占用信号,传输给OC机器人)

  4. 坠星后进行采矿激活(OC机器人发出采矿激活信号,传输给OC电脑)

  5. 岩石清理激活(OC机器人发出清理激活信号,传输给金质与门,激活BC填充机)

OC电脑代码网址:Trasd-s-OC-ocde-in-GTNH/ at oc · Trasdapers/Trasd-s-OC-ocde-in-GTNH (github.com)

OC机器人代码网址:Trasd-s-OC-ocde-in-GTNH/robot.lua at oc · Trasdapers/Trasd-s-OC-ocde-in-GTNH (github.com)

考虑到部分玩家可能无法打开网址,随后会在教程尾进行代码上传。


机器人部分

机器人必要组件(物品栏升级,物品栏交互升级,红石卡,T1显卡,T1显示屏,内存,CPU,硬盘等)

相关方块:

  1. 无线传输的红石(用于传输采矿激活,矿机占用 红石信号)

  2. 机器人充电器

机器人放置于主仪式石上一格,手拿觉醒仪式激活石,

仪式抛掷物品塞入机器人物品栏,也可管道导入。

相关配置

见robot.lua,主要进行面(side)相关配置


OC电脑部分

电脑必要组件(红石卡/红石组件,T1显卡,T1显示屏,内存,CPU,硬盘等)

相关方块: 

  1. 无线传输的红石(用于传输采矿激活,矿机占用以及岩石清理 红石信号)

  2. 电池箱(能源储备,可有可无,有供应即可)

  3. 适配器(用MFU绑定采矿机或采矿场或直接接触采矿机/采矿场主控制方块面)(注意MFU距离有限)

  4. BC建筑机(负责采矿后进行岩石清理)

  5. 金质管道(承载金质与门--红石信号激活 循环 红石信号无 关闭 )

相关配置

见star.lua,主要进行面(side)相关配置,其次需要关注岩石清理时间(clearn_time)。

其他部分

坠点控制(坠点应高于仪式点30格,硬度应为-1程度,可用神秘核心:守护右键方块/放置守卫者方块 达到该效果)

BC采矿场(总范围应包含坠点为中心 向外扩张25格的正方体范围,可拆分为8个采矿机范围进行,也可降低数量,但主要更改岩石清理时间)

采矿机部分(放置在正方体区域上方,不涉及坠点所在3*3区域即可,数量任意,采矿范围能涵盖整个陨石即可,但必须全部用适配器接触或用适配器+MFU连接)

注:需要在采矿机下方50-63格内放置卡位方块(硬度-1),及时将采矿管道卡住,不然会一直往下伸,或是因为采矿管道不够多而暂停运作,目前建议控制在下方50-63格,采石机范围之外的位置,这样采矿场里只用放一组采矿管道,不用外加。


代码初览

坠星标位仪式自动化-第1张图片坠星标位仪式自动化-第2张图片

相关方块位置和配置参考

坠星标位仪式自动化-第3张图片

坠星标位仪式自动化-第4张图片

坠星标位仪式自动化-第5张图片

坠星标位仪式自动化-第6张图片坠星标位仪式自动化-第7张图片坠星标位仪式自动化-第8张图片


此处是OC机器人代码:

--[[
坠星自动化--OC机器人脚本部分
GTNH版本:2.6.1(注:旧版本不兼容,该版本采矿机会自动回收,旧版本需要加上采矿后的完成关闭函数)
由Trasd编写---2024.8.10
注:需保证lp和电力供应充足,一般采矿时间远大于lp补充所需时间,故本机器人脚本仅设置一个仪式是否正常启动检测以防万一。
]]--
local component = require("component")
local os=require("os")
local sides = require("sides")
robot=require("robot")
--[[
--绝对方向--
东(E):sides.east    南(S):sides.south
西(W):sides.west    北(N):sides.north
上:sides.up         下:sides.down
--相对方向(不推荐使用)--
前:sides.front      后:sides.back
左:sides.left       右:sides.right
上:sides.up         下:sides.down
注:相对方向是相对于机器人的。正对机器时,前后左右与其相反。
机器人箱子图标面为背面。
]]--
--配置部分--
local redstone_occupy_side=sides.front   -- 该面判断采矿场是否被占用(被占用为激活状态)--
local redstone_active_side=sides.back  -- 该面输出oc电脑所需的采矿场激活信号--
local wait_time1=120  --采矿场占用等待时间(不宜过短)--
local active_time=60  --采矿场激活信号持续时间(不宜过短)--
local find_time=60  --机器人寻找物品间隔(不宜过短)--
local ritual_time=60 --仪式激活失败后,再次激活间隔--
local throw_time=60 --仪式激活成功后,抛掷等待时间(为补齐激活仪式所消耗lp,防止极限lp任务导致坠星失败)--
local fall_time=20  --陨石降落等待时间--
local main_time=60 --主程序循环时间--
--配置部分--

local location_item=1 --坠星任务物品所在插槽索引--

function Is_occupy(redstone_occupy_side,wait_time1) --判断采矿场是否被占用--
  while component.redstone.getInput(redstone_occupy_side) == 15 do
     print("采矿机被占用中...(occuping...)")
     os.sleep(wait_time1)  --等待--
  end
  os.sleep(1)
end

function Find_item(location_item,find_time)  --寻找坠星任务物品所在插槽索引--
  while(robot.count(location_item)==0) do
    if(location_item==16) then  --插槽索引超限保护--
      print("目前无坠星任务")
      os.sleep(find_time)
      location_item=0
    end
    location_item=location_item+1
  end
  print("发现坠星任务物品,插槽数为:",location_item)
  os.sleep(1)
  robot.select(location_item)
end

function Active_ritual(ritual_time,throw_time)  --激活仪式--
  while(robot.useDown(0)==false) do  --激活仪式并侦测是否激活成功--
    print("仪式激活失败,请检查仪式结构完整性和lp存量是否足够")
    os.sleep(ritual_time)
  end
    print("仪式激活成功")
  os.sleep(throw_time)
end

function Throw_item(redstone_active_side,fall_time,active_time)  --坠星任务物品投掷,并释放采矿场激活信号--
  robot.dropDown(1)
  print("抛物已完成")
  os.sleep(fall_time)
  component.redstone.setOutput(redstone_active_side,15)  --释放采矿场激活信号--
  os.sleep(active_time)
  component.redstone.setOutput(redstone_active_side,0)  --关闭采矿场激活信号--
end

function main(main_time)  --主程序--
  while true do
    Is_occupy(redstone_occupy_side,wait_time1)
    Find_item(location_item,find_time)
    Active_ritual(ritual_time,throw_time)
    Throw_item(redstone_active_side,location_item,fall_time,active_time)
    os.sleep(main_time)
  end
end

main(main_time) --程序在此运行--

此处是OC电脑代码

--[[
坠星自动化--OC电脑脚本部分
GTNH版本:2.6.1(注:旧版本不兼容,该版本采矿机会自动回收,旧版本需要加上采矿后的完成关闭函数)
由Trasd编写---2024.8.10
注:需保证lp和电力供应充足,本脚本仅内置机器活动状态检测(可供检测电力和钻井液问题)
]]--
local component = require("component")
local os=require("os")
local sides = require("sides")
local gt_machine={}  --存储采矿机地址--
--[[
--绝对方向--
东(E):sides.east    南(S):sides.south
西(W):sides.west    北(N):sides.north
上:sides.up         下:sides.down
--相对方向--
前:sides.front      后:sides.back
左:sides.left       右:sides.right
上:sides.up         下:sides.down
注:相对方向是相对于红石组件的。正对机器时,前后左右与其相反。
]]--
--配置部分--
local redstone_active_side=sides.front  --(相对方向)采矿激活面在红石组件的方向(红石组件("红石I/O端口"/"基础红石卡"))--
local redstone_occupy_side=sides.back --(相对方向)采矿反馈面。采矿完成,采矿机空闲后将会持续激活--
local redstone_claern_side=sides.left  --(相对方向)岩石清理激活面--
local wait_time1=10 --采矿机激活信号侦测间隔(影响消息刷屏速度)--
local wait_time2=120 --采矿机完成情况侦测间隔(影响消息刷屏速度)--
local clearn_time =1200  --采石机清理时长(不宜过短)--
--配置部分--

function Get_address(gt_machine)--获取采矿机地址--
  local n = 1
  for i,j in pairs(component.list()) do
     if(j=="gt_machine")then
        print("发现机器(find host):",i,j)
        gt_machine[n]=i
        n=n+1
     end
   end
end

function Wait_redstone(redstone_active_side,wait_time1)--等待采矿机激活信号--
  while component.redstone.getInput(redstone_active_side) == 0 do
     print("采矿机等待激活中...(wait...)")
     os.sleep(wait_time1)  --等待--
  end
end

function Active_gt(gt_machine,redstone_occupy_side) --激活采矿机--
  component.redstone.setOutput(redstone_occupy_side,15)  --开启采矿机占用信号--
  for i,j in pairs(gt_machine) do
    local gt=component.proxy(j)
    gt.setWorkAllowed(true)
    print("激活机器(active host):",i,j)
  end
end

function State_gt(gt_machine)--机器活动状况检测--
  local state=0
  while(state==0) do
    os.sleep(5)
    state = 1
    for i,j in pairs(gt_machine) do
      local gt=component.proxy(j)
      if(gt.isWorkAllowed()==false) then
        state=0
        print("机器运行出现故障,请手动维护")
      end
      os.sleep(10)  --等待--
    end
  end
  print("机器运行正常")
end
function Wait_finish(gt_machine,wait_time2,redstone_occupy_side)--采矿任务完成情况侦测--
  local task=0
  while(task==0) do
    print("采矿任务完成中")
    task = 1
    for i,j in pairs(gt_machine) do
      local gt=component.proxy(j)
      if(gt.isWorkAllowed()==true) then
        task=0;
      end
    end
    os.sleep(wait_time2)  --等待--
  end
  print("采矿任务已完成")  
end

function Clearn(redstone_claern_side,clearn_time,redstone_occupy_side)  --岩石清理--
  component.redstone.setOutput(redstone_claern_side,15)  --激活采石机信号--
  print("开始岩石清理")
  os.sleep(clearn_time)
  component.redstone.setOutput(redstone_claern_side,0)  --关闭采石机信号--
  os.sleep(3)
  component.redstone.setOutput(redstone_occupy_side,0)  --关闭采矿机占用信号--
  print("清理完成")
end

function main()
  Get_address(gt_machine)
  while true do
    Wait_redstone(redstone_active_side,wait_time1)   --等待激活--
    Active_gt(gt_machine,redstone_occupy_side) --激活采矿机--
    State_gt(gt_machine)--机器活动状况检测--
    os.sleep(60)
    Wait_finish(gt_machine,wait_time2,redstone_occupy_side)  --采矿任务完成情况侦测--
    Clearn(redstone_claern_side,clearn_time,redstone_occupy_side)  --岩石清理--
  end
end

main()  --程序在此运行