View difference between Paste ID: 13QunP89 and 8JvHwrmJ
SHOW: | | - or go back to the newest paste.
1
--INPUT = reference, slots, blocks, data
2
--OUTPUT = ObjectivesList
3
4
--[[function saveVarsToConsole(name)
5
    local h = fs.open(name,'w')
6
    local env = getfenv()
7
    for i,v in pairs(env) do
8
        if i then
9
            h.write(i)
10
            if v then
11
                --h.write("("..tostring(type(v))..")")
12
                h.write(': ')
13
                h.writeLine(v)
14
            end
15
        end
16
    end
17
    h.close()
18
end]]
19
20
--update
21
local h = fs.open("update","w")
22
h.write([[
23
fs.delete("schemAPI")
24
shell.run("pastebin get 13QunP89 schemAPI")
25
]])
26
h.close()
27
28
--restart
29
local k = fs.open("restart","w")
30
k.write([[
31
for i,v in pairs(fs.list("")) do
32
	if v~="rom" and v~="chicken" then
33
		fs.delete(v)
34
	end
35
end
36
]])
37
k.close()
38
39
function openRednet()
40
    for _,v in ipairs(peripheral.getNames()) do
41
            if peripheral.getType(v)=="modem" then
42
                    rednet.open(v)
43
            end
44
    end
45
end
46
 
47
function checkIfRefill()
48
    local _,inFront = turtle.inspect()
49
    local _,below = turtle.inspectDown()
50
    local mem = turtle.getSelectedSlot()
51
    turtle.select(16)
52
    local check = turtle.getItemDetail()
53
    if check and check.name ~= "EnderStorage:enderChest" then
54
        if not turtle.dropDown() then
55
            if not turtle.drop() then
56
                turtle.dropUp()
57
            end
58
        end  
59
    end
60
    if inFront or below then
61
        if inFront.name == "EnderStorage:enderChest" then
62
            turtle.select(enderchest1)
63
            turtle.dig()
64
        end
65
        if below.name == "EnderStorage:enderChest" then
66
            turtle.select(enderchest2)
67
            turtle.digDown()
68
        end
69
    end
70
    turtle.select(mem)
71
end
72
 
73
function calibrateDir()
74
    --if gpsi then
75
        local dir
76
        local h,k,l = gps.locate()
77
		h = math.floor(h)
78
		k = math.floor(k)
79
		l = math.floor(l)
80
        while not turtle.forward() do
81
            turtle.dig()
82
        end
83
        local h2,k2,l2 = gps.locate()
84
        turtle.back()
85
        if h2>h then
86
            dir = "east"
87
        elseif h2<h then
88
            dir = "west"
89
        elseif l2>l then
90
            dir = "south"
91
        elseif l2<l then
92
            dir = "north"
93
        end
94
        return dir
95
    --end
96
end
97
 
98
function recalibratePos()
99
    local h,k,l = gps.locate() 
100
    local xtemp,ytemp,ztemp  = h - Hoff, k - Koff, l - Loff
101
 
102
    if origDir == "south" then
103
        widthPos = 0 + xtemp   
104
        heightPos = ytemp
105
        lengthPos = 0 + ztemp
106
    elseif origDir == "north" then
107
        widthPos = 0 - xtemp
108
        heightPos = ytemp
109
        lengthPos = 0 - ztemp
110
    elseif origDir == "east" then
111
        widthPos = 0  - ztemp
112
        heightPos = ytemp
113
        lengthPos = 0  + xtemp
114
    elseif origDir == "west" then
115
        widthPos = 0 + ztemp
116
        heightPos = ytemp
117
        lengthPos = 0 - xtemp
118
    end
119
120
end
121
 
122
function recalibrateFace() 
123
    if origDir ~= "south" then
124
        if origDir == "north" then
125
            update("right")
126
            update("right")
127
        elseif origDir == "east" then
128
            update("right")
129
        elseif origDir == "west" then
