View difference between Paste ID: DYw3Ebdv and vEDUm9n7
SHOW: | | - or go back to the newest paste.
1
term.clear()
2
local laser = peripheral.find("warpdriveLaser")
3
local mininglasers = {}
4
local sides = peripheral.getNames()
5
6
local function saveZeroLayersCount(count)
7
  local file = fs.open("zero_layers.txt", "w")
8
  file.write(tostring(count))
9
  file.close()
10
end
11
12
local function getZeroLayersCount()
13
  if fs.exists("zero_layers.txt") then
14
    local file = fs.open("zero_layers.txt", "r")
15
    local count = tonumber(file.readAll())
16
    file.close()
17
    return count
18
  end
19
  return 0
20
end
21
22
for _, side in pairs(sides) do
23
  if peripheral.getType(side) == "warpdriveMiningLaser" then
24
    table.insert(mininglasers, peripheral.wrap(side))
25
  end
26
end
27
28
laser.beamFrequency(1420)
29
30
if not laser then
31
  print("No warpdriveLaser detected")
32
  os.exit()
33
end
34
35
if #mininglasers == 0 then
36
  print("No warpdriveMiningLaser detected")
37
  os.exit()
38
end
39
40
print("Press the 'M' key to emit a laser scan and start the mining lasers with calculated layer offset.")
41
42
-- Loop to wait for key events
43
while true do
44
  local event, key = os.pullEvent("key")
45
46
  if key == 50 then
47
    local _, laserY, _ = laser.getLocalPosition()
48
    local targetY = 0
49
50
    repeat
51
      laser.emitBeam(0, -1, 0)
52
      os.sleep(1)
53
      _, _, targetY = laser.getScanResult()
54
    until targetY ~= 0
55
56
    local mineTarget = laserY - targetY - 1
57
    print("Target is: " .. mineTarget .. " blocks below")
58
59
    for _, mininglaser in pairs(mininglasers) do
60
      mininglaser.offset(mineTarget)
61
      mininglaser.enable(true)
62
    end
63
64
    local consecutiveZeroLayers = getZeroLayersCount()
65
66
    -- Periodically check the mining state
67
    while true do
68
      os.sleep(1)
69
      local state, isActive, energy, currentLayer, mined, total = mininglasers[1].state()
70-
      print(textutils.serialize(state)) -- Debug line to print the entire state object
70+
71
      -- You'll need to modify the below lines once you understand the structure of 'state'
72
73
      if total == 0 then
74
        consecutiveZeroLayers = consecutiveZeroLayers + 1
75
      else
76
        consecutiveZeroLayers = 0
77
      end
78
79
      saveZeroLayersCount(consecutiveZeroLayers)
80
81
      if consecutiveZeroLayers >= 3 then
82
        print("3 consecutive layers with 0 total blocks detected. Stopping mining.")
83
        print("")
84
        print("Press the 'M' key to emit a laser scan and start the mining lasers with calculated layer offset.")
85
        for _, mininglaser in pairs(mininglasers) do
86
          mininglaser.enable(false)
87
        end
88
        fs.delete("zero_layers.txt")
89
        break
90
      end
91
    end
92
  end
93
end