UNOBTANIUM

farmer

Jun 12th, 2015
351
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.65 KB | None | 0 0
  1.  
  2.  
  3. local countdown = 900;
  4. local pos = {["x"]=0, ["y"]=0, ["z"]=0, ["r"]=1};
  5. local slot = {};
  6. for i = 1, 16, 1 do
  7.     table.insert(slot, {["state"]="empty"});
  8. end
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15. function save()
  16.     local file = fs.open("farmer","w");
  17.         file.writeLine(string.gsub(textutils.serialize(pos),"\n%S-",""));
  18.         file.writeLine(string.gsub(textutils.serialize(slot),"\n%S-",""));
  19.         file.writeLine(countdown);
  20.     file.close();
  21. end
  22.  
  23. function load()
  24.     if not fs.exists("farmer") then return end
  25.     local file = fs.open("farmer","r")
  26.         pos = textutils.unserialize(file.readLine())
  27.         slot = textutils.unserialize(file.readLine())
  28.         countdown = tonumber(file.readLine());
  29.     file.close();
  30. end
  31.  
  32. function turnLeft()
  33.     if (pos.r == 0) then
  34.         pos.r = 3;
  35.     else
  36.         pos.r = pos.r - 1;
  37.     end
  38.     save();
  39.     turtle.turnLeft();
  40. end
  41.  
  42. function turnRight()
  43.     pos.r = (pos.r + 1) % 4;
  44.     save();
  45.     turtle.turnRight();
  46. end
  47.  
  48. function rotate(r)
  49.     while (not (pos.r == r)) do
  50.         if (r == pos.r-1 or (r == 3 and pos.r == 0)) then
  51.             turnLeft();
  52.         elseif (r == pos.r+1 or (r == 0 and pos.r == 3)) then
  53.             turnRight();
  54.         elseif math.ceil(math.random()) < 0.5 then
  55.             turnLeft()
  56.         else
  57.             turnRight();
  58.         end
  59.     end
  60. end
  61.  
  62. function forward(l)
  63.     for i = 1, l do
  64.         if (pos.r == 0) then
  65.             pos.y = pos.y + 1;
  66.         elseif (pos.r == 1) then
  67.             pos.x = pos.x + 1;
  68.         elseif (pos.r == 2) then
  69.             pos.y = pos.y - 1;
  70.         elseif (pos.r == 3) then
  71.             pos.x = pos.x - 1;
  72.         end
  73.         save();
  74.         while not turtle.forward() do
  75.             os.sleep(1);
  76.         end
  77.     end
  78. end
  79.  
  80. function up()
  81.     pos.z = pos.z + 1;
  82.     save();
  83.     while not turtle.up() do
  84.         os.sleep(1);
  85.     end
  86. end
  87.  
  88. function down()
  89.     pos.z = pos.z - 1;
  90.     save();
  91.     while not turtle.down() do
  92.         os.sleep(1);
  93.     end
  94. end
  95.  
  96.  
  97. function moveToField()
  98.     if not (pos.x == 0 and pos.y == 0 and pos.z == 0 and pos.r == 1) then os.shutdown(); end
  99.     rotate(3);
  100.     forward(1);
  101.     for i = 1, 7 do
  102.         up();
  103.     end
  104.     rotate(1);
  105.     foward(7);
  106.     rotate(0);
  107.     forward(22);
  108.     rotate(1);
  109.     forward(3);
  110.     rotate(0);
  111.     for i = 1, 3 do
  112.         down();
  113.     end
  114. end
  115.  
  116. function moveToBase()
  117.     forward(4);
  118.     rotate(2);
  119.     forward(22);
  120.     rotate(3);
  121.     forward(7);
  122.     rotate(1);
  123.     for i = 1, 7 do
  124.         down();
  125.     end
  126.     forward(1);
  127.     for s = 1, 16 do
  128.         turtle.select(s);
  129.         turtle.drop();
  130.     end
  131. end
  132.  
  133. function harvestPlant()
  134.     turtle.select(1);
  135.     if turtle.detectDown() then
  136.         turtle.digDown();
  137.         for s = 1, 2 do
  138.             local itemdata = turtle.getItemDetail(s);
  139.             if (string.match(itemdata.name, "seed")) then
  140.                 turtle.select(s);
  141.                 turtle.placeDown();
  142.                 break;
  143.             end
  144.         end
  145.         for s = 1, 2 do
  146.             turtle.select(s);
  147.             turtle.transferTo(3);
  148.         end
  149.     end
  150. end
  151.  
  152. function dropSeeds()
  153.     for s = 1, 16 do
  154.         local itemdata = turtle.getItemDetail(s);
  155.         if (string.match(itemdata.name, "seed")) then
  156.             turtle.select(s);
  157.             turtle.drop();
  158.             break;
  159.         end
  160.     end
  161. end
  162.  
  163. function harvest()
  164.     moveToField();
  165.     turtle.select(1);
  166.     for i = 1, 4 do
  167.         for j = 1, 16 do
  168.             harvestPlant();
  169.             forward(1);
  170.         end
  171.         rotate(3);
  172.         forward(1);
  173.         rotate(2);
  174.         for j = 1, 16 do
  175.             harvestPlant();
  176.             forward(1);
  177.         end
  178.         if (i < 4) then
  179.             rotate(3);
  180.             forward(1);
  181.             rotate(0);
  182.         end
  183.     end
  184.     rotate(3);
  185.     dropSeeds();
  186.     rotate(1);
  187.     moveToBase();
  188. end
  189.  
  190.  
  191. function countDown()
  192.     while (true) do
  193.         if (countdown > 0) then
  194.             print(countdown);
  195.             os.sleep(30);
  196.             countdown = countdown - 30;
  197.             save();
  198.         else
  199.             harvest();
  200.             countdown = 900;
  201.             save();
  202.         end
  203.     end
  204. end
  205.  
  206. load();
  207. countDown();
Advertisement
Add Comment
Please, Sign In to add comment