130
            update("left")
131
        end
132
    end
133
end
134
 
135
function resynchronize()
136
	if gpsi then
137
    	recalibratePos()
138
    	face = calibrateDir()
139
    	recalibrateFace()
140
		recordPos(heightPos,widthPos,lengthPos,face)
141
	end
142
end
143
 
144
function saveVarsToFile()
145
    local h = fs.open("currentVars",'w')
146
    local env = getfenv()
147
    for i,v in pairs(env) do
148
        if type(v) == "string" then
149
            h.write(tostring(i))
150
            h.write(" = ")
151
            h.write([["]]..tostring(v)..[["]])
152
        elseif type(v) == "table" then
153
            h.write(i)
154
            h.write(" = ")
155
            h.write(textutils.serialize(v))
156
        end
157
    end
158
    h.close()
159
end
160
 
161
function loadVars()
162
    local h = fs.open("currentVars",'r')
163
end
164
 
165
function recordPos(heightPos,widthPos,lengthPos,face)
166
    local h = fs.open("position","w")
167
    h.writeLine("heightPos = "..tostring(heightPos))
168
    h.writeLine("widthPos = "..tostring(widthPos))
169
    h.writeLine("lengthPos = "..tostring(lengthPos))
170
    h.writeLine("face = ".."\""..tostring(face).."\"")
171
    h.close()
172
end
173
 
174
function recordObj(x,y,z)
175
    local h = fs.open("objective",'w')
176
    h.writeLine("x = "..tostring(x))
177
    h.writeLine("y = "..tostring(y))
178
    h.writeLine("z = "..tostring(z))
179
    h.close()
180
end
181
182
function recordObjNum(num)
183
	local h = fs.open("objective2",'w')
184
	h.writeLine("num = "..tostring(num))
185
	h.close()
186
end
187
 
188
block_id = {}
189
block_id[0] = "Air"
190
block_id[1] = "Stone"
191
block_id[2] = "Grass"
192
block_id[3] = "Dirt"
193
block_id[4] = "Cobblestone"
194
block_id[5] = "Wooden Plank"
195
block_id[6] = "Sapling"
196
block_id[7] = "Bedrock"
197
block_id[8] = "Water"
198
block_id[9] = "Stationary water"
199
block_id[10] = "Lava"
200
block_id[11] = "Stationary lava"
201
block_id[12] = "Sand"
202
block_id[13] = "Gravel"
203
block_id[14] = "Gold Ore"
204
block_id[15] = "Iron (Ore)"
205
block_id[16] = "Coal Ore"
206
block_id[17] = "Log"
207
block_id[18] = "Leaves"
208
block_id[19] = "Sponge"
209
block_id[20] = "Glass"
210
block_id[21] = "Lapis Lazuli (Ore)"
211
block_id[22] = "Lapis Lazuli (Block)"
212
block_id[23] = "Dispenser"
213
block_id[24] = "Sandstone"
214
block_id[25] = "Note Block Tile entity"
215
block_id[26] = "Bed"
216
block_id[27] = "Powered Rail "
217
block_id[28] = "Detector Rail "
218
block_id[29] = "Sticky Piston"
219
block_id[30] = "Cobweb"
220
block_id[31] = "Tall Grass"
221
block_id[32] = "Dead Bush"
222
block_id[33] = "Piston"
223
block_id[34] = "Piston Extension"
224
block_id[35] = "Wool"
225
block_id[36] = "Block moved by Piston"
226
block_id[37] = "Dandelionandelion"
227
block_id[38] = "Rose"
228
block_id[39] = "Brown Mushroom"
229
block_id[40] = "Red Mushroom"
230
block_id[41] = "Block of Gold"
231
block_id[42] = "Block of Iron"
232
block_id[43] = "Double Slabs"
233
block_id[44] = "Slabs"
234
block_id[45] = "Brick Block"
235
block_id[46] = "TNT"
236
block_id[47] = "Bookshelf"
237
block_id[48] = "Moss Stone"
238
block_id[49] = "Obsidian"
239
block_id[50] = "Torch"
240
block_id[51] = "Fire"
241
block_id[52] = "Monster Spawner"
242
block_id[53] = "Wooden Stairs"
243
block_id[54] = "Chest"
244
block_id[55] = "Redstone (Wire)"
245
block_id[56] = "Diamond (Ore)"
246
block_id[57] = "Block of Diamond"
247
block_id[58] = "Crafting Table"
248
block_id[59] = "Seeds"
249
block_id[60] = "Farland"
250
block_id[61] = "Furnace"
251
block_id[62] = "Burning Furnace"
252
block_id[63] = "Sign Post"
253
block_id[64] = "Wooden Door"
254
block_id[65] = "Ladders"
255
block_id[66] = "Rails"
256
block_id[67] = "Cobblestone Stairs"
257
block_id[68] = "Wall Sign"
258
block_id[69] = "Lever"
259
block_id[70] = "Stone Pressure Plate"
260
block_id[71] = "Iron Door"
261
block_id[72] = "Wooden Pressure Plates"
262
block_id[73] = "Redstone Ore"
263
block_id[74] = "Glowing Redstone Ore"
264
block_id[75] = "Redstone Torch"
265
block_id[76] = "Redstone Torch"
266
block_id[77] = "Stone Button "
267
block_id[78] = "Snow"
268
block_id[79] = "Ice"
269
block_id[80] = "Snow Block"
270
block_id[81] = "Cactus"
271
block_id[82] = "Clay (Block)"
272
block_id[83] = "Sugar Cane"
273
block_id[84] = "Jukebox"
274
block_id[85] = "Fence"
275
block_id[86] = "Pumpkin"
276
block_id[87] = "Netherrack"
277
block_id[88] = "Soul Sand"
278
block_id[89] = "Glowstone"
279
block_id[90] = "Portal"
280
block_id[91] = "Jack-O-Lantern"
281
block_id[92] = "Cake Block"
282
block_id[93] = "Redstone Repeater"
283
block_id[94] = "Redstone Repeater"
284
block_id[95] = "Locked Chest"
285
block_id[96] = "Trapdoors"
286
block_id[97] = "Hidden Silverfish"
287
block_id[98] = "Stone Brick"
288
block_id[99] = "Huge brown and red mushroom"
289
block_id[100] = "Huge brown and red mushroom"
290
block_id[101] = "Iron Bars"
291
block_id[102] = "Glass Pane"
292
block_id[103] = "Melon"
293
block_id[104] = "Pumpkin Stem"
294
block_id[105] = "Melon Stem"
295
block_id[106] = "Vines"
296
block_id[107] = "Fence Gate"
297
block_id[108] = "Brick Stairs"
298
block_id[109] = "Stone Brick Stairs"
299
block_id[110] = "Mycelium"
300
block_id[111] = "Lily Pad"
301
block_id[112] = "Nether Brick"
302
block_id[113] = "Nether Brick Fence"
303
block_id[114] = "Nether Brick Stairs"
304
block_id[115] = "Nether Wart"
305
block_id[116] = "Enchantment Table"
306
block_id[117] = "Brewing Stand"
307
block_id[118] = "Cauldron"
308
block_id[119] = "End Portal"
309
block_id[120] = "End Portal Frame"
310
block_id[121] = "End Stone "
311
block_id[256] = "Iron Ingotron Shovel"
312
block_id[257] = "Iron Pickaxe"
313
block_id[258] = "Iron Axe"
314
block_id[259] = "Flint and Steel"
315
block_id[260] = "Red Apple"
316
block_id[261] = "Bow"
317
block_id[262] = "Arrow"
318
block_id[263] = "Coal"
319
 
320
woolColors = {}
321
woolColors[0] = "White"
322
woolColors[1] = "Orange"
323
woolColors[2] = "Magenta"
324
woolColors[3] = "Light Blue"
325
woolColors[4] = "Yellow"
326
woolColors[5] = "Lime"
327
woolColors[6] = "Pink"
328
woolColors[7] = "Gray"
329
woolColors[8] = "Light Gray"
330
woolColors[9] = "Cyan"
331
woolColors[10] = "Purple"
332
woolColors[11] = "Blue"
333
woolColors[12] = "Brown"
334
woolColors[13] = "Green"
335
woolColors[14] = "Red"
336
woolColors[15] = "Black"
337
 
338
--[[Navigation Functions]]--
339
 
340
function goto(heightGoal,widthGoal,lengthGoal)
341
    shell.run("position")
342
    if turtle.getFuelLevel() < 200 then
343
        refill()
344
    end
345
    if heightGoal > heightPos then
346
        while heightGoal > heightPos do
347
            up()
348
        end
349
    elseif heightGoal < heightPos then
350
        while heightGoal < heightPos do
351
            down()
352
        end
353
    end
354
    if widthGoal > widthPos then
355
        turn("east")
356
        while widthGoal > widthPos do
357
            forward()
358
        end
359
    elseif widthGoal < widthPos then
360
        turn("west")
361
        while widthGoal < widthPos do
362
            forward()
363
        end
364
    end
365
    if lengthGoal > lengthPos then
366
        turn("south")
367
        while lengthGoal > lengthPos do
368
            forward()
369
        end
370
    elseif lengthGoal < lengthPos then
371
        turn("north")
372
        while lengthGoal < lengthPos do
373
            forward()
374
        end
375
    end
376
end
377
 
378
function update(dir)
379
        if dir == "forward" then
380
            if face == "north" then
381
                lengthPos = lengthPos - 1
382
            elseif face == "south" then
383
                lengthPos = lengthPos + 1
384
            elseif face == "west" then
385
                widthPos = widthPos - 1
386
            elseif face == "east" then
387
                widthPos = widthPos + 1
388
            end
389
        elseif dir == "backward" then
390
                if face == "north" then
391
                        lengthPos = lengthPos + 1
392
                elseif face == "south" then
393
                        lengthPos = lengthPos - 1
394
                elseif face == "west" then
395
                        widthPos = widthPos + 1
396
                elseif face == "east" then
397
                        widthPos = widthPos - 1
398
                end
399
        elseif dir == "up" then
400
                heightPos = heightPos + 1
401
        elseif dir == "down" then
402
                heightPos = heightPos - 1
403
        elseif dir == "right" then
404
                if face == "north" then
405
                        face = "east"
406
                elseif face == "east" then
407
                        face = "south"
408
                elseif face == "south" then
409
                        face = "west"
410
                elseif face == "west" then
411
                        face = "north"
412
                end
413
        elseif dir == "left" then
414
                if face == "north" then
415
                        face = "west"
416
                elseif face == "west" then
417
                        face = "south"
418
                elseif face == "south" then
419
                        face = "east"
420
                elseif face == "east" then
421
                        face = "north"
422
                end
423
        end
424
        recordPos(heightPos,widthPos,lengthPos,face)
425
end
426
 
427
--[[Refill Functions]]--
428
 
429
function scanInv()
430
        local invList = {}
431
        for i = 1,16 do
432
                turtle.select(i)
433
                local item = turtle.getItemDetail()
434
                if item then
435
                        invList[i] = {}
436
            invList[i][item.name] = item.damage
437
                end
438
        end
439
        return invList
440
end
441
 
442
function ParseInv()
443
        turtle.select(16)
444
        turtle.dropUp()
445
        while turtle.suck() do
446
                local item = turtle.getItemDetail()
447
                for i =1,16 do
448
					if item then
449
                		if invList[i][item.name] then
450
                			if invList[i][item.name] == item.damage then
451
                            	        turtle.transferTo(i)
452
                          			    break
