Advertisement
Terrah

Crystal grower turtle

Feb 27th, 2016
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.20 KB | None | 0 0
  1. --[[start setup
  2. facing: input chest
  3. above: output chest
  4. left, right and behind: sorting chests for fluix crystal generation
  5. ]]
  6.  
  7. local downblock = "minecraft:flowing_water";
  8.  
  9. local charged_certus = "appliedenergistics2:item.ItemMultiMaterial";
  10. local nether_quartz = "minecraft:quartz";
  11. local redstone = "minecraft:redstone";
  12.  
  13. function IsRedstone(data)
  14.     return data.name==redstone;
  15. end
  16.  
  17. function IsNetherQuartz(data)
  18.     return data.name==nether_quartz;
  19. end
  20.  
  21. function IsChargedQuartz(data)
  22.     return data.name==charged_certus and data.damage==1
  23. end
  24.  
  25. function IsFluixCreator(data)
  26.  
  27.     if  IsNetherQuartz(data) or
  28.         IsRedstone(data) or
  29.         IsChargedQuartz(data)
  30.     then
  31.         return true;
  32.     else
  33.         return false;
  34.     end
  35. end
  36.  
  37. function PutDownFluixMaterial()
  38.  
  39.     print("Creating fluix crystals");
  40.  
  41.     local data=nil;
  42.     local wasputdown = false;
  43.  
  44.     turtle.select(1);
  45.  
  46.     if not GetLeft() then
  47.         print("Failed to grab left");
  48.         return;
  49.     end
  50.  
  51.     turtle.select(2);
  52.  
  53.     if not GetRight() then
  54.         print("Failed to grab right");
  55.         SortFluix();
  56.         return;
  57.     end
  58.  
  59.     turtle.select(3);
  60.  
  61.     if not GetBack() then
  62.         print("Failed to grab back");
  63.         SortFluix();
  64.         return;
  65.     end
  66.  
  67.     for n=1,3 do
  68.  
  69.         data = turtle.getItemDetail(n);
  70.         if data then
  71.  
  72.             if IsFluixCreator(data) then
  73.                 turtle.select(n);
  74.                 turtle.dropDown();
  75.                 wasputdown=true;
  76.             end
  77.         end
  78.     end
  79.  
  80.     if wasputdown then
  81.         print("put down fluix creation material, waiting 10 seconds");
  82.         os.sleep(10);
  83.     end
  84.  
  85.     return wasputdown;
  86. end
  87.  
  88. function SuckUpAll()
  89.  
  90.     print("Sucking up all seeds");
  91.  
  92.     local sucked = 0;
  93.  
  94.     for n=1,16 do
  95.         turtle.select(n);
  96.         if not turtle.suckDown() then
  97.             break;
  98.         else
  99.             sucked = sucked + 1;
  100.         end
  101.     end
  102.  
  103.     SortFluix();
  104.  
  105.     return sucked;
  106. end
  107.  
  108. function GetItemIsAE2(name)
  109.     return type(tostring(name):find(ae2,1,true))~="nil";
  110. end
  111.  
  112. function ShouldBePutDown(data)
  113.  
  114.     return data.name=="appliedenergistics2:item.ItemCrystalSeed";
  115. end
  116.  
  117. function EmptyCompleted()
  118.  
  119.     print("Checking inventory for completed crystals");
  120.  
  121.     local data=nil;
  122.  
  123.     for n=1,16 do
  124.  
  125.         data = turtle.getItemDetail(n);
  126.  
  127.         if data then
  128.  
  129.             if IsFluixCreator(data) then
  130.  
  131.                 print("Putting back fluix creation material into front chest");
  132.  
  133.                 turtle.select(n);
  134.                 if not turtle.drop() then
  135.                     print("front is full, dropping fluix creator up instead");
  136.                     turtle.dropUp();
  137.                 end
  138.  
  139.             elseif not ShouldBePutDown(data) then
  140.                 print(data.name..":"..tostring(data.damage).." is done or not a seed");
  141.                 turtle.select(n);
  142.                 turtle.dropUp();
  143.             else
  144.                 print(data.name..":"..tostring(data.damage).." is not done, putting down");
  145.                 turtle.select(n);
  146.                 turtle.dropDown();
  147.             end
  148.         end
  149.     end
  150. end
  151.  
  152. function StackDuplicates()
  153.  
  154.     local selected = turtle.getSelectedSlot();
  155.     local inslot = turtle.getItemDetail();
  156.     local cursor = nil;
  157.  
  158.     if not inslot then
  159.         return true;
  160.     end
  161.  
  162.     for n=1,16 do
  163.  
  164.         if n~= selected then
  165.  
  166.             cursor = turtle.getItemDetail(n);
  167.  
  168.             if cursor and cursor.count <= 64 and cursor.name==inslot.name and cursor.damage==inslot.damage then
  169.  
  170.                 turtle.transferTo(n);
  171.                 inslot = turtle.getItemDetail();
  172.                 if not inslot then
  173.                     return true;
  174.                 end
  175.             end
  176.         end
  177.     end
  178.  
  179.     return false;
  180. end
  181.  
  182. function GetLeft()
  183.  
  184.     turtle.turnLeft();
  185.     local ret = turtle.suck();
  186.     turtle.turnRight();
  187.     return ret;
  188. end
  189.  
  190. function GetRight()
  191.  
  192.     turtle.turnRight();
  193.     local ret = turtle.suck();
  194.     turtle.turnLeft();
  195.     return ret;
  196. end
  197.  
  198. function GetBack()
  199.  
  200.     turtle.turnRight();
  201.     turtle.turnRight();
  202.     local ret = turtle.suck();
  203.     turtle.turnRight();
  204.     turtle.turnRight();
  205.     return ret;
  206. end
  207.  
  208. function PutLeft()
  209.  
  210.     turtle.turnLeft();
  211.     turtle.drop();
  212.     turtle.turnRight();
  213. end
  214.  
  215. function PutRight()
  216.  
  217.     turtle.turnRight();
  218.     turtle.drop();
  219.     turtle.turnLeft();
  220. end
  221.  
  222. function PutBack()
  223.  
  224.     turtle.turnRight();
  225.     turtle.turnRight();
  226.     turtle.drop();
  227.     turtle.turnRight();
  228.     turtle.turnRight();
  229. end
  230.  
  231. function SortFluix()
  232.  
  233.     local data = nil;
  234.  
  235.     for n=1,16 do
  236.  
  237.         turtle.select(n);
  238.         data = turtle.getItemDetail();
  239.  
  240.         if data then
  241.  
  242.             if IsRedstone(data) then
  243.                 PutLeft();
  244.             elseif IsNetherQuartz(data) then
  245.                 PutRight();
  246.             elseif IsChargedQuartz(data) then
  247.                 PutBack()
  248.             end
  249.         end
  250.     end
  251. end
  252.  
  253. function GetNewStock()
  254.  
  255.     local gotsomething = false;
  256.     local data = nil;
  257.     local testedfluix = false;
  258.  
  259.     while true do
  260.  
  261.         for n=1,16 do
  262.  
  263.             turtle.select(n);
  264.             data = turtle.getItemDetail();
  265.  
  266.             if data then
  267.                 gotsomething = true;
  268.             elseif turtle.suck() then
  269.                 gotsomething = true;
  270.                 if StackDuplicates() then
  271.                     n = n - 1;
  272.                 end
  273.             else
  274.                 break;
  275.             end
  276.         end
  277.  
  278.         if gotsomething then
  279.             SortFluix();
  280.             return;
  281.         else
  282.             print("Need new stock, put seeds in a chest infront of me (or into me)");
  283.  
  284.             if testedfluix then
  285.                 os.sleep(5);
  286.             elseif PutDownFluixMaterial() then
  287.                 return;
  288.             else
  289.                 testedfluix=true;
  290.             end
  291.         end
  292.     end
  293. end
  294.  
  295. print("Crystal program starting...");
  296. if SuckUpAll() <= 0 then
  297.     GetNewStock();
  298. end
  299.  
  300. while true do
  301.  
  302.     EmptyCompleted();
  303.     print("Sleeping for 10 seconds...");
  304.     print("checking seeds...");
  305.     os.sleep(10);
  306.     if SuckUpAll() <= 0 then
  307.  
  308.         while PutDownFluixMaterial() do
  309.             print("More...");
  310.         end
  311.  
  312.         GetNewStock();
  313.     end
  314. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement