largeNumberGoeshere

ingotCrafter.lua

May 16th, 2021 (edited)
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.90 KB | None | 0 0
  1. -- take nuggets and craft them into ingots
  2.  
  3.  
  4. function setup()
  5.     -- the sides to input and output
  6.     suckFromChest = turtle.suckDown   --input chest
  7.     insertToChest = turtle.dropUp --output chest
  8.     rejectToChest = turtle.dropDown   --left over nuggets output (recomended same as input)
  9.     turtle.select(1)
  10.  
  11.     validNuggets =
  12.     {
  13.         "nugget",
  14.         "nugget_copper",
  15.         "nugget_osmium",
  16.         "minecraft:charcoal",
  17.         "nugget_uranium",
  18.         "nugget_refined_obsidian",
  19.         "nugget_bronze",
  20.         "nugget_refined_glowstone",
  21.         "nugget_steel",
  22.         "nugget_tin",
  23.         "nugget_lead"
  24.     }
  25.    
  26. end
  27.  
  28.  
  29. function ensureEmpty()
  30.     for i=1,16 do
  31.         count = turtle.getItemCount(i)
  32.         if count > 0 then
  33.             turtle.select(i)
  34.             rejectToChest()
  35.         end
  36.     end
  37.     --print("emptied")
  38. end
  39.  
  40. function getSlotsEmpty()
  41.     local emptySlots = 16
  42.     for i=1,16 do
  43.         local n = turtle.getItemCount(i)
  44.         if n > 1 then
  45.             emptySlots = emptySlots-1
  46.         end
  47.     end
  48.     return emptySlots
  49. end
  50.  
  51. function isItemEndingWithInSlot(slot,itemId)
  52.     local detailError = {name = -1}
  53.        
  54.     local detail =
  55.         turtle.getItemDetail(slot)
  56.         or detailError
  57.    
  58.     local name = detail.name            
  59.     local nameEnding = string.sub(name, -string.len(itemId),-1)
  60.    
  61.     --print(itemID)
  62.     --print(nameEnding)
  63.    
  64.     if itemId ~= nameEnding then
  65.         return false
  66.     else
  67.         return true
  68.     end
  69. end
  70.  
  71. --validNuggets
  72. function isValidNugget(slot)
  73.     for i,item in pairs(validNuggets) do
  74.         local val = isItemEndingWithInSlot(slot,item)
  75.        
  76.         --print(val)
  77.         --print(i)
  78.         --print(item)
  79.         if val then return true end
  80.     end
  81.     return false
  82. end
  83.  
  84.  
  85.  function checkForNugget()
  86.         for i=1,16 do
  87.                         --turtle.select(i)
  88.                         local items = turtle.getItemCount(i)
  89.                         if items>9 then
  90.                                 if isValidNugget(i) then
  91.                                     --print("found valid nugget")
  92.                                     return true
  93.                                 end
  94.                         end
  95.                 end
  96.  end
  97.  
  98.  
  99. function fillInternalInv()
  100.         turtle.select(1)
  101.     while true do
  102.         local e = getSlotsEmpty()
  103.         local s = suckFromChest()
  104.        
  105.         --print(e)
  106.         --print(s)
  107.        
  108.         if e == 0 then return end
  109.         if s == false then return end              
  110.         if checkForNugget() == true then return end    
  111.     end    
  112. end
  113.  
  114. function getItems()
  115.     ensureEmpty()
  116.     fillInternalInv()    
  117. end
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125. function ejectWrongItems()
  126.     for i=1,16 do
  127.         if turtle.getItemCount(i) > 0 then
  128.             local isNugget = isValidNugget(i)
  129.             --[[isItemEndingWithInSlot(
  130.                 i,"nugget"
  131.             )
  132.             or
  133.             isItemEndingWithInSlot(
  134.                 i,"nugget_copper"
  135.             )
  136.             --]]
  137.            
  138.             if not isNugget then
  139.                 turtle.select(i)
  140.                 insertToChest()
  141.             elseif isNugget and turtle.getItemCount(i)<9 then
  142.                 turtle.select(i)
  143.                 rejectToChest()
  144.            
  145.             end        
  146.         end
  147.     end
  148. end
  149.  
  150. function fillFirstSlot()
  151.     for i=1,16 do
  152.         if turtle.getItemCount(i) > 0 then
  153.             turtle.select(i)
  154.             turtle.transferTo(1)
  155.             return {longWait = false}
  156.         end
  157.     end
  158.    
  159.     print("warning: failed to find enough of a valid item")
  160.     return {longWait = true}
  161. end
  162.  
  163. function ejectElse()
  164.     for i=2,16 do
  165.         if turtle.getItemCount(i) > 0 then
  166.            turtle.select(i)
  167.            rejectToChest()
  168.         end    
  169.     end
  170. end
  171.        
  172. function alignItems()
  173.     local slot = 1
  174.     turtle.select(slot)
  175.  
  176.     local perSlot  =
  177.         string.sub(
  178.             turtle.getItemCount(slot)/9,
  179.         -0,1)
  180.     perSlot = tonumber(perSlot)  
  181.    
  182.     slots = {1,2,3,5,6,7,9,10,11}
  183.     for i,v in pairs(slots) do
  184.         turtle.transferTo(v,perSlot)
  185.     end
  186.    
  187.     local maxCrafts = perSlot
  188.    
  189.     return maxCrafts
  190. end
  191.  
  192.  
  193. function organizeItems()
  194.     ejectWrongItems()
  195.     waitT = fillFirstSlot()
  196.     ejectElse()
  197.     maxCrafts = alignItems()
  198.     return maxCrafts,waitT    
  199. end
  200.  
  201. function craftItems(maxCrafts)
  202.     turtle.craft(maxCrafts)
  203. end
  204.  
  205. function depositItems()
  206.     for i=1,16 do
  207.         local notEmpty = turtle.getItemCount(i) > 0
  208.         if notEmpty then
  209.             turtle.select(i)
  210.            
  211.             local typeNugget = isValidNugget
  212.             if typeNugget then
  213.                 rejectToChest()
  214.             else
  215.                 insertToChest()
  216.             end
  217.         end
  218.    
  219.     end
  220. end
  221.  
  222. function main()
  223. --------------------
  224.     --isItemEndingWithInSlot("nugget")
  225.     getItems()
  226.     organizeItems()
  227.     craftItems()
  228.     depositItems()
  229.  
  230. ---------------------
  231. end
  232.  
  233. setup()
  234. while true do
  235.     main()
  236. end
Add Comment
Please, Sign In to add comment