453
                			end
454
                    	end
455
                    	if item.name == "minecraft:lava_bucket" or item.name == "minecraft:coal" then
456
                    		turtle.refuel(64)
457
                    	end
458
                	end
459
				end
460
                turtle.dropUp()
461
        end
462
end
463
 
464
function refill()
465
    local mem = turtle.getSelectedSlot()
466
    chester("set")
467
        ParseInv()
468
        chester("gather")
469
    turtle.select(mem)
470
end
471
472
function chester(action)
473
        --action = 'set' or 'gather'
474
        if action == "set" then
475
                turtle.select(tonumber(enderchest1))
476
                turtle.place()
477
                turtle.select(tonumber(enderchest2))
478
                turtle.placeUp()
479
        elseif action == "gather" then
480
                if tonumber(chestOrder) == 1 then
481
                        turtle.digUp()
482
                        transferTo(enderchest1)
483
                        turtle.dig()
484
                        transferTo(enderchest1)
485
                        chestOrder = 2
486
                elseif tonumber(chestOrder) == 2 then
487
                        turtle.dig()
488
                        transferTo(enderchest1)
489
                        turtle.digUp()
490
                        transferTo(enderchest1)
491
                        chestOrder = 1
492
                end
493
        end
494
end
495
 
496
function transferTo(enderchestSlot)
497
    for i=16,1,-1 do
498
        turtle.select(i)
499
        local item = turtle.getItemDetail()
500
        if item then
501
            if item.name == "EnderStorage:enderChest" then
502
                turtle.transferTo(enderchestSlot)
503
                break
504
            end
505
        end
506
    end
507
end
508
 
509
function getBlockName(id, blockData)
510
  blockData = blockData or nil
511
  if(block_id[id] == nil) then
512
    return "ID: "..tostring(id)..", Data: "..tostring(blockData)
513
  else
514
    if(blockData) then
515
      if(id == 35) then
516
        str = woolColors[blockData] .. " " .. block_id[id]
517
        return str
518
      end
519
    end
520
    return block_id[id] .. " " .. id .. ", " .. blockData
521
  end
522
end
523
 
524
function getBlockId(x,y,z)
525
  return blocks[y + z*width + x*length*width + 1]
526
end
527
 
528
function getData(x,y,z)
529
  return data[y + z*width + x*length*width + 1]
530
end
531
 
532
function readbytes(handle, n)
533
  for i=1,n do
534
    handle.read()
535
  end
536
end
537
 
538
function readname(handle)  
539
  n1 = handle.read()
540
  n2 = handle.read()
541
 
542
  if(n1 == nil or n2 == nil) then
543
    return ""
544
  end
545
 
546
  n = n1*256 + n2
547
 
548
  str = ""
549
  for i=1,n do
550
    c = handle.read()
551
    if c == nil then
552
      return
553
    end  
554
    str = str .. string.char(c)
555
  end
556
  return str
557
end
558
 
559
function parse(a, handle, containsName)
560
  containsName = containsName or true
561
  if a==0 then
562
    return
563
  end
564
  if containsName then
565
    name = readname(handle)
566
  end
567
   
568
  if a==1 then
569
    readbytes(handle,1)  
570
  elseif a==2 then
571
    i1 = handle.read()
572
    i2 = handle.read()
573
    i = i1*256 + i2
574
    if(name=="Height") then
575
      height = i
576
    elseif (name=="Length") then
577
      length = i
578
    elseif (name=="Width") then
579
      width = i
580
    end
581
  elseif a==3 then
582
    readbytes(handle,4)
583
  elseif a==4 then
584
    readbytes(handle,8)
585
  elseif a==5 then
586
    readbytes(handle,4)
587
  elseif a==6 then
588
    readbytes(handle,8)
589
  elseif a==7 then
590
    i1 = handle.read()
591
    i2 = handle.read()
592
    i3 = handle.read()
593
    i4 = handle.read()
