Advertisement
guitarplayer616

Nonstop Schematic Turtle API Backup

Dec 12th, 2015
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 24.54 KB | None | 0 0
  1. --[[function saveVarsToConsole(name)
  2.         local h = fs.open(name,'w')
  3.         local env = getfenv()
  4.         for i,v in pairs(env) do
  5.                 if i then
  6.                         h.write(i)
  7.                         if v then
  8.                                 --h.write("("..tostring(type(v))..")")
  9.                                 h.write(': ')
  10.                                 h.writeLine(v)
  11.                         end
  12.                 end
  13.         end
  14.         h.close()
  15. end]]
  16.  
  17. function saveVarsToFile()
  18.         local h = fs.open("currentVars",'w')
  19.         local env = getfenv()
  20.         for i,v in pairs(env) do
  21.                 if type(v) == "string" then
  22.                         h.write(tostring(i))
  23.                         h.write(" = ")
  24.                         h.write([["]]..tostring(v)..[["]])
  25.                 elseif type(v) == "table" then
  26.                         h.write(i)
  27.                         h.write(" = ")
  28.                         h.write(textutils.serialize(v))
  29.                 end
  30.         end
  31.         h.close()
  32. end
  33.  
  34. function loadVars()
  35.         local h = fs.open("currentVars",'r')
  36. end
  37.  
  38. function recordPos(heightPos,widthPos,lengthPos,face)
  39.         local h = fs.open("position","w")
  40.         h.writeLine("heightPos = "..tostring(heightPos))
  41.         h.writeLine("widthPos = "..tostring(widthPos))
  42.         h.writeLine("lengthPos = "..tostring(lengthPos))
  43.         h.writeLine("face = ".."\""..tostring(face).."\"")
  44.         h.close()
  45. end
  46.  
  47. function recordObj(x,y,z)
  48.         local h = fs.open("objective",'w')
  49.         h.writeLine("x = "..tostring(x))
  50.         h.writeLine("y = "..tostring(y))
  51.         h.writeLine("z = "..tostring(z))
  52.         h.close()
  53. end
  54.  
  55. block_id = {}
  56. block_id[0] = "Air"
  57. block_id[1] = "Stone"
  58. block_id[2] = "Grass"
  59. block_id[3] = "Dirt"
  60. block_id[4] = "Cobblestone"
  61. block_id[5] = "Wooden Plank"
  62. block_id[6] = "Sapling"
  63. block_id[7] = "Bedrock"
  64. block_id[8] = "Water"
  65. block_id[9] = "Stationary water"
  66. block_id[10] = "Lava"
  67. block_id[11] = "Stationary lava"
  68. block_id[12] = "Sand"
  69. block_id[13] = "Gravel"
  70. block_id[14] = "Gold Ore"
  71. block_id[15] = "Iron (Ore)"
  72. block_id[16] = "Coal Ore"
  73. block_id[17] = "Log"
  74. block_id[18] = "Leaves"
  75. block_id[19] = "Sponge"
  76. block_id[20] = "Glass"
  77. block_id[21] = "Lapis Lazuli (Ore)"
  78. block_id[22] = "Lapis Lazuli (Block)"
  79. block_id[23] = "Dispenser"
  80. block_id[24] = "Sandstone"
  81. block_id[25] = "Note Block Tile entity"
  82. block_id[26] = "Bed"
  83. block_id[27] = "Powered Rail "
  84. block_id[28] = "Detector Rail "
  85. block_id[29] = "Sticky Piston"
  86. block_id[30] = "Cobweb"
  87. block_id[31] = "Tall Grass"
  88. block_id[32] = "Dead Bush"
  89. block_id[33] = "Piston"
  90. block_id[34] = "Piston Extension"
  91. block_id[35] = "Wool"
  92. block_id[36] = "Block moved by Piston"
  93. block_id[37] = "Dandelionandelion"
  94. block_id[38] = "Rose"
  95. block_id[39] = "Brown Mushroom"
  96. block_id[40] = "Red Mushroom"
  97. block_id[41] = "Block of Gold"
  98. block_id[42] = "Block of Iron"
  99. block_id[43] = "Double Slabs"
  100. block_id[44] = "Slabs"
  101. block_id[45] = "Brick Block"
  102. block_id[46] = "TNT"
  103. block_id[47] = "Bookshelf"
  104. block_id[48] = "Moss Stone"
  105. block_id[49] = "Obsidian"
  106. block_id[50] = "Torch"
  107. block_id[51] = "Fire"
  108. block_id[52] = "Monster Spawner"
  109. block_id[53] = "Wooden Stairs"
  110. block_id[54] = "Chest"
  111. block_id[55] = "Redstone (Wire)"
  112. block_id[56] = "Diamond (Ore)"
  113. block_id[57] = "Block of Diamond"
  114. block_id[58] = "Crafting Table"
  115. block_id[59] = "Seeds"
  116. block_id[60] = "Farland"
  117. block_id[61] = "Furnace"
  118. block_id[62] = "Burning Furnace"
  119. block_id[63] = "Sign Post"
  120. block_id[64] = "Wooden Door"
  121. block_id[65] = "Ladders"
  122. block_id[66] = "Rails"
  123. block_id[67] = "Cobblestone Stairs"
  124. block_id[68] = "Wall Sign"
  125. block_id[69] = "Lever"
  126. block_id[70] = "Stone Pressure Plate"
  127. block_id[71] = "Iron Door"
  128. block_id[72] = "Wooden Pressure Plates"
  129. block_id[73] = "Redstone Ore"
  130. block_id[74] = "Glowing Redstone Ore"
  131. block_id[75] = "Redstone Torch"
  132. block_id[76] = "Redstone Torch"
  133. block_id[77] = "Stone Button "
  134. block_id[78] = "Snow"
  135. block_id[79] = "Ice"
  136. block_id[80] = "Snow Block"
  137. block_id[81] = "Cactus"
  138. block_id[82] = "Clay (Block)"
  139. block_id[83] = "Sugar Cane"
  140. block_id[84] = "Jukebox"
  141. block_id[85] = "Fence"
  142. block_id[86] = "Pumpkin"
  143. block_id[87] = "Netherrack"
  144. block_id[88] = "Soul Sand"
  145. block_id[89] = "Glowstone"
  146. block_id[90] = "Portal"
  147. block_id[91] = "Jack-O-Lantern"
  148. block_id[92] = "Cake Block"
  149. block_id[93] = "Redstone Repeater"
  150. block_id[94] = "Redstone Repeater"
  151. block_id[95] = "Locked Chest"
  152. block_id[96] = "Trapdoors"
  153. block_id[97] = "Hidden Silverfish"
  154. block_id[98] = "Stone Brick"
  155. block_id[99] = "Huge brown and red mushroom"
  156. block_id[100] = "Huge brown and red mushroom"
  157. block_id[101] = "Iron Bars"
  158. block_id[102] = "Glass Pane"
  159. block_id[103] = "Melon"
  160. block_id[104] = "Pumpkin Stem"
  161. block_id[105] = "Melon Stem"
  162. block_id[106] = "Vines"
  163. block_id[107] = "Fence Gate"
  164. block_id[108] = "Brick Stairs"
  165. block_id[109] = "Stone Brick Stairs"
  166. block_id[110] = "Mycelium"
  167. block_id[111] = "Lily Pad"
  168. block_id[112] = "Nether Brick"
  169. block_id[113] = "Nether Brick Fence"
  170. block_id[114] = "Nether Brick Stairs"
  171. block_id[115] = "Nether Wart"
  172. block_id[116] = "Enchantment Table"
  173. block_id[117] = "Brewing Stand"
  174. block_id[118] = "Cauldron"
  175. block_id[119] = "End Portal"
  176. block_id[120] = "End Portal Frame"
  177. block_id[121] = "End Stone "
  178. block_id[256] = "Iron Ingotron Shovel"
  179. block_id[257] = "Iron Pickaxe"
  180. block_id[258] = "Iron Axe"
  181. block_id[259] = "Flint and Steel"
  182. block_id[260] = "Red Apple"
  183. block_id[261] = "Bow"
  184. block_id[262] = "Arrow"
  185. block_id[263] = "Coal"
  186.  
  187. woolColors = {}
  188. woolColors[0] = "White"
  189. woolColors[1] = "Orange"
  190. woolColors[2] = "Magenta"
  191. woolColors[3] = "Light Blue"
  192. woolColors[4] = "Yellow"
  193. woolColors[5] = "Lime"
  194. woolColors[6] = "Pink"
  195. woolColors[7] = "Gray"
  196. woolColors[8] = "Light Gray"
  197. woolColors[9] = "Cyan"
  198. woolColors[10] = "Purple"
  199. woolColors[11] = "Blue"
  200. woolColors[12] = "Brown"
  201. woolColors[13] = "Green"
  202. woolColors[14] = "Red"
  203. woolColors[15] = "Black"
  204.  
  205. --[[Navigation Functions]]--
  206.  
  207. function goto(heightGoal,widthGoal,lengthGoal)
  208.         shell.run("position")
  209.         if turtle.getFuelLevel() < 200 then
  210.                 refill()
  211.         end
  212.         if heightGoal > heightPos then
  213.                 while heightGoal > heightPos do
  214.                         up()
  215.                 end
  216.         elseif heightGoal < heightPos then
  217.                 while heightGoal < heightPos do
  218.                         down()
  219.                 end
  220.         end
  221.         if widthGoal > widthPos then
  222.                 turn("east")
  223.                 while widthGoal > widthPos do
  224.                         forward()
  225.                 end
  226.         elseif widthGoal < widthPos then
  227.                 turn("west")
  228.                 while widthGoal < widthPos do
  229.                         forward()
  230.                 end
  231.         end
  232.         if lengthGoal > lengthPos then
  233.                 turn("south")
  234.                 while lengthGoal > lengthPos do
  235.                         forward()
  236.                 end
  237.         elseif lengthGoal < lengthPos then
  238.                 turn("north")
  239.                 while lengthGoal < lengthPos do
  240.                         forward()
  241.                 end
  242.         end
  243. end
  244.  
  245. function update(dir)
  246.         if dir == "forward" then
  247.                 if face == "north" then
  248.                         lengthPos = lengthPos - 1
  249.                 elseif face == "south" then
  250.                         lengthPos = lengthPos + 1
  251.                 elseif face == "west" then
  252.                         widthPos = widthPos - 1
  253.                 elseif face == "east" then
  254.                         widthPos = widthPos + 1
  255.                 end
  256.         elseif dir == "backward" then
  257.                 if face == "north" then
  258.                         lengthPos = lengthPos + 1
  259.                 elseif face == "south" then
  260.                         lengthPos = lengthPos - 1
  261.                 elseif face == "west" then
  262.                         widthPos = widthPos + 1
  263.                 elseif face == "east" then
  264.                         widthPos = widthPos - 1
  265.                 end
  266.         elseif dir == "up" then
  267.                 heightPos = heightPos + 1
  268.         elseif dir == "down" then
  269.                 heightPos = heightPos - 1
  270.         elseif dir == "right" then
  271.                 if face == "north" then
  272.                         face = "east"
  273.                 elseif face == "east" then
  274.                         face = "south"
  275.                 elseif face == "south" then
  276.                         face = "west"
  277.                 elseif face == "west" then
  278.                         face = "north"
  279.                 end
  280.         elseif dir == "left" then
  281.                 if face == "north" then
  282.                         face = "west"
  283.                 elseif face == "west" then
  284.                         face = "south"
  285.                 elseif face == "south" then
  286.                         face = "east"
  287.                 elseif face == "east" then
  288.                         face = "north"
  289.                 end
  290.         end
  291.         recordPos(heightPos,widthPos,lengthPos,face)
  292. end
  293.  
  294. --[[Refill Functions]]--
  295.  
  296. function scanInv()
  297.         local invList = {}
  298.         for i = 1,16 do
  299.                 turtle.select(i)
  300.                 local item = turtle.getItemDetail()
  301.                 if item then
  302.                         invList[i] = {}
  303.                         invList[i][item.name] = item.damage
  304.                 end
  305.         end
  306.         return invList
  307. end
  308.  
  309. function ParseInv()
  310.         turtle.select(16)
  311.         turtle.dropUp()
  312.         while turtle.suck() do
  313.                 local item = turtle.getItemDetail()
  314.                 for i =1,16 do
  315.                         if invList[i][item.name] then
  316.                                 if invList[i][item.name] == item.damage then
  317.                                         turtle.transferTo(i)
  318.                                         break
  319.                                 end
  320.                         end
  321.                         if item.name == "minecraft:lava_bucket" or item.name == "minecraft:coal" then
  322.                                 turtle.refuel(64)
  323.                         end
  324.                 end
  325.                 turtle.dropUp()
  326.         end
  327. end
  328.  
  329. function refill()
  330.         local mem = turtle.getSelectedSlot()
  331.         chester("set")
  332.         ParseInv()
  333.         chester("gather")
  334.         turtle.select(mem)
  335. end
  336.  
  337. function chester(action)
  338.         --action = 'set' or 'gather'
  339.         if action == "set" then
  340.                 turtle.select(tonumber(enderchest1))
  341.                 turtle.place()
  342.                 turtle.select(tonumber(enderchest2))
  343.                 turtle.placeUp()
  344.         elseif action == "gather" then
  345.                 if tonumber(chestOrder) == 1 then
  346.                         turtle.select(tonumber(enderchest1))
  347.                         turtle.digUp()
  348.                         turtle.select(tonumber(enderchest2))
  349.                         turtle.dig()
  350.                         chestOrder = 2
  351.                 elseif tonumber(chestOrder) == 2 then
  352.                         turtle.select(tonumber(enderchest1))
  353.                         turtle.dig()
  354.                         turtle.select(tonumber(enderchest2))
  355.                         turtle.digUp()
  356.                         chestOrder = 1
  357.                 end
  358.         end
  359. end
  360.  
  361. function getBlockName(id, blockData)
  362.   blockData = blockData or nil
  363.   if(block_id[id] == nil) then
  364.     return "ID: "..tostring(id)..", Data: "..tostring(blockData)
  365.   else
  366.     if(blockData) then
  367.       if(id == 35) then
  368.         str = woolColors[blockData] .. " " .. block_id[id]
  369.         return str
  370.       end
  371.     end
  372.     return block_id[id]
  373.   end
  374. end
  375.  
  376. function getBlockId(x,y,z)
  377.   return blocks[y + z*width + x*length*width + 1]
  378. end
  379.  
  380. function getData(x,y,z)
  381.   return data[y + z*width + x*length*width + 1]
  382. end
  383.  
  384. function readbytes(handle, n)
  385.   for i=1,n do
  386.     handle.read()
  387.   end
  388. end
  389.  
  390. function readname(handle)  
  391.   n1 = handle.read()
  392.   n2 = handle.read()
  393.  
  394.   if(n1 == nil or n2 == nil) then
  395.     return ""
  396.   end
  397.  
  398.   n = n1*256 + n2
  399.  
  400.   str = ""
  401.   for i=1,n do
  402.     c = handle.read()
  403.     if c == nil then
  404.       return
  405.     end  
  406.     str = str .. string.char(c)
  407.   end
  408.   return str
  409. end
  410.  
  411. function parse(a, handle, containsName)
  412.   containsName = containsName or true
  413.   if a==0 then
  414.     return
  415.   end
  416.   if containsName then
  417.     name = readname(handle)
  418.   end
  419.    
  420.   if a==1 then
  421.     readbytes(handle,1)  
  422.   elseif a==2 then
  423.     i1 = handle.read()
  424.     i2 = handle.read()
  425.     i = i1*256 + i2
  426.     if(name=="Height") then
  427.       height = i
  428.     elseif (name=="Length") then
  429.       length = i
  430.     elseif (name=="Width") then
  431.       width = i
  432.     end
  433.   elseif a==3 then
  434.     readbytes(handle,4)
  435.   elseif a==4 then
  436.     readbytes(handle,8)
  437.   elseif a==5 then
  438.     readbytes(handle,4)
  439.   elseif a==6 then
  440.     readbytes(handle,8)
  441.   elseif a==7 then
  442.     i1 = handle.read()
  443.     i2 = handle.read()
  444.     i3 = handle.read()
  445.     i4 = handle.read()
  446.     i = i1*256*256*256 + i2*256*256 + i3*256 + i4
  447.     if name == "Blocks" then
  448.       for i=1,i do
  449.         table.insert(blocks, handle.read())
  450.       end
  451.     elseif name == "Data" then
  452.       for i=1,i do
  453.         table.insert(data, handle.read())
  454.       end
  455.     else
  456.       readbytes(handle,i)
  457.     end
  458.   elseif a==8 then
  459.     i1 = handle.read()
  460.     i2 = handle.read()
  461.     i = i1*256 + i2
  462.     readbytes(handle,i)
  463.   elseif a==9 then
  464.         --readbytes(handle,5)
  465.         type = handle.read()
  466.         i1 = handle.read()
  467.     i2 = handle.read()
  468.     i3 = handle.read()
  469.     i4 = handle.read()
  470.     i = i1*256*256*256 + i2*256*256 + i3*256 + i4
  471.     for j=1,i do
  472.       parse(handle.read(), handle, false)
  473.     end
  474.   end
  475. end
  476.  
  477. --[[Movement Functions]]--
  478.  
  479. function forward()
  480.   update("forward")
  481.   while not turtle.forward() do
  482.     turtle.dig()
  483.   end
  484. end
  485.  
  486. function up()
  487.   update("up")
  488.   while not turtle.up() do
  489.     turtle.digUp()
  490.   end
  491. end
  492.  
  493. function down()
  494.   update("down")
  495.   while not turtle.down() do
  496.     turtle.digDown()
  497.   end
  498. end
  499.  
  500. function right()
  501.   update("right")
  502.   turtle.turnRight()
  503. end
  504.        
  505. function left()
  506.   update("left")
  507.   turtle.turnLeft()
  508. end
  509.  
  510. function turn(dir)
  511.         if face == "north" then
  512.                 if dir == "east" then
  513.                         while face ~= dir do
  514.                                 right()
  515.                         end
  516.                 else
  517.                         while face ~= dir do
  518.                                 left()
  519.                         end
  520.                 end
  521.    elseif face == "east" then
  522.                 if dir == "south" then
  523.                         while face ~= dir do
  524.                                 right()
  525.                         end
  526.                 else
  527.                         while face ~= dir do
  528.                                 left()
  529.                         end
  530.                 end
  531.         elseif face == "south" then
  532.                 if dir == "west" then
  533.                         while face ~= dir do
  534.                                 right()
  535.                         end
  536.                 else
  537.                         while face ~= dir do
  538.                                 left()
  539.                         end
  540.                 end
  541.         elseif face == "west" then
  542.                 if dir == "north" then
  543.                         while face ~= dir do
  544.                                 right()
  545.                         end
  546.                 else
  547.                         while face ~= dir do
  548.                                 left()
  549.                         end
  550.                 end
  551.         end
  552. end
  553.  
  554. function place()
  555.   while not turtle.placeDown() do
  556.     turtle.digDown()
  557.   end
  558. end
  559.  
  560. --[[Working Functions]]--
  561.  
  562. function setup()
  563.  
  564.         a = 0
  565.         while (a ~= nil) do
  566.                 a = handle.read()
  567.                 parse(a, handle)
  568.         end
  569.  
  570.         write("length: " .. length)
  571.         write("   width: " .. width)
  572.         write("   height: " .. height .. "\n")
  573.  
  574.         uniqueblocks={}
  575.         for i,v in ipairs(blocks) do
  576.                 found = false
  577.                 for j,w in ipairs(uniqueblocks) do
  578.                 -- for now, data is only accounted for when the block is wool
  579.                         if (w.blockID==v and (w.data==data[i] or w.blockID ~= 35)) then
  580.                                 found = true
  581.                                 w.amount = w.amount + 1
  582.                                 break
  583.                         end
  584.                 end
  585.  
  586.                 if found==false then
  587.                         uniqueblocks[#uniqueblocks+1] = {}
  588.                         uniqueblocks[#uniqueblocks].blockID = v
  589.                         uniqueblocks[#uniqueblocks].data = data[i]
  590.                         uniqueblocks[#uniqueblocks].amount = 1
  591.                 end
  592.         end
  593.  
  594.         print("number of block types: " .. #uniqueblocks)
  595.         for i,v in ipairs(uniqueblocks) do
  596.                 if (i%9)==0 then
  597.                         read()
  598.                 end
  599.                 print(" -" .. getBlockName(v.blockID, v.data) .. ": " .. v.amount)
  600.         end
  601.  
  602.         read()
  603.  
  604.         print("Give the numbers of all slots containing the specified block type:")
  605.  
  606.         slots={}
  607.         for i,block in ipairs(uniqueblocks) do
  608.                 blockData = block.data
  609.                 print(" -in which slots is " .. getBlockName(block.blockID, blockData) .. "?")
  610.                 if not slots[block.blockID] then
  611.                         slots[block.blockID] = {}
  612.                 end
  613.                 slots[block.blockID][blockData] = {}
  614.                 write("   ")
  615.                 str = read()
  616.                 for i = 1, #str do
  617.                         local c = str:sub(i,i)
  618.                         n = tonumber(c)
  619.                         if(n) then
  620.                                 if(n>0 and n<10) then
  621.                                         table.insert(slots[block.blockID][blockData], n)
  622.                                 end
  623.                         end
  624.                 end
  625.         end
  626.         invList = scanInv()
  627.  end
  628.  
  629. function run()
  630.         print("Press key to start building...")
  631.         read()
  632.         --invList = scanInv()
  633.  
  634.         up()
  635.         n = 1
  636.         turtle.select(n)
  637.  
  638.         for x=1,height do
  639.                 for y=1,width do
  640.                         for z=1,length do
  641.                                 blockID = getBlockId(x-1,y-1,z-1)
  642.                                 blockData = getData(x-1,y-1,z-1)
  643.                                 forward()
  644.                                 turtle.digDown()
  645.                                 slot_lst = slots[blockID][blockData]
  646.                                 if(slot_lst ~= nil) then
  647.                                         if(#slot_lst > 0) then
  648.                                                 local found=false
  649.                                                 for i,v in ipairs(slot_lst) do
  650.                                                         if(turtle.getItemCount(v) > 0) then
  651.                                                                 found=true
  652.                                                                 turtle.select(v)
  653.                                                                 break
  654.                                                         end
  655.                                                 end
  656.                                                 if not found then
  657.                                                         print("Not enough " .. getBlockName(blockID, blockData) .. ". Please refill...")
  658.                                                         refill()
  659.                                                 end
  660.                                                 place()
  661.                                                 if turtle.getFuelLevel() < 200 then
  662.                                                         refill()
  663.                                                 end
  664.                                         end
  665.                                 end
  666.                         end
  667.                         left()
  668.                         forward()
  669.                         left()
  670.                         for i=1,length do
  671.                                 forward()
  672.                         end
  673.                         right()
  674.                         right()
  675.                 end
  676.                 right()
  677.                 for i=1,width do
  678.                         forward()
  679.                 end
  680.                 left()
  681.                 up()
  682.         end
  683.  
  684.         for i=1,height+1 do
  685.                 down()
  686.         end
  687. end
  688.  
  689. function findNextBlock(x,y,z)
  690.         blockID = getBlockId(x,y,z)
  691.         blockData = getData(x,y,z)
  692.         if blockID then
  693.                 slot_lst = slots[blockID][blockData]
  694.                 if(slot_lst ~= nil) then
  695.                         if(#slot_lst > 0) then
  696.                                 local found=false
  697.                                 for i,v in ipairs(slot_lst) do
  698.                                         if(turtle.getItemCount(v) > 0) then
  699.                                                 found=true
  700.                                                 turtle.select(v)
  701.                                                 break
  702.                                         end
  703.                                 end
  704.                                 if not found then
  705.                                         print("Not enough " .. getBlockName(blockID, blockData) .. ". Please refill...")
  706.                                         local mem = turtle.getSelectedSlot()
  707.                                         refill()
  708.                                         turtle.select(mem)
  709.                                 end
  710.                                 place()
  711.                         end
  712.                         if turtle.getFuelLevel() < 200 then
  713.                                 refill()
  714.                         end
  715.                 end
  716.         end
  717. end
  718.  
  719. function oldIterate()
  720.         --x,y,z = height,width,length
  721.         if z < length then
  722.                 z = z + 1
  723.         elseif z == length then
  724.                 z = 0
  725.                 if y < width then
  726.                         y = y + 1
  727.                 elseif y == width then
  728.                         y = 0
  729.                         if x < height then
  730.                                 x = x + 1
  731.                         elseif x == height then
  732.                                 x = 'max'
  733.                                 y = 'max'
  734.                                 z = 'max'
  735.                         end
  736.                 end
  737.         end
  738.         recordObj(x,y,z)
  739. end
  740.  
  741. function check()
  742.         if x%2==0 then
  743.                 evenx = true
  744.                 if y%2==0 then
  745.                         eveny = true
  746.                 else
  747.                         eveny = false
  748.                 end
  749.         else
  750.                 evenx = false
  751.                 if y%2==0 then
  752.                         eveny = false
  753.                 else
  754.                         eveny = true
  755.                 end
  756.         end
  757. end
  758.  
  759. function iterate()
  760.         check()
  761.         if z == length and eveny then
  762.                 Yiterate()
  763.         elseif z==length and (not eveny) then
  764.                 z = z - 1
  765.         elseif z == 0 and eveny then
  766.                 z = z + 1
  767.         elseif z == 0 and (not eveny) then
  768.                 Yiterate()
  769.         elseif z < length then
  770.                 if eveny then
  771.                         z = z + 1
  772.                 else
  773.                         z = z - 1
  774.                 end
  775.         end
  776. end
  777.  
  778. function Yiterate()
  779.         if evenx then
  780.                 if y < width then
  781.                         y = y + 1
  782.                 elseif y == width then
  783.                         if x < height then
  784.                                 x = x + 1
  785.                         end
  786.                 end
  787.         else
  788.                 if y == 0 then
  789.                         if x < height then
  790.                                 x = x + 1
  791.                         end
  792.                 else
  793.                         y=y-1
  794.                 end
  795.         end
  796. end
  797.  
  798. function checkIfAir()
  799.         while true do
  800.                 iterate()
  801.                 blockID2 = getBlockId(x,y,z)
  802.                 blockData2 = getData(x,y,z)
  803.                 slot_2nd = slots[blockID2][blockData2]
  804.                 if slot_2nd then
  805.                         if #slot_2nd > 0 then
  806.                                 recordObj(x,y,z)
  807.                                 break
  808.                         end
  809.                 end
  810.         end
  811. end
  812.  
  813. function autorun()
  814.         --get the current coords
  815.         --get the iterater/goal block location
  816.         while true do
  817.                 shell.run("position")
  818.                 shell.run("objective")
  819.                 goto(x,y,z)
  820.                 findNextBlock(x,y,z)
  821.                 checkIfAir()
  822.         end
  823. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement