Advertisement
VADemon

crafting turtle

Oct 18th, 2013
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.60 KB | None | 0 0
  1.  
  2. recipe = {
  3.     [6] = true,  [7] = true, [8] = true,
  4.     [10] = true, [12] = true,
  5.     [14] = true, [15] = true, [16] = true,
  6. }
  7.  
  8. do
  9.     local itemsRequired = 0
  10.     slotMap = {}
  11.     for k, v in pairs(recipe) do
  12.         if v == true then
  13.             itemsRequired = itemsRequired + 1
  14.             slotMap[k] = true
  15.         end
  16.     end
  17.    
  18.     recipe[ "itemsRequired" ] = itemsRequired
  19. end
  20.  
  21. function balanceSlot( slot , source , amount ) -- toSlot, take fromSlot, how much to take?
  22.     --print("balanceslot")
  23.     if turtle.getItemCount(source) >= amount then
  24.         turtle.select( source );
  25.         turtle.transferTo( slot, amount )
  26.    
  27.         return true
  28.     else
  29.         print(turtle.getItemCount(source).. "<" .. tostring(amount))
  30.     end
  31.    
  32.     return false
  33. end
  34.  
  35. function suckFillSlot() -- suck to fill first slot, and distribute exceeding items from the 2 slot
  36.     print("suckfillslot")
  37.     turtle.suckDown()
  38.     if turtle.getItemCount(2) ~= 0 then
  39.         turtle.select(2)
  40.        
  41.         for k, v in pairs(slotMap) do
  42.             if turtle.getItemCount(2) ~= 0 then
  43.                 turtle.select(2);
  44.                 turtle.transferTo(k, math.floor(turtle.getItemCount(2) / recipe.itemsRequired))
  45.             else
  46.                 break
  47.             end
  48.         end
  49.         if turtle.getItemCount(2) ~= 0 then turtle.dropDown() end -- if one item remained
  50.     end
  51. end
  52.  
  53.  
  54. function main()
  55.     suckFillSlot()
  56.     turtle.select(1)
  57.    
  58.     --balance all crafting slots
  59.     for k, v in pairs( slotMap ) do
  60.         if v then
  61.             --print("stack1")
  62.             local nextKey = next( slotMap, k)
  63.            
  64.             if nextKey == nil then nextKey = 1 end
  65.             print("* ["..k.."]"..turtle.getItemCount( k ) .." - ["..k.."]"..turtle.getItemCount( nextKey ))
  66.             if turtle.getItemCount( k ) > turtle.getItemCount( nextKey ) then -- balance the next slot out
  67.                 print("Stack 1:1")
  68.                 sleep(1)
  69.                 if balanceSlot( nextKey , 1, turtle.getItemCount(k) - turtle.getItemCount( nextKey ) )==false then
  70.                     print("Not enough source items, aborting")
  71.                     break
  72.                 end
  73.                
  74.             elseif turtle.getItemCount( k ) < turtle.getItemCount( nextKey ) then
  75.                 print("Stack 1:2")
  76.                 sleep(1)
  77.                 if balanceSlot( k , 1, turtle.getItemCount( nextKey ) - turtle.getItemCount(k) )==false then
  78.                     print("Not enough source items, aborting")
  79.                     break
  80.                 end
  81.                
  82.             end
  83.         end
  84.     end
  85.  
  86.     if turtle.getItemCount(1) > recipe.itemsRequired then
  87.         print("stack2")
  88.         local craftingItemPerSlot = math.floor( turtle.getItemCount(1) / recipe.itemsRequired)
  89.        
  90.         for k, v in pairs( slotMap ) do
  91.             if v == true then
  92.                 balanceSlot( k , 1 , craftingItemPerSlot )
  93.             end
  94.         end
  95.        
  96.         turtle.select(1); turtle.transferTo(6, turtle.getItemCount(1))
  97.         turtle.craft(craftingItemPerSlot)
  98.         turtle.drop()
  99.     else
  100.         print("Not enough items!")
  101.     end
  102. end
  103.  
  104. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement