Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Script by Savage_Me55iah of CraftAU.com.au and Nuqube.co--
- local scriptName, version, pastebinCode = "CC_AutoCrafter", "v1.0", "gECkmMyg"
- --Other Savage_Me55iah scripts @ http://pastebin.com/u/Savage_Me55iah
- --INSTRUCTIONS ON USE--
- --Instruction video on http://youtube.com/savagemessiah5
- --Contact Savage_Me55iah @ CraftAU.com.au or Nuqube.co or http://www.computercraft.info/forums2/ with suggestions/fixes/bugs
- -- CHANGELOG --
- --V1.0
- -- SETUP --
- local tArgs = {...}
- local functionNum = "0"
- do
- update = function(param_functionNum, scriptDetails)
- term.clear()
- print("UPDATING") shell.run("pastebin get "..scriptDetails[2].." update")
- if fs.exists("update") then
- fs.delete(scriptDetails[1]) fs.copy("update", scriptDetails[1]) fs.delete("update") print("UPDATE SUCCESS")
- else
- print("UPDATE FAILED")
- end
- sleep(2) os.reboot()
- end
- end
- if tArgs[1] == "update" then update(functionNum, {scriptName, pastebinCode}) end
- shell.run("sm_API".."\\".."loadAPIs")
- role = {"craft", "stock"}
- termX, termY = term.getSize()
- settings = tablemanip.import("autocrafterSettings")[2] or {
- timer = 0.5,
- inputSides = {false, false, false, false, true, false},
- observe = 3,
- output = 3,
- emptyChest = 6,
- extInput = 1,
- extOutput = 2,
- craftingLoc = {1, 2, 3, 5, 6, 7, 9, 10, 11},
- craftingResults = {4, 8, 12},
- redstoneOutput = 6,
- redstoneInput = 6,
- operation = false,
- role = 1
- }
- facingNum = 1
- generalinfo.chestDirTranslator(functionNum)
- generalInfo = generalinfo.generalInfo
- redstone.setOutput(generalInfo["sides"]["turtle"][settings["redstoneOutput"]], false)
- function dirFacing(param_functionNum, param_function)
- local result, functionNum = {true}, param_functionNum.."/007"
- if booleanmanip.check(functionNum, param_function)[2] == ">" or booleanmanip.check(functionNum, param_function)[2] == "<" then
- if param_function == ">" then facingNum = booleanmanip.quickChoice(functionNum, ((facingNum + 1) > 4), 1, facingNum + 1)[2] end
- if param_function == "<" then facingNum = booleanmanip.quickChoice(functionNum, ((facingNum - 1) < 1), 4, facingNum - 1)[2] end
- end
- facing = generalInfo["cardinalDirections"][facingNum]
- generalinfo.chestDirTranslator(functionNum)
- if booleanmanip.check(functionNum, buttonList["terminal"]["facing"])[1] then
- local text = facing
- if text == "east" or text == "west" then text = text.." " end
- buttonList["terminal"]["facing"]["text"] = text
- buttonmanip.generate(functionNum, "terminal", "facing")
- end
- return result
- end
- craftingData = tablemanip.import("craftingData")[2] or {}
- function wrapper(param)
- local result = false
- result = peripheral.wrap(param) or false
- return result
- end
- function checkEmptyChest(param_functionNum)
- local result, functionNum = {false}, param_functionNum.."/007"
- local lock, tempChest = true, nil
- while lock do
- term.clear() term.setCursorPos(1,1)
- print("Needs empty chest @ "..generalInfo["sides"]["turtle"][settings["emptyChest"]].." to work")
- print("Scanning for empty chest @ "..generalInfo["sides"]["turtle"][settings["emptyChest"]])
- tempChest = wrapper(generalInfo["sides"]["turtle"][settings["emptyChest"]])
- if tempChest ~= false then
- result = tempChest.condenseItems() or false
- result = tempChest.getAllStacks() or false
- if result ~= false then
- if not booleanmanip.check(functionNum, result[1])[1] then
- print("Success: Empty Chest found")
- lock = false
- else
- print("Error: Chest isn't empty")
- end
- print("Error: That is not a valid Inventory")
- end
- else
- print("Error: Peripheral not found")
- end
- os.startTimer(1)
- coroutine.yield()
- end
- return result
- end
- function addItem(param_functionNum, param_data)
- local result, functionNum = {true}, param_functionNum.."/007"
- while setting["operation"] == true do
- coroutine.yield()
- end
- setting["operation"] = true
- checkEmptyChest(functionNum)
- local tempPeripheral, listA, listB, paramMin, paramMax, tempData, num, hold = wrapper(generalInfo["sides"]["turtle"][settings["emptyChest"]]), nil, {}, nil, nil, craftingData, 0, nil
- local lock = true
- while lock do
- term.clear() term.setCursorPos(1,1)
- print("Place observing item in first slot of turtle and hit enter")
- read()
- if turtle.getItemCount(1) >= 1 then lock = false end
- end
- tempPeripheral.pullItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["emptyChest"]]]], 1, 1, 1)
- listA = tempPeripheral.getAllStacks()
- hold = listA[1]["id"]..":"..listA[1]["rawName"]
- tempData[hold] = {["min"] = false, ["max"] = false, ["craftMin"] = {["recipe"] = false, ["materials"] = false, ["results"] = false}, ["craftMax"] = {["recipe"] = false, ["materials"] = false, ["results"] = false}}
- tempPeripheral.pushItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["emptyChest"]]]], 1, 1, 1)
- -- Minium Crafting Data
- term.clear() term.setCursorPos(1,1)
- print("Minium Crafting:")
- print("Type minium quantity to keep stocked or leave blank skip and hit enter")
- tempData[hold]["min"] = tonumber(read()) or false
- if tempData[hold]["min"] ~= false then
- term.clear() term.setCursorPos(1,1)
- print("Minium Crafting:")
- print("Allow multiple crafting? <Y/N>")
- tempData[hold]["craftMin"]["multiple"] = booleanmanip.quickChoice(functionNum, (read():lower() == "y"))[2]
- term.clear() term.setCursorPos(1,1)
- print("Minium Crafting:")
- print("External/Machine craft? <Y/N>")
- tempData[hold]["craftMin"]["external"] = booleanmanip.quickChoice(functionNum, (read():lower() == "y"))[2]
- lock = true
- while lock do
- term.clear() term.setCursorPos(1,1)
- print("Minium Crafting:")
- print("Remove previous setup items")
- print("Place minium craft recipe in top-left 3x3 format")
- print("Place craft results in turtle slots 4, 8 and 12 (correct quantities)")
- print("Hit enter")
- read()
- num = 0
- if turtle.getItemCount(settings["craftingResults"][1]) >= 1 then
- for a,b in pairs(settings["craftingLoc"]) do num = num + turtle.getItemCount(b) end
- end
- if num >= 1 then lock = false end
- end
- for a,b in pairs(settings["craftingLoc"]) do tempPeripheral.pullItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["emptyChest"]]]], b, 64, a) end
- listA = tempPeripheral.getAllStacks()
- tempData[hold]["craftMin"]["materials"], tempData[hold]["craftMin"]["recipe"] = {}, {}
- for a,b in pairs(listA) do
- tempData[hold]["craftMin"]["materials"][listA[a]["id"]..":"..listA[a]["rawName"]] = (tempData[hold]["craftMin"]["materials"][listA[a]["id"]..":"..listA[a]["rawName"]] or 0) + listA[a]["qty"]
- tempData[hold]["craftMin"]["recipe"][a] = {["id"] = listA[a]["id"]..":"..listA[a]["rawName"], ["qty"] = listA[a]["qty"]}
- end
- for a,b in pairs(settings["craftingLoc"]) do tempPeripheral.pushItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["emptyChest"]]]], a, 64, b) end
- for a,b in pairs(settings["craftingResults"]) do tempPeripheral.pullItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["emptyChest"]]]], b, 64, a) end
- listA = tempPeripheral.getAllStacks()
- tempData[hold]["craftMin"]["results"] = {}
- for a,b in pairs(listA) do
- tempData[hold]["craftMin"]["results"][a] = {["id"] = listA[a]["id"]..":"..listA[a]["rawName"], ["qty"] = listA[a]["qty"]}
- end
- for a,b in pairs(settings["craftingResults"]) do tempPeripheral.pushItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["emptyChest"]]]], a, 64, b) end
- end
- -- Maxium Crafting Data
- term.clear() term.setCursorPos(1,1)
- print("Maxium Crafting:")
- print("Type Maxium quantity to keep stocked or leave blank skip and hit enter")
- tempData[hold]["min"] = tonumber(read()) or false
- if tempData[hold]["min"] ~= false then
- term.clear() term.setCursorPos(1,1)
- print("Maxium Crafting:")
- print("Allow multiple crafting? <Y/N>")
- tempData[hold]["craftMax"]["multiple"] = booleanmanip.quickChoice(functionNum, (read():lower() == "y"))[2]
- term.clear() term.setCursorPos(1,1)
- print("Maxium Crafting:")
- print("External/Machine craft? <Y/N>")
- tempData[hold]["craftMax"]["external"] = booleanmanip.quickChoice(functionNum, (read():lower() == "y"))[2]
- lock = true
- while lock do
- term.clear() term.setCursorPos(1,1)
- print("Maxium Crafting:")
- print("Remove previous setup items")
- print("Place Maxium craft recipe in top-left 3x3 format")
- print("Place craft results in turtle slots 4, 8 and 12 (correct quantities)")
- print("Hit enter")
- read()
- num = 0
- if turtle.getItemCount(settings["craftingResults"][1]) >= 1 then
- for a,b in pairs(settings["craftingLoc"]) do num = num + turtle.getItemCount(b) end
- end
- if num >= 1 then lock = false end
- end
- for a,b in pairs(settings["craftingLoc"]) do tempPeripheral.pullItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["emptyChest"]]]], b, 64, a) end
- listA = tempPeripheral.getAllStacks()
- tempData[hold]["craftMax"]["materials"], tempData[hold]["craftMax"]["recipe"] = {}, {}
- for a,b in pairs(listA) do
- tempData[hold]["craftMax"]["materials"][listA[a]["id"]..":"..listA[a]["rawName"]] = (tempData[hold]["craftMax"]["materials"][listA[a]["id"]..":"..listA[a]["rawName"]] or 0) + listA[a]["qty"]
- tempData[hold]["craftMax"]["recipe"][a] = {["id"] = listA[a]["id"]..":"..listA[a]["rawName"], ["qty"] = listA[a]["qty"]}
- end
- for a,b in pairs(settings["craftingLoc"]) do tempPeripheral.pushItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["emptyChest"]]]], a, 64, b) end
- for a,b in pairs(settings["craftingResults"]) do tempPeripheral.pullItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["emptyChest"]]]], b, 64, a) end
- listA = tempPeripheral.getAllStacks()
- tempData[hold]["craftMax"]["results"] = {}
- for a,b in pairs(listA) do
- tempData[hold]["craftMax"]["results"][a] = {["id"] = listA[a]["id"]..":"..listA[a]["rawName"], ["qty"] = listA[a]["qty"]}
- end
- for a,b in pairs(settings["craftingResults"]) do tempPeripheral.pushItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["emptyChest"]]]], a, 64, b) end
- end
- craftingData = tempData
- tablemanip.export("craftingData", craftingData)
- end
- function delItem(param_functionNum, param_data)
- local result, functionNum = {true}, param_functionNum.."/007"
- end
- inputSides, settingsSides, roleChange = nil, nil, nil
- function blankFunction(param_functionNum, ...) local result, functionNum = {true}, param_functionNum.."/007" return result end
- function inputSidesPlacemarker(...) if tostring(inputSides) ~= "nil" then result = inputSides(...) end return result end
- inputSidesNum = nil
- function inputSides(param_functionNum, param_args)
- local result, functionNum = {true}, param_functionNum.."/007"
- if param_args == "<" then
- inputSidesNum = booleanmanip.quickChoice(functionNum, ((inputSidesNum - 1) < 1), table.maxn(generalInfo["sides"]["turtle"]), (inputSidesNum - 1))[2]
- local colorbkg = booleanmanip.quickChoice(functionNum, booleanmanip.check(functionNum, settings["inputSides"][inputSidesNum])[2], "green", "red")[2]
- buttonmanip.add(functionNum, "terminal", "inputSides", generalinfo.stringAdjuster(functionNum, generalInfo["sides"]["turtle"][inputSidesNum]), "white", colorbkg, termX - 8, termY - 7, inputSidesPlacemarker, "select")
- elseif param_args == ">" then
- inputSidesNum = booleanmanip.quickChoice(functionNum, ((inputSidesNum + 1) > table.maxn(generalInfo["sides"]["turtle"])), 1, (inputSidesNum + 1))[2]
- local colorbkg = booleanmanip.quickChoice(functionNum, booleanmanip.check(functionNum, settings["inputSides"][inputSidesNum])[2], "green", "red")[2]
- buttonmanip.add(functionNum, "terminal", "inputSides", generalinfo.stringAdjuster(functionNum, generalInfo["sides"]["turtle"][inputSidesNum]), "white", colorbkg, termX - 8, termY - 7, inputSidesPlacemarker, "select")
- elseif param_args == "select" then
- settings[inputSides][inputSidesNum] = booleanmanip.quickChoice(functionNum, booleanmanip.check(functionNum, settings["inputSides"][inputSidesNum])[2], false, true)[2]
- local colorbkg = booleanmanip.quickChoice(functionNum, booleanmanip.check(functionNum, settings["inputSides"][inputSidesNum])[2], "green", "red")[2]
- buttonmanip.add(functionNum, "terminal", "inputSides", generalinfo.stringAdjuster(functionNum, generalInfo["sides"]["turtle"][inputSidesNum]), "white", colorbkg, termX - 8, termY - 7, inputSidesPlacemarker, "select")
- tablemanip.export("autocrafterSettings", settings)
- elseif param_args == "start" then
- inputSidesNum = 1
- local colorbkg = booleanmanip.quickChoice(functionNum, booleanmanip.check(functionNum, settings["inputSides"][inputSidesNum])[2], "green", "red")[2]
- buttonmanip.add(functionNum, "terminal", "inputSidesLabel", "Inputs:", "white", "blue", termX - 17, termY - 7, blankFunction, "boop")
- buttonmanip.add(functionNum, "terminal", "inputSides<", "< ", "white", "blue", termX - 10, termY - 7, inputSidesPlacemarker, "<")
- buttonmanip.add(functionNum, "terminal", "inputSides", generalinfo.stringAdjuster(functionNum, generalInfo["sides"]["turtle"][inputSidesNum]), "white", colorbkg, termX - 8, termY - 7, inputSidesPlacemarker, "select")
- buttonmanip.add(functionNum, "terminal", "inputSides>", " >", "white", "blue", termX - 2, termY - 7, inputSidesPlacemarker, ">")
- else
- end
- return result
- end
- function settingsSidesPlacemarker(...) if tostring(settingsSides) ~= "nil" then result = settingsSides(...) end return result end
- settingsSidesList = {}
- function settingsSides(param_functionNum, param_args)
- local result, functionNum = {true}, param_functionNum.."/007"
- if param_args[2] == "<" then
- settingsSidesList[param_args[1]] = booleanmanip.quickChoice(functionNum, ((settingsSidesList[param_args[1]] - 1) < 1), table.maxn(generalInfo["sides"]["turtle"]), (settingsSidesList[param_args[1]] - 1))[2]
- local colorbkg = booleanmanip.quickChoice(functionNum, (settings[param_args[1]] == settingsSidesList[param_args[1]]), "green", "red")[2]
- buttonmanip.add(functionNum, "terminal", param_args[1], generalinfo.stringAdjuster(functionNum, generalInfo["sides"]["turtle"][settings[param_args[1]]]), "white", colorbkg, termX - 8, buttonList["terminal"][param_args[1]]["y"], settingsSidesPlacemarker, "select")
- elseif param_args[2] == ">" then
- settingsSidesList[param_args[1]] = booleanmanip.quickChoice(functionNum, ((settingsSidesList[param_args[1]] + 1) > table.maxn(generalInfo["sides"]["turtle"])), 1, (settingsSidesList[param_args[1]] + 1))[2]
- local colorbkg = booleanmanip.quickChoice(functionNum, (settings[param_args[1]] == settingsSidesList[param_args[1]]), "green", "red")[2]
- buttonmanip.add(functionNum, "terminal", param_args[1], generalinfo.stringAdjuster(functionNum, generalInfo["sides"]["turtle"][settings[param_args[1]]]), "white", colorbkg, termX - 8, buttonList["terminal"][param_args[1]]["y"], settingsSidesPlacemarker, "select")
- elseif param_args[2] == "select" then
- settings[param_args[1]] = settingsSidesList[param_args[1]]
- local colorbkg = booleanmanip.quickChoice(functionNum, (settings[param_args[1]] == settingsSidesList[param_args[1]]), "green", "red")[2]
- buttonmanip.add(functionNum, "terminal", param_args[1], generalinfo.stringAdjuster(functionNum, generalInfo["sides"]["turtle"][settings[param_args[1]]]), "white", colorbkg, termX - 8, buttonList["terminal"][param_args[1]]["y"], settingsSidesPlacemarker, "select")
- tablemanip.export("autocrafterSettings", settings)
- elseif param_args[2] == "start" then
- settingsSidesList[param_args[1]] = settings[param_args[1]]
- local colorbkg = booleanmanip.quickChoice(functionNum, (settings[param_args[1]] == settingsSidesList[param_args[1]]), "green", "red")[2]
- buttonmanip.add(functionNum, "terminal", param_args[1].."Label", param_args[1]..":", "white", "blue", (termX - 10) - string.len(param_args[1]..":"), termY - table.maxn(settingsSidesList) - 1, blankFunction, {param_args[1], "boop"})
- buttonmanip.add(functionNum, "terminal", param_args[1].."<", "< ", "white", "blue", termX - 10, termY - table.maxn(settingsSidesList) - 1, settingsSidesPlacemarker, {param_args[1], "<"})
- buttonmanip.add(functionNum, "terminal", param_args[1], generalinfo.stringAdjuster(functionNum, generalInfo["sides"]["turtle"][settings[param_args[1]]]), "white", "green", termX - 8, termY - table.maxn(settingsSidesList) - 1, settingsSidesPlacemarker, {param_args[1], "select"})
- buttonmanip.add(functionNum, "terminal", param_args[1]..">", " >", "white", "blue", termX - 2, termY - table.maxn(settingsSidesList) - 1, settingsSidesPlacemarker, {param_args[1], ">"})
- else
- end
- return result
- end
- function roleChangePlaceMarker(...) if tostring(roleChange) ~= "nil" then result = roleChange(...) end return result end
- roleNum = nil
- function roleChange(param_functionNum, param_args)
- local result, functionNum = {true}, param_functionNum.."/007"
- if param_args == "<" then
- roleNum = booleanmanip.quickChoice(functionNum, ((roleNum - 1) < 1), table.maxn(role), (roleNum - 1))[2]
- local colorbkg = booleanmanip.quickChoice(functionNum, (settings["role"] == role[roleNum]), "green", "red")[2]
- buttonmanip.add(functionNum, "terminal", "role", role[roleNum].." ", "white", colorbkg, termX - 8, termY - 1, roleChangePlaceMarker, "select")
- elseif param_args == ">" then
- roleNum = booleanmanip.quickChoice(functionNum, ((roleNum + 1) > table.maxn(generalInfo["sides"]["turtle"])), 1, (roleNum + 1))[2]
- local colorbkg = booleanmanip.quickChoice(functionNum, (settings["role"] == role[roleNum]), "green", "red")[2]
- buttonmanip.add(functionNum, "terminal", "role", role[roleNum].." ", "white", colorbkg, termX - 8, termY - 1, roleChangePlaceMarker, "select")
- elseif param_args == "select" then
- settings["role"] = roleNum
- local colorbkg = booleanmanip.quickChoice(functionNum, (settings["role"] == role[roleNum]), "green", "red")[2]
- buttonmanip.add(functionNum, "terminal", "role", role[roleNum].." ", "white", colorbkg, termX - 8, termY - 1, roleChangePlaceMarker, "select")
- tablemanip.export("autocrafterSettings", settings)
- elseif param_args == "start" then
- roleNum = 1
- local colorbkg = booleanmanip.quickChoice(functionNum, (settings["role"] == role[roleNum]), "green", "red")[2]
- buttonmanip.add(functionNum, "terminal", "roleLabel", "Role:", "white", "blue", termX - 15, termY - 1, blankFunction, "boop")
- buttonmanip.add(functionNum, "terminal", "role<", "< ", "white", "blue", termX - 10, termY - 1, roleChangePlaceMarker, "<")
- buttonmanip.add(functionNum, "terminal", "role", role[roleNum].." ", "white", colorbkg, termX - 8, termY - 1, roleChangePlaceMarker, "select")
- buttonmanip.add(functionNum, "terminal", "role>", " >", "white", "blue", termX - 2, termY - 1, roleChangePlaceMarker, ">")
- else
- end
- return result
- end
- buttonmanip.add(functionNum, "terminal", "addItem", " Add Item ", "white", "green", termX - 10, termY - 10, addItem, "blank")
- buttonmanip.add(functionNum, "terminal", "delItem", " Del Item ", "white", "red", termX - 10, termY - 9, addItem, "blank")
- buttonmanip.add(functionNum, "terminal", "update", " Update ", "white", "cyan", termX - 10, termY - 8, update, {scriptName, pastebinCode})
- inputSides(functionNum, "start")
- settingsSides(functionNum, {"observe", "start"})
- settingsSides(functionNum, {"output", "start"})
- settingsSides(functionNum, {"emptyChest", "start"})
- settingsSides(functionNum, {"extInput", "start"})
- settingsSides(functionNum, {"extOutput", "start"})
- roleChange(functionNum, {"role", "start"})
- function crafting(param_functionNum, param_name, param_target, param_recipe, param_qty)
- local result, functionNum = {true}, param_functionNum.."/007"
- local tempPeripheral, inputData, materialsData, requiredMaterials, gatheringMaterials, matReturn, trueQty = false, {}, {}, true, true, {}, 1
- -- get the item lists from the input chests
- for a,b in pairs(settings["inputSides"]) do
- if b then
- tempPeripheral = wrapper(generalInfo["sides"]["turtle"][a])
- if tempPeripheral ~= false then
- tempPeripheral.condenseItems()
- inputData[generalInfo["sides"]["turtle"][a]] = tempPeripheral.getAllStacks()
- end end end
- -- consolidate input data
- for a,b in pairs(inputData) do
- for c,d in pairs(inputData[a]) do
- materialsData[inputData[a][c]["id"]..":"..inputData[a][c]["rawName"]] = (materialsData[inputData[a][c]["id"]..":"..inputData[a][c]["rawName"]] or 0) + inputData[a][c]["qty"]
- end end
- -- work out if qty if affected by crafting results
- if param_qty > 1 then
- if craftingData[param_name][param_recipe]["results"][1]["id"] == param_name then
- trueQty = math.floor(param_qty / craftingData[param_name][param_recipe]["results"][1]["qty"]) + 1
- else
- trueQty = param_qty
- end
- end
- -- work out materials required under qty
- local craftable, uncraftable, tempMaterialsData, tempCraftable = false, false, {}, true
- while craftable == false and uncraftable == false do
- for a,b in pairs(craftingData[param_name][param_recipe]["materials"]) do tempMaterialsData[a] = trueQty * b end
- tempCraftable = true
- for a,b in pairs(tempMaterialsData[param_name][param_recipe]["materials"]) do
- if tostring(materialsData[a]) ~= "nil" then
- tempCraftable = booleanmanip.quickChoice(functionNum, (materialsData[a] >= b), tempCraftable, false)[2]
- else
- tempCraftable = false
- end end
- craftable = tempCraftable
- if not craftable then trueQty = trueQty - 1 end
- if trueQty == 0 then uncraftable = true end
- end
- -- crafting
- if craftable then
- -- gathering the materials
- for y,z in pairs(craftingData[param_name][param_recipe]["recipe"]) do
- qtyRequired = craftingData[param_name][param_recipe]["recipe"][y]["qty"] * trueQty
- inputData = {}
- for a,b in pairs(settings["inputSides"]) do
- if b then
- tempPeripheral = wrapper(generalInfo["sides"]["turtle"][a])
- if tempPeripheral ~= false then
- tempPeripheral.condenseItems()
- inputData[generalInfo["sides"]["turtle"][a]] = tempPeripheral.getAllStacks()
- end end end
- for a,b in pairs(inputData) do
- if qtyRequired ~= 0 then
- for c,d in pairs(inputData[a]) do
- if qtyRequired ~= 0 then
- if inputData[a][c]["id"]..":"..inputData[a][c]["rawName"] == craftingData[param_name][param_recipe]["recipe"][y]["id"] then
- tempPeripheral, matReturn[y] = wrapper(a), a
- qtyRequired = qtyRequired - (tempPeripheral.pushItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][a]]], c, qtyRequired, settings["craftingLoc"][y]) or 0)
- end end end end end end
- turtle.select(4)
- -- checking for correct amounts
- done = true
- for y,z in pairs(craftingData[param_name][param_recipe]["recipe"]) do
- -- print(y..":"..turtle.getItemCount(y)..":"..data[paramA][paramB]["recipe"][y]["qty"])
- if turtle.getItemCount(setttings["craftingLoc"][y]) == (craftingData[param_name][param_recipe]["recipe"][y]["qty"] * trueQty) then
- done = done
- else
- done = false
- end
- end
- -- craft (finally)
- if done then
- if craftingData[param_name][param_recipe]["external"] then
- tempPeripheral = wrapper(generalInfo["sides"]["turtle"][settings["extInput"]])
- for a,b in pairs(setttings["craftingLoc"]) do
- tempPeripheral.pullItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["extInput"]]]], b, 64)
- end
- tempPeripheral = wrapper(generalInfo["sides"]["turtle"][settings["extOutput"]])
- local waiting, craftResultData = true, {}
- while waiting do
- tempPeripheral.condenseItems()
- craftResultData = {[3] = true}
- craftResultData[1] = tempPeripheral.getAllStacks()
- for a,b in pairs(craftResultData[1]) do
- for c,d in pairs(craftResultData[1][a]) do
- craftResultData[2][craftResultData[1][a][c]["id"]..":"..craftResultData[1][a][c]["rawName"]] = (craftResultData[2][craftResultData[1][a][c]["id"]..":"..craftResultData[1][a][c]["rawName"]] or 0) + craftResultData[1][a][c]["qty"]
- end end
- for a,b in pairs(craftingData[param_name][param_recipe]["results"]) do
- craftResultData[3] = booleanmanip.quickChoice(functionNum, craftResultData[2][craftingData[param_name][param_recipe]["results"]["id"]] >= (craftingData[param_name][param_recipe]["results"]["qty"] * trueQty), craftResultData[3], false)[2]
- end
- if craftResultData[3] then waiting = false else coroutine.yield() end
- end
- for a,b in pairs(craftResultData[1]) do
- tempPeripheral = wrapper(generalInfo["sides"]["turtle"][settings["extOutput"]])
- tempPeripheral.pushItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["extOutput"]]]], a, 64, 4)
- tempPeripheral = wrapper(generalInfo["sides"]["turtle"][settings["output"]])
- tempPeripheral.pushItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["output"]]]], 4, 64)
- end
- else
- result = turtle.craft()
- end
- end
- for a,b in pairs(matReturn) do
- tempPeripheral = wrapper(matReturn[a])
- tempPeripheral.pullItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][matReturn[a]]]], craftingLoc[a], 64)
- end
- tempPeripheral = wrapper(generalInfo["sides"]["turtle"][settings["output"]])
- for a,b in pairs(settings["craftingResults"]) do
- tempPeripheral.pullItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["output"]]]], b, 64)
- end
- end
- return result
- end
- function stockUnload(param_functionNum, param_name, param_qty)
- local result, functionNum = {true}, param_functionNum.."/007"
- local tempPeripheral, qtyRequired = wrapper(generalInfo["sides"]["turtle"][settings["extOutput"]]), param_qty
- tempPeripheral.condenseItems()
- local inputData = tempPeripheral.getAllStacks()
- for a,b in pairs(inputData) do
- if qtyRequired ~= 0 and inputData[a]["qty"] > 1 then
- if inputData[a]["id"]..":"..inputData[a]["rawName"] == param_name then
- local availableQty = booleanmanip.quickChoice(functionNum, (inputData[a]["qty"] > qtyRequired), qtyRequired, (inputData[a]["qty"] - 1))[2]
- tempPeripheral = wrapper(generalInfo["sides"]["turtle"][settings["extOutput"]])
- qtyRequired = qtyRequired - (tempPeripheral.pushItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["extOutput"]]]], a, availableQty, 1) or 0)
- tempPeripheral = wrapper(generalInfo["sides"]["turtle"][settings["output"]])
- tempPeripheral.pushItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["output"]]]], 1, 64)
- end end end
- return result
- end
- function stockLoad(param_functionNum, param_name, param_qty)
- local result, functionNum = {true}, param_functionNum.."/007"
- local tempPeripheral, qtyRequired = wrapper(generalInfo["sides"]["turtle"][settings["observe"]]), param_qty
- tempPeripheral.condenseItems()
- local inputData = tempPeripheral.getAllStacks()
- for a,b in pairs(inputData) do
- if qtyRequired ~= 0 and inputData[a]["qty"] > 1 then
- if inputData[a]["id"]..":"..inputData[a]["rawName"] == param_name then
- local availableQty = booleanmanip.quickChoice(functionNum, (inputData[a]["qty"] > qtyRequired), qtyRequired, (inputData[a]["qty"] - 1))[2]
- tempPeripheral = wrapper(generalInfo["sides"]["turtle"][settings["observe"]])
- qtyRequired = qtyRequired - (tempPeripheral.pushItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["observe"]]]], a, availableQty, 1) or 0)
- tempPeripheral = wrapper(generalInfo["sides"]["turtle"][settings["extInput"]])
- tempPeripheral.pushItemIntoSlot(generalInfo["chestDirTranslator"][generalInfo["sidesReverse"]["turtle"][generalInfo["sides"]["turtle"][settings["extInput"]]]], 1, 64)
- end end end
- return result
- end
- function scan(param_functionNum)
- local result, functionNum = {true}, param_functionNum.."/007"
- local chest tempListA, tempListB, qty = wrapper(generalInfo["sides"]["turtle"][settings["observe"]]), nil, {}, nil
- for a,b in pairs(craftingData) do
- chest.condenseItems()
- tempListA, tempListB = chest.getAllStacks(), {}
- for c,d in pairs(tempListA) do tempListB[tempListA[a]["id"]..":"..tempListA[c]["rawName"]] = (tempListB[tempListA[c]["id"]..":"..tempListA[c]["rawName"]] or 0) + tempListA[c]["qty"] end
- if craftingData[a]["min"] ~= false then
- if tostring(tempListB[a]) == "nil" or tempListB[a] < craftingData[a]["min"] then
- qty = 1
- if craftingData[a]["craftMin"]["multiple"] then qty = craftingData[a]["min"] - (tempListB[a] or 0) end
- if settings["role"] == 1 then crafting(functionNum, a, "min", "craftMin", qty)
- elseif settings["role"] == 2 then stockUnload(functionNum, a, qty)
- end
- end
- if tostring(tempListB[a]) ~= "nil" and tempListB[a] > craftingData[a]["max"] then
- qty = 1
- if craftingData[a]["craftMax"]["multiple"] then qty = craftingData[a]["max"] - (tempListB[a] or 0) end
- if settings["role"] == 1 then crafting(functionNum, a, "max", "craftMax", qty)
- elseif settings["role"] == 2 then stockLoad(functionNum, a, qty)
- end
- end
- end
- end
- return result
- end
- buttonmanip.generateWindow(functionNum, "terminal")
- coroutinemanip.coroutineControl["function"]["autoCrafter_buttons"] = function()
- local result, functionNum = {true}, param_functionNum.."/007"
- event = eventmanip.filter(functionNum, {"mouse_click"})[2]
- buttonmanip.scan(functionNum, "terminal", event[3], event[4])
- generateWindow(functionNum, "terminal")
- end
- coroutinemanip.coroutineControl["function"]["autoCrafter_craft"] = function()
- local result, functionNum = {true}, param_functionNum.."/007"
- coroutine.yield()
- if not setting["operation"] then
- setting["operation"] = true
- scan(functionNum)
- setting["operation"] = false
- end
- end
Add Comment
Please, Sign In to add comment