Advertisement
guitarplayer616

Branch turtleSchem4

Nov 27th, 2016
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.                 refill()
  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.             elseif x == height then
  888.                 x = 'max'
  889.                 y = 'max'
  890.                 z = 'max'
  891.             end
  892.         end
  893.     end
  894.     recordObj(x,y,z)
  895. end
  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.         evenx = false
  907.         if y%2==0 then
  908.             eveny = false
  909.         else
  910.             eveny = true
  911.         end
  912.     end
  913.     return evenx,eveny
  914. end
  915.  
  916. function Yiterate(x,y,z,length,width,height)
  917.     if evenx then
  918.         if y < width then
  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.     elseif z == 0 and eveny then
  950.         z = z + 1
  951.     elseif z == 0 and (not eveny) then
  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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement