Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- take nuggets and craft them into ingots
- function setup()
- -- the sides to input and output
- suckFromChest = turtle.suckDown --input chest
- insertToChest = turtle.dropUp --output chest
- rejectToChest = turtle.dropDown --left over nuggets output (recomended same as input)
- turtle.select(1)
- validNuggets =
- {
- "nugget",
- "nugget_copper",
- "nugget_osmium",
- "minecraft:charcoal",
- "nugget_uranium",
- "nugget_refined_obsidian",
- "nugget_bronze",
- "nugget_refined_glowstone",
- "nugget_steel",
- "nugget_tin",
- "nugget_lead"
- }
- end
- function ensureEmpty()
- for i=1,16 do
- count = turtle.getItemCount(i)
- if count > 0 then
- turtle.select(i)
- rejectToChest()
- end
- end
- --print("emptied")
- end
- function getSlotsEmpty()
- local emptySlots = 16
- for i=1,16 do
- local n = turtle.getItemCount(i)
- if n > 1 then
- emptySlots = emptySlots-1
- end
- end
- return emptySlots
- end
- function isItemEndingWithInSlot(slot,itemId)
- local detailError = {name = -1}
- local detail =
- turtle.getItemDetail(slot)
- or detailError
- local name = detail.name
- local nameEnding = string.sub(name, -string.len(itemId),-1)
- --print(itemID)
- --print(nameEnding)
- if itemId ~= nameEnding then
- return false
- else
- return true
- end
- end
- --validNuggets
- function isValidNugget(slot)
- for i,item in pairs(validNuggets) do
- local val = isItemEndingWithInSlot(slot,item)
- --print(val)
- --print(i)
- --print(item)
- if val then return true end
- end
- return false
- end
- function checkForNugget()
- for i=1,16 do
- --turtle.select(i)
- local items = turtle.getItemCount(i)
- if items>9 then
- if isValidNugget(i) then
- --print("found valid nugget")
- return true
- end
- end
- end
- end
- function fillInternalInv()
- turtle.select(1)
- while true do
- local e = getSlotsEmpty()
- local s = suckFromChest()
- --print(e)
- --print(s)
- if e == 0 then return end
- if s == false then return end
- if checkForNugget() == true then return end
- end
- end
- function getItems()
- ensureEmpty()
- fillInternalInv()
- end
- function ejectWrongItems()
- for i=1,16 do
- if turtle.getItemCount(i) > 0 then
- local isNugget = isValidNugget(i)
- --[[isItemEndingWithInSlot(
- i,"nugget"
- )
- or
- isItemEndingWithInSlot(
- i,"nugget_copper"
- )
- --]]
- if not isNugget then
- turtle.select(i)
- insertToChest()
- elseif isNugget and turtle.getItemCount(i)<9 then
- turtle.select(i)
- rejectToChest()
- end
- end
- end
- end
- function fillFirstSlot()
- for i=1,16 do
- if turtle.getItemCount(i) > 0 then
- turtle.select(i)
- turtle.transferTo(1)
- return {longWait = false}
- end
- end
- print("warning: failed to find enough of a valid item")
- return {longWait = true}
- end
- function ejectElse()
- for i=2,16 do
- if turtle.getItemCount(i) > 0 then
- turtle.select(i)
- rejectToChest()
- end
- end
- end
- function alignItems()
- local slot = 1
- turtle.select(slot)
- local perSlot =
- string.sub(
- turtle.getItemCount(slot)/9,
- -0,1)
- perSlot = tonumber(perSlot)
- slots = {1,2,3,5,6,7,9,10,11}
- for i,v in pairs(slots) do
- turtle.transferTo(v,perSlot)
- end
- local maxCrafts = perSlot
- return maxCrafts
- end
- function organizeItems()
- ejectWrongItems()
- waitT = fillFirstSlot()
- ejectElse()
- maxCrafts = alignItems()
- return maxCrafts,waitT
- end
- function craftItems(maxCrafts)
- turtle.craft(maxCrafts)
- end
- function depositItems()
- for i=1,16 do
- local notEmpty = turtle.getItemCount(i) > 0
- if notEmpty then
- turtle.select(i)
- local typeNugget = isValidNugget
- if typeNugget then
- rejectToChest()
- else
- insertToChest()
- end
- end
- end
- end
- function main()
- --------------------
- --isItemEndingWithInSlot("nugget")
- getItems()
- organizeItems()
- craftItems()
- depositItems()
- ---------------------
- end
- setup()
- while true do
- main()
- end
Add Comment
Please, Sign In to add comment