Advertisement
CaptainSpaceCat

Turtle Survival AI

Apr 12th, 2015
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 11.61 KB | None | 0 0
  1. x = 0
  2. y = 0
  3. z = 0
  4.  
  5. --**************************REFUEL************************--
  6.  
  7. function fuelUp()
  8.     if turtle.getFuelLevel() < 100 then
  9.         turtle.select(16)
  10.         turtle.refuel(1)
  11.     end
  12. end
  13.  
  14. function transferFuel()
  15.     turtle.select(16)
  16.     item = turtle.getItemDetail()
  17.     if item and item.name ~= "minecraft:planks" then                                --here too
  18.         for i = 1, 15, 1 do
  19.             turtle.transferTo(i)
  20.         end
  21.         for i = 1, 16, 1 do
  22.             turtle.select(i)
  23.             item = turtle.getItemDetail()
  24.             if item.name == "minecraft:planks" then                           --possibly insert variable here
  25.                 turtle.transferTo(16)
  26.             end
  27.         end
  28.     end
  29. end
  30.  
  31. --*********************TREE BREAKING**********************--
  32.  
  33. function initialtree()
  34.     turtle.dig()
  35.     turtle.forward()
  36.     u1, u2 = turtle.inspectUp()
  37.     while u2.name == "minecraft:log" do
  38.         turtle.digUp()
  39.         turtle.up()
  40.         u1, u2 = turtle.inspectUp()
  41.         y = y + 1
  42.     end
  43.     for i = y, 0, -1 do
  44.         turtle.down()
  45.     end
  46.     turtle.back()
  47.     turtle.select(16)
  48.     turtle.craft()
  49.     turtle.refuel()
  50.     y = 0
  51. end
  52.  
  53. function breaktree()
  54.     turtle.dig()
  55.     turtle.forward()
  56.     u1, u2 = turtle.inspectUp()
  57.     while u2.name == "minecraft:log" do
  58.         turtle.digUp()
  59.         turtle.up()
  60.         u1, u2 = turtle.inspectUp()
  61.         y = y + 1
  62.     end
  63.     for i = y, 0, -1 do
  64.         turtle.down()
  65.     end
  66.     y = 0
  67.     d1, d2 = turtle.inspectDown()
  68.     while d2.name == "minecraft:log" do
  69.         turtle.digDown()
  70.         turtle.down()
  71.         y = y - 1
  72.     end
  73.     for i = y, 0, 1 do
  74.         turtle.up()
  75.     end
  76.     turtle.back()
  77.     y = 0
  78. end
  79.  
  80. function breaktreenoback()
  81.     turtle.dig()
  82.     turtle.forward()
  83.     u1, u2 = turtle.inspectUp()
  84.     while u2.name == "minecraft:log" do
  85.         turtle.digUp()
  86.         turtle.up()
  87.         u1, u2 = turtle.inspectUp()
  88.         y = y + 1
  89.     end
  90.     for i = y, 0, -1 do
  91.         turtle.down()
  92.     end
  93.     y = 0
  94. end
  95.  
  96. function checkDown()
  97. d1, d2 = turtle.inspectDown()
  98.     while d1 == false do
  99.         turtle.down()
  100.         d1, d2 = turtle.inspectDown()
  101.     end
  102. end
  103.  
  104. function checkUp()
  105.     f1, f2 = turtle.inspect()
  106.     u1, u2 = turtle.inspectUp()
  107.     while f1 == true do
  108.         if f2.name ~= "minecraft:log" then
  109.             if u1 == true then
  110.                 turtle.digUp()
  111.             end
  112.             turtle.up()
  113.             f1, f2 = turtle.inspect()
  114.             u1, u2 = turtle.inspectUp()
  115.         else
  116.             breaktreenoback()
  117.         end
  118.     end
  119. end
  120.  
  121. function checkAround()
  122.     if f2.name == "minecraft:log" then
  123.         breaktree()
  124.     end
  125.     turtle.turnLeft()
  126.     f1, f2 = turtle.inspect()
  127.     if f2.name == "minecraft:log" then
  128.         breaktree()
  129.     end
  130.     shell.run("go right 2")
  131.     f1, f2 = turtle.inspect()
  132.     if f2.name == "minecraft:log" then
  133.         breaktree()
  134.     end
  135.     turtle.turnLeft()
  136. end
  137.  
  138. function inspectsurface()
  139.     f1, f2 = turtle.inspect()
  140.     if f2.name == "minecraft:leaves" then
  141.         turtle.dig()
  142.     end
  143.     d1, d2 = turtle.inspectDown()
  144.     if d2.name == "minecraft:leaves" then
  145.         turtle.digDown()
  146.     end
  147.     u1, u2 = turtle.inspectUp()
  148.     if u2.name == "minecraft:leaves" then
  149.         turtle.digUp()
  150.     end
  151.  
  152.     checkDown()
  153.     checkAround()
  154.     checkUp()
  155. end
  156.  
  157. function spiral()
  158.     spiralnum = 0
  159.  
  160.     for i = 1, 9, 1 do
  161.         for i = 0, spiralnum, 1 do
  162.             inspectsurface()
  163.             turtle.forward()
  164.         end
  165.         checkAround()
  166.         turtle.turnLeft()
  167.         spiralnum = spiralnum + 1
  168.         fuelUp()
  169.     end
  170. end
  171.  
  172. --******************************MINING*******************************--
  173.  
  174. function minecobble()
  175.     cobble = 0
  176.     y = 0
  177.  
  178.     while cobble < 15 do
  179.         d1, d2 = turtle.inspectDown()
  180.         if d2.name == "minecraft:stone" then
  181.             cobble = cobble + 1
  182.         end
  183.         turtle.digDown()
  184.         turtle.down()
  185.         y = y - 1
  186.     end
  187.     for i = y, 0, 1 do
  188.         turtle.up()
  189.     end
  190.     y = 0
  191. end
  192.  
  193. function getheight()
  194.     y = 0
  195.     repeat
  196.         d1, d2 = turtle.inspectDown()
  197.         turtle.digDown()
  198.         turtle.down()
  199.         y = y - 1
  200.     until d2.name == "minecraft:bedrock"
  201.     yworld = 3
  202.     for i = yworld, 10, 1 do
  203.         turtle.up()
  204.         yworld = yworld + 1
  205.     end
  206. end
  207.  
  208. function breakorecheck()
  209.     f1, f2 = turtle.inspect()
  210.     u1, u2 = turtle.inspectUp()
  211.     d1, d2 = turtle.inspectDown()
  212.    
  213. --other blocks to do       
  214.     if u2.name == "minecraft:iron_ore" then
  215.         up = 1
  216.     end
  217.     if d2.name == "minecraft:iron_ore" then
  218.         down = 1
  219.     end
  220.  
  221. --other layers to do
  222.     if f2.name == "minecraft:iron_ore" then
  223.         forward = 1
  224.     end
  225.  
  226. --other columns to do
  227.     turtle.turnLeft()
  228.     f1, f2 = turtle.inspect()
  229.     if f2.name == "minecraft:iron_ore" then
  230.         left = 1
  231.     end
  232.     shell.run("go right 2")
  233.     f1, f2 = turtle.inspect()
  234.     if f2.name == "minecraft:iron_ore" then
  235.         right = 1
  236.     end
  237.     turtle.turnLeft()
  238. end
  239.  
  240. function resetvarsore()
  241.     up = 0
  242.     down = 0
  243.     forward = 0
  244.     left = 0
  245.     right = 0
  246. end
  247.  
  248. function oreupdown()
  249.     breakorecheck()
  250.     while up == 1 do
  251.         turtle.digUp()
  252.         turtle.up()
  253.         ud = ud + 1
  254.         breakorecheck()
  255.         u1, u2 = turtle.inspectUp()
  256.         if u2.name ~= "minecraft:iron_ore" then
  257.             up = 0
  258.         end
  259.     end
  260.     while ud ~= 0 do
  261.         turtle.digDown()
  262.         turtle.down()
  263.         ud = ud - 1
  264.     end
  265.     breakorecheck()
  266.     while down == 1 do
  267.         turtle.digDown()
  268.         turtle.down()
  269.         ud = ud - 1
  270.         breakorecheck()
  271.         d1, d2 = turtle.inspectDown()
  272.         if d2.name ~= "minecraft:iron_ore" then
  273.             down = 0
  274.         end
  275.     end
  276.     while ud ~= 0 do
  277.         turtle.digUp()
  278.         turtle.up()
  279.         ud = ud + 1
  280.     end
  281. end
  282.  
  283. --left is positive lr
  284. function oreleft()
  285.     turtle.turnLeft()
  286.     f1, f2 = turtle.inspect()
  287.     while f2.name ~= "minecraft:iron_ore" and u1 == false do
  288.         turtle.up()
  289.         u1, u2 = turtle.inspectUp()
  290.         f1, f2 = turtle.inspect()
  291.         ud = ud + 1
  292.     end
  293.     while f2.name ~= "minecraft:iron_ore" and d1 == false do
  294.         turtle.down()
  295.         d1, d2 = turtle.inspectDown()
  296.         f1, f2 = turtle.inspect()
  297.         ud = ud - 1
  298.     end
  299.     turtle.dig()
  300.     turtle.forward()
  301.     left = 0
  302.     turtle.turnRight()
  303.     oreupdown()
  304.     lr = lr + 1
  305. end
  306.  
  307. --right is negative lr
  308. function oreright()
  309.     turtle.turnRight()
  310.     f1, f2 = turtle.inspect()
  311.     while f2.name ~= "minecraft:iron_ore" and u1 == false do
  312.         turtle.up()
  313.         u1, u2 = turtle.inspectUp()
  314.         f1, f2 = turtle.inspect()
  315.         ud = ud + 1
  316.     end
  317.     while f2.name ~= "minecraft:iron_ore" and d1 == false do
  318.         turtle.down()
  319.         d1, d2 = turtle.inspectDown()
  320.         f1, f2 = turtle.inspect()
  321.         ud = ud - 1
  322.     end
  323.     turtle.dig()
  324.     turtle.forward()
  325.     right = 0
  326.     turtle.turnLeft()
  327.     oreupdown()
  328.     lr = lr - 1
  329. end
  330.  
  331. function oreward()
  332.     turtle.dig()
  333.     turtle.forward()
  334.     breakorecheck()
  335.     f = f + 1
  336. end
  337.  
  338. function breakore()
  339.     f1, f2 = turtle.inspect()
  340.     d1, d2 = turtle.inspectDown()
  341.     u1, u2 = turtle.inspectUp()
  342.  
  343.     f = 0
  344.     lr = 0
  345.     ud = 0
  346.     udx = 0
  347.     orientation = 0
  348.     up = 0
  349.     down = 0
  350.     left = 0
  351.     right = 0
  352.     forward = 0
  353.     oreremaining = 1
  354.     inv = 0
  355.    
  356.     if f2.name == "minecraft:iron_ore" then
  357.         turtle.dig()
  358.         turtle.forward()
  359.         f = f + 1
  360.     elseif d2.name == "minecraft:iron_ore" then
  361.         turtle.digDown()
  362.         turtle.down()
  363.         udx = udx - 1
  364.     elseif u2.name == "minecraft:iron_ore" then
  365.         turtle.digUp()
  366.         turtle.up()
  367.         udx = udx + 1
  368.     end
  369.    
  370.     repeat
  371.         breakorecheck()
  372.         if up == 1 or down == 1 then
  373.             oreupdown()
  374.         end
  375.         repeat
  376.             oreleft()
  377.         until left == 0
  378.         turtle.turnRight()
  379.         while lr ~= 0 do
  380.             turtle.forward()
  381.             lr = lr - 1
  382.         end
  383.         turtle.turnLeft()
  384.         repeat  
  385.             oreright()
  386.         until right == 0
  387.         turtle.turnLeft()
  388.         while lr ~= 0 do
  389.             turtle.forward()
  390.             lr = lr + 1
  391.         end
  392.         turtle.turnRight()
  393.         resetvarsore()
  394.         oreward()
  395.        
  396.         if up + down + left + right + forward == 0 then
  397.             oreremaining = 0
  398.         end
  399.     until oreremaining == 0
  400.     if lr > 0 then
  401.         turtle.turnRight()
  402.         inv = 1
  403.     elseif lr < 0 then
  404.         turtle.turnLeft()
  405.         inv = -1
  406.     elseif lr == 0 then
  407.         shell.run("go right 2")
  408.     end
  409.     if inv ~= 0 then
  410.         for i = lr, 0, inv do
  411.             turtle.dig()
  412.             turtle.forward()
  413.         end
  414.     end
  415.     if inv == 1 then
  416.         turtle.turnRight()
  417.     elseif inv == -1 then
  418.         turtle.turnLeft()
  419.     end
  420.     while f ~= 0 do
  421.         turtle.dig()
  422.         turtle.forward()
  423.         f = f - 1
  424.     end
  425.     if udx > 0 then
  426.         turtle.digDown()
  427.         turtle.down()
  428.         udx = 0
  429.     elseif udx < 0 then
  430.         turtle.digUp()
  431.         turtle.up()
  432.     end
  433.     shell.run("go right 2")
  434. end
  435.  
  436. function inspectOre()
  437.     f1, f2 = turtle.inspect()
  438.     u1, u2 = turtle.inspectUp()
  439.     d1, d2 = turtle.inspectDown()
  440.  
  441.     if u2.name == "minecraft:iron_ore" then
  442.         breakore()
  443.     end
  444.     if d2.name == "minecraft:iron_ore" then
  445.         breakore()
  446.     end
  447.     if f2.name == "minecraft:iron_ore" then
  448.         breakore()
  449.     end
  450.     turtle.turnLeft()
  451.     f1, f2 = turtle.inspect()
  452.     if f2.name == "minecraft:iron_ore" then
  453.         breakore()
  454.     end
  455.     shell.run("go right 2")
  456.     f1, f2 = turtle.inspect()
  457.     if f2.name == "minecraft:iron_ore" then
  458.         breakore()
  459.     end
  460.     turtle.turnLeft()
  461. end
  462.  
  463. function checkAroundOre()
  464.     if f2.name == "minecraft:iron_ore" then
  465.         breakore()
  466.     end
  467.     turtle.turnLeft()
  468.     f1, f2 = turtle.inspect()
  469.     if f2.name == "minecraft:iron_ore" or "minecraft:redstone_ore" or "minecraft:diamond_ore" then
  470.         breakore()
  471.     end
  472.     shell.run("go right 2")
  473.     f1, f2 = turtle.inspect()
  474.     if f2.name == "minecraft:iron_ore" then
  475.         breakore()
  476.     end
  477.     turtle.turnLeft()
  478. end
  479.  
  480. function spiralOre()
  481.     spiralnum = 0
  482.  
  483.     for i = 1, 9, 1 do
  484.         for i = 0, spiralnum, 1 do
  485.             inspectOre()
  486.             turtle.forward()
  487.         end
  488.         checkAroundOre()
  489.         turtle.turnLeft()
  490.         spiralnum = spiralnum + 1
  491.         fuelUp()
  492.     end
  493. end
  494.  
  495. --*************************CRAFTING RECIPES***************************--
  496.  
  497. function craftplanks()
  498.         slot = 1
  499.  
  500.         for i = 1, 16, 1 do
  501.                 turtle.select(i)
  502.                 item = turtle.getItemDetail()
  503.                 if item then
  504.                         if item.name ~= "minecraft:log" then
  505.                                 turtle.dropUp()
  506.                         else
  507.                                 turtle.transferTo(slot)
  508.                                 slot = slot + 1
  509.                         end
  510.                 end
  511.         end
  512.         for i = 2, 16, 1 do
  513.                 turtle.select(i)
  514.                 turtle.drop()
  515.         end
  516.         turtle.craft()
  517. end
  518.  
  519. function craftchest()
  520.     for i = 1, 16, 1 do
  521.                 turtle.select(i)
  522.                 item = turtle.getItemDetail()
  523.                 if item then
  524.                         if item.name ~= "minecraft:planks" then
  525.                                 turtle.drop()
  526.             else
  527.                 turtle.transferTo(1)
  528.                         end
  529.                 end
  530.         end
  531.     turtle.select(1)
  532.     item = turtle.getItemDetail()
  533.         if item.count > 7 then
  534.                 turtle.select(1)
  535.                 turtle.transferTo(1, 1)
  536.                 turtle.transferTo(2, 1)
  537.                 turtle.transferTo(3, 1)
  538.                 turtle.transferTo(5, 1)
  539.                 turtle.transferTo(7, 1)
  540.                 turtle.transferTo(9, 1)
  541.                 turtle.transferTo(10, 1)
  542.                 turtle.transferTo(11, 1)
  543.                 turtle.select(16)
  544.                 turtle.craft(1)
  545.                 turtle.suck()
  546.         turtle.digUp()
  547.         turtle.placeUp()
  548.         end
  549. end
  550.  
  551. function craftfurnace()
  552.     for i = 1, 16, 1 do
  553.                 turtle.select(i)
  554.                 item = turtle.getItemDetail()
  555.                 if item then
  556.                         if item.name ~= "minecraft:cobblestone" then
  557.                                 turtle.dropUp()
  558.             else
  559.                 turtle.transferTo(1)
  560.                         end
  561.                 end
  562.         end
  563.     turtle.select(1)
  564.     item = turtle.getItemDetail()
  565.         if item.count > 7 then
  566.                 turtle.select(1)
  567.                 turtle.transferTo(1, 1)
  568.                 turtle.transferTo(2, 1)
  569.                 turtle.transferTo(3, 1)
  570.                 turtle.transferTo(5, 1)
  571.                 turtle.transferTo(7, 1)
  572.                 turtle.transferTo(9, 1)
  573.                 turtle.transferTo(10, 1)
  574.                 turtle.transferTo(11, 1)
  575.                 turtle.select(16)
  576.                 turtle.craft(1)
  577.         turtle.dig()
  578.         turtle.forward()
  579.         turtle.dig()
  580.         turtle.place()
  581.         turtle.back()
  582.         end
  583. end
  584.  
  585. --*****************************PROGRAM******************************--
  586.  
  587. initialtree()
  588. spiral()
  589. craftplanks()
  590. craftchest()
  591. minecobble()
  592. craftfurnace()
  593. getheight()
  594. spiralOre()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement