rewrite autocrafting script
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
local fs = require("filesystem")
|
||||
local recipeLib = load(fs:readAllText("./recipeParseLib.lua"), "recipeParseLib.lua")()
|
||||
|
||||
local args = table.pack(...)
|
||||
|
||||
local resultItem = args[1]
|
||||
assert(resultItem, "supply the item you want to add a recipe for as the first item")
|
||||
|
||||
local crafter = components:getFirst("digitalCrafter")
|
||||
|
||||
local recipes = crafter:searchRecipesWithResult(resultItem)
|
||||
|
||||
assert(#recipes > 0, ("no recipe found for %s."):format(resultItem))
|
||||
|
||||
|
||||
local function acToLuaRecipe(acRecipe)
|
||||
return {
|
||||
resultCount = acRecipe.resultCount,
|
||||
slots = acRecipe.ingredients,
|
||||
resultItem = acRecipe.result
|
||||
}
|
||||
end
|
||||
|
||||
local kernel = require("kernel")
|
||||
local keyEvents = {}
|
||||
kernel:registerEventCallback("charTyped", function(...) table.insert(keyEvents, {...}) end)
|
||||
kernel:registerEventCallback("keyPressed", function(...) table.insert(keyEvents, {...}) end)
|
||||
|
||||
---@param eventFilterOrNil "charTyped"|"keyPressed"|nil
|
||||
local function waitForInputEvent(eventFilterOrNil)
|
||||
sleep(0)
|
||||
while #keyEvents == 0 do sleep(0.5) end
|
||||
local res = table.remove(keyEvents, 1)
|
||||
if eventFilterOrNil == nil or res[1] == eventFilterOrNil then
|
||||
return res
|
||||
else
|
||||
return waitForInputEvent(eventFilterOrNil) or tailCallsAreSus
|
||||
end
|
||||
end
|
||||
|
||||
local recipe = recipes[1]
|
||||
if #recipes > 1 then
|
||||
print("Looks like there are multiple recipes. Please pick one of the following by typing the number on the left and then enter.")
|
||||
for index, value in ipairs(recipes) do
|
||||
print(("%d: %s"):format(index, recipeLib:serializeSingleRecipe(acToLuaRecipe(value))))
|
||||
end
|
||||
|
||||
local buf = ""
|
||||
while true do
|
||||
printInline(("\rSelection: %s_"):format(buf))
|
||||
local ctyped, repr = table.unpack(waitForInputEvent("charTyped"))
|
||||
if repr == "\b" then
|
||||
buf = buf:sub(1, #buf-1)
|
||||
elseif repr == "\n" then
|
||||
break
|
||||
elseif repr ~= nil then
|
||||
buf = buf .. repr
|
||||
end
|
||||
end
|
||||
|
||||
print()
|
||||
local selection = tonumber(buf)
|
||||
if selection == nil or selection < 1 or selection > #recipes then
|
||||
error(("The inputted number '%s' is not a valid option"):format(buf))
|
||||
end
|
||||
recipe = recipes[selection]
|
||||
end
|
||||
|
||||
recipeLib:addNewRecipe(acToLuaRecipe(recipe))
|
||||
|
||||
print(("Done, added the following recipe:\n%s"):format(recipeLib:serializeSingleRecipe(acToLuaRecipe(recipe))))
|
||||
Reference in New Issue
Block a user