ns09005264

tree-farmer.lua

Oct 24th, 2020 (edited)
480
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local mData = {
  2.     wood = {
  3.         solt = 2
  4.     },
  5.     spaling = {
  6.         solt = 3
  7.     },
  8.     bonemeal = {
  9.         solt = 4
  10.     },
  11.     currLayer = 1
  12. }
  13.  
  14. function action()
  15.     if turtle.detectUp() then
  16.         turtle.digUp();
  17.     end
  18.     if turtle.detect() then
  19.         turtle.dig();
  20.         return true;
  21.     end
  22.     return false;
  23. end
  24.  
  25. function goLayer(layer)
  26.     print("go layer=", layer, ", currLayer=", mData.currLayer);
  27.     local step = layer - mData.currLayer;
  28.     while (mData.currLayer < 50) and (mData.currLayer > 0) do
  29.         if layer == mData.currLayer then
  30.             return true;
  31.         end
  32.         if step < 0 and turtle.down() then
  33.             mData.currLayer = mData.currLayer - 1;
  34.         end
  35.         if step > 0 and turtle.up() then
  36.             mData.currLayer = mData.currLayer + 1;
  37.         end
  38.     end
  39.     return false;
  40. end
  41.  
  42. function compareWood()
  43.     turtle.select(mData.wood.solt);
  44.     return turtle.compare();
  45. end
  46.  
  47. function useBonemeal()
  48.     turtle.select(mData.bonemeal.solt);
  49.     if turtle.getItemCount() > 1 then
  50.         turtle.place();
  51.     end
  52. end
  53.  
  54. function reap(solt)
  55.     local itemData = turtle.getItemDetail(solt);
  56.     for i = 1, 16, 1 do
  57.         print("try get itemData now");
  58.         local currItemData = turtle.getItemDetail(i);
  59.         -- 如果物品存在并且与指定位置的物品相同
  60.         if (currItemData ~= nil) then
  61.             print("this item name =  ", currItemData.name);
  62.             if itemData.name == currItemData.name then
  63.                 local itemCount = turtle.getItemCount(i);
  64.                 print("this item count = ", itemCount);
  65.                 turtle.select(i);
  66.                 if i == solt then
  67.                     turtle.drop(itemCount - 1);
  68.                 end
  69.                 if i ~= solt then
  70.                     turtle.drop(itemCount);
  71.                 end
  72.             end
  73.         end
  74.     end
  75. end
  76.  
  77. function checkFule()
  78.     if turtle.getFuelLevel() ~= "unlimited" and turtle.getFuelLevel() < 1 then
  79.         turtle.select(1);
  80.         turtle.refuel(1);
  81.     end
  82.     if turtle.getFuelLevel() < 1 then
  83.         print("need fuel!!");
  84.         return false;
  85.     end
  86.     return true;
  87. end
  88.  
  89. while true do
  90.     if not checkFule() then
  91.         break;
  92.     end
  93.     turtle.suck(turtle.getItemSpace(mData.bonemeal.solt));
  94.     turtle.turnLeft();
  95.     turtle.turnLeft();
  96.     if not turtle.detect() then -- has block
  97.         turtle.select(mData.spaling.solt);
  98.         turtle.place();
  99.     end
  100.     local useBonemealTimes = 0;
  101.     while true do
  102.         if compareWood() then
  103.             break;
  104.         end
  105.         if useBonemealTimes < 10 then
  106.             useBonemeal();
  107.             useBonemealTimes = useBonemealTimes + 1;
  108.         end
  109.         os.sleep(1);
  110.     end
  111.     if compareWood() then
  112.         for i = 1, 50 do
  113.             if action() then
  114.                 goLayer(mData.currLayer + 1);
  115.             else
  116.                 goLayer(1);
  117.                 break;
  118.             end
  119.         end
  120.     end
  121.     turtle.turnRight();
  122.     reap(mData.wood.solt);
  123.     turtle.turnRight();
  124.     os.sleep(2);
  125. end
RAW Paste Data