594
    i = i1*256*256*256 + i2*256*256 + i3*256 + i4
595
    if name == "Blocks" then
596
      for i=1,i do
597
        table.insert(blocks, handle.read())
598
      end
599
    elseif name == "Data" then
600
      for i=1,i do
601
        table.insert(data, handle.read())
602
      end
603
    else
604
      readbytes(handle,i)
605
    end
606
  elseif a==8 then
607
    i1 = handle.read()
608
    i2 = handle.read()
609
    i = i1*256 + i2
610
    readbytes(handle,i)
611
  elseif a==9 then
612
        --readbytes(handle,5)
613
        type = handle.read()
614
        i1 = handle.read()
615
    i2 = handle.read()
616
    i3 = handle.read()
617
    i4 = handle.read()
618
    i = i1*256*256*256 + i2*256*256 + i3*256 + i4
619
    for j=1,i do
620
      parse(handle.read(), handle, false)
621
    end
622
  end
623
end
624
 
625
--[[Movement Functions]]--
626
 
627
function forward()
628
  update("forward")
629
  while not turtle.forward() do
630
    turtle.dig()
631
  end
632
end
633
 
634
function up()
635
  update("up")
636
  while not turtle.up() do
637
    turtle.digUp()
638
  end
639
end
640
 
641
function down()
642
  update("down")
643
  while not turtle.down() do
644
    turtle.digDown()
645
  end
646
end
647
 
648
function right()
649
  update("right")
650
  turtle.turnRight()
651
end
652
   
653
function left()
654
  update("left")
655
  turtle.turnLeft()
656
end
657
 
658
function turn(dir)
659
    if face == "north" then
660
        if dir == "east" then
661
            while face ~= dir do
662
                right()
663
            end
664
        else
665
            while face ~= dir do
666
                left()
667
            end
668
        end
669
   elseif face == "east" then
670
        if dir == "south" then
671
            while face ~= dir do
672
                right()
673
            end
674
        else
675
            while face ~= dir do
676
                left()
677
            end
678
        end
679
    elseif face == "south" then
680
        if dir == "west" then
681
            while face ~= dir do
682
                right()
683
            end
684
        else
685
            while face ~= dir do
686
                left()
687
            end
688
        end
689
    elseif face == "west" then
690
        if dir == "north" then
691
            while face ~= dir do
692
                right()
693
            end
694
        else
695
            while face ~= dir do
696
                left()
697
            end
698
        end
699
    end
700
end
701
 
702
function place()
703
  while not turtle.placeDown() do
704
    turtle.digDown()
705
  end
706
  return true
707
end
708
 
709
--[[Working Functions]]--
710
 
711
function setup()
712
    a = 0
713
    while (a ~= nil) do
714
        a = handle.read()
715
        parse(a, handle)
716
    end
717
 
718
    write("length: " .. length)
719
    write("   width: " .. width)
720
    write("   height: " .. height .. "\n")
721
 
722
    uniqueblocks={}
723
    for i,v in ipairs(blocks) do
724
        found = false
725
        for j,w in ipairs(uniqueblocks) do
726
            -- for now, data is only accounted for when the block is wool
727
                if (w.blockID==v and (w.data==data[i] or w.blockID ~= 35)) then
728
                    found = true
729
                    w.amount = w.amount + 1
730
                    break
731
            end
732
        end
733
 
734
        if found==false then
735
            uniqueblocks[#uniqueblocks+1] = {}
736
            uniqueblocks[#uniqueblocks].blockID = v
737
            uniqueblocks[#uniqueblocks].data = data[i]
738
            uniqueblocks[#uniqueblocks].amount = 1
739
        end
740
    end
741
 
742
    print("number of block types: " .. #uniqueblocks)
743
    for i,v in ipairs(uniqueblocks) do
744
        if (i%9)==0 then
745
            read()
746
        end
747
        print(" -" .. getBlockName(v.blockID, v.data) .. ": " .. v.amount)
748
    end
749
 
750
    read()
751
 
752
    print("Give the numbers of all slots containing the specified block type:")
753
 
754
    slots={}
755
    for i,block in ipairs(uniqueblocks) do
756
        blockData = block.data
757
        print(" -in which slots is " .. getBlockName(block.blockID, blockData) .. "?")
758
        if not slots[block.blockID] then
759
            slots[block.blockID] = {}
760
        end
761
        slots[block.blockID][blockData] = {}
762
        write("   ")
763
        str = read()
764
        for i = 1, #str do
765
                local c = str:sub(i,i)
766
                n = tonumber(c)
767
                if(n) then
768
                    if(n>0 and n<10) then
769
                        table.insert(slots[block.blockID][blockData], n)
770
                    end
771
            end
772
        end
773
    end
774
    invList = scanInv()
775
 end
776
 
777
function run()
778
    print("Press key to start building...")
779
    read()
780
    --invList = scanInv()
781
 
782
    up()
783
    n = 1
784
    turtle.select(n)
785
 
786
    for x=1,height do
787
        for y=1,width do
788
            for z=1,length do
789
                blockID = getBlockId(x-1,y-1,z-1)
790
                    blockData = getData(x-1,y-1,z-1)
791
                    forward()
792
                turtle.digDown()
793
                    slot_lst = slots[blockID][blockData]
794
                    if(slot_lst ~= nil) then
795
                        if(#slot_lst > 0) then
796
                            local found=false
797
                            for i,v in ipairs(slot_lst) do
798
                                if(turtle.getItemCount(v) > 0) then
799
                                    found=true
800
                                    turtle.select(v)
801
                                    break
802
                                end
803
                            end
804
                            if not found then
805
                                print("Not enough " .. getBlockName(blockID, blockData) .. ". Please refill...")
806
                            refill()
807
                            end
808
                            while turtle.getItemCount() == 0 do
809
                            refill()
810
                        end
811
                        if turtle.getFuelLevel() < 200 then
812
                            refill()
813
                        end
814
                        end
815
                    end
816
                end
817
                left()
818
                forward()
819
            left()
820
            for i=1,length do
821
                forward()
822
            end
823
            right()
824
            right()
825
        end
826
        right()
827
        for i=1,width do
828
            forward()
829
        end
830
        left()
831
        up()
832
    end
833
 
834
    for i=1,height+1 do
835
        down()
836
    end
837
end
838
 
839
function findNextBlock(x,y,z)
840
    blockID = getBlockId(x,y,z)
841
    blockData = getData(x,y,z)
842
    if blockID then
843
        slot_lst = slots[blockID][blockData]
844
        if(slot_lst ~= nil) then
845
                if(#slot_lst > 0) then
846
                    local found=false
847
                    for i,v in ipairs(slot_lst) do
848
                        if(turtle.getItemCount(v) > 0) then
849
                            found=true
850
                            turtle.select(v)
851
                            break
852
                        end
853
                    end
854
                    if not found then
855
                        print("Not enough " .. getBlockName(blockID, blockData) .. ". Please refill...")
856
                    refill()
857
                    end
858
                                while turtle.getItemCount() == 0 do
859
                                    refill()
860
                                end
861
                local doubleCheck = turtle.getItemDetail()
862
                if doubleCheck.name ~= "EnderStorage:enderChest" then
863
                    place()
864
                else
865
                    findNextBlock(x,y,z)   
866
                end
867
            end
868
            if turtle.getFuelLevel() < 200 then
869-
function check()
869+
870
            end
871
        end
872
    end
873
end
874
 
875
function oldIterate()
876
    --x,y,z = height,width,length
877
    if z < length then
878
        z = z + 1
879
    elseif z == length then
880
        z = 0
881
        if y < width then
882
            y = y + 1
883
        elseif y == width then
884
            y = 0
885
            if x < height then
886
                x = x + 1
887-
function iterate()
887+
888-
    check()
888+
889
                y = 'max'
890-
        Yiterate()
890+
891
            end
892
        end
893
    end
894
    recordObj(x,y,z)
895
end
896-
        Yiterate()
896+
897
function check(x,y,z)
898
    if x%2==0 then
899
        evenx = true
900
        if y%2==0 then
901
            eveny = true
902
        else
903
            eveny = false
904
        end
905
    else
906-
function Yiterate()
906+
907
        if y%2==0 then
908
            eveny = false
909
        else
910
            eveny = true
911
        end
912
    end
913
    return evenx,eveny
914-
				x = 'max'
914+
915
 
916
function Yiterate(x,y,z,length,width,height)
917-
				error()
917+
918-
			end
918+
919
            y = y + 1
920
        elseif y == width then
921
            if x < height then
922
                x = x + 1
923
            elseif x == height then
924
                x,y,z = "max","max","max"
925
            end
926
        end
927
    else
928
        if y == 0 then
929
            if x < height then
930
                x = x + 1
931
            elseif x == height then
932
                x = "max"
933
                y = "max"
934
                z = "max"
935
            end
936
        else
937
            y=y-1
938
        end
939
    end
940
    return x,y,z
941
end
942
 
943
function iterate(x,y,z,length,width,height)
944
    evenx,eveny = check(x,y,z)
945
    if z == length and eveny then
946
        x,y,z = Yiterate(x,y,z,length,width,height)
947
    elseif z==length and (not eveny) then
948
        z = z - 1
949-
    local ObjectivesList = {}
949+
950
        z = z + 1
951-
    while x do
951+
952
        x,y,z = Yiterate(x,y,z,length,width,height)
953
    elseif z < length then
954
        if eveny then
955
            z = z + 1
956
        else
957
            z = z - 1
958
        end
959
    end
960
    return x,y,z
961
end
962
 
963
function checkIfAir()
964
    while true do
965
        iterate()
966
        blockID2 = getBlockId(x,y,z)
967
        blockData2 = getData(x,y,z)
968
		if slots[blockID2] then
969
        	slot_2nd = slots[blockID2][blockData2]
970
        	if slot_2nd then
971
            	if #slot_2nd > 0 then
972
                	recordObj(x,y,z)
973
                	break
974
            	end
975
        	end
976
		end
977
    end
978
end
979
980
function checkIfAir2(slots,height,width,length)
981
    ObjectivesList = {}
982
    x,y,z = 0,0,0
983
    while true do
984
		if type(x) ~= "number" then
985
			break
986
		end
987
        local id = getBlockId(x,y,z)
988
        local data = getData(x,y,z)
989
        if slots[id] and #slots[id][data] > 0 then
990
            table.insert(ObjectivesList,{
991
                x = x,
992
                y = y,
993
                z = z,
994
                id = id,
995
                data = data,
996
                slotNums = slots[id][data],
997
            })
998
        end
999
        print(x,y,z)
1000
        x,y,z = iterate(x,y,z,height,width,length)
1001
    end
1002
    return ObjectivesList
1003
end
1004
1005
function autorun()
1006
    --get the current coords
1007
    --get the iterater/goal block location
1008
    while true do
1009
        shell.run("position")
1010
        shell.run("objective")
1011
        goto(x,y,z)
1012
        findNextBlock(x,y,z)
1013
        checkIfAir()
1014
    end
1015
	shell.run("clr")
1016
	print("finished")
1017
end
1018
1019
function autorun2()
1020
    while true do
1021
        shell.run("position")
1022
        shell.run("objective2")
1023
        goto(ObjectivesList[num].x,ObjectivesList[num].y,ObjectivesList[num].z)
1024
		turtle.select(ObjectivesList[num].slotNums[1])
1025
		place()
1026
		recordObjNum(num+1)
1027
    end
1028
	shell.run("clr")
1029
	print("finished")
1030
1031
end