diff --git a/craftingTurtle.lua b/craftingTurtle.lua index 613db6d..376c685 100644 --- a/craftingTurtle.lua +++ b/craftingTurtle.lua @@ -4,6 +4,15 @@ -- Pulls ingredients from chests, crafts, and pushes results back. -- Requires a wired modem attached to the turtle. +local shell = _ENV.shell + +local function fatal(msg) + printError(msg) + print("\nPress any key to exit...") + os.pullEvent("key") + return +end + ------------------------------------------------- -- Default configuration (overridden by .turtle_config) ------------------------------------------------- @@ -52,9 +61,7 @@ print("") -- Verify this is a crafting turtle if not turtle or not turtle.craft then - print("[ERR] No turtle.craft() available!") - print(" This must be a Crafting Turtle.") - return + return fatal("[ERR] No turtle.craft() available!\n This must be a Crafting Turtle.") end -- Find wired modem and get our network name @@ -78,10 +85,7 @@ for _, side in ipairs({"top", "bottom", "left", "right", "front", "back"}) do end if not modem or not selfName then - print("[ERR] No wired modem found!") - print(" Attach a wired modem to the turtle") - print(" and connect it to the network.") - return + return fatal("[ERR] No wired modem found!\n Attach a wired modem to the turtle\n and connect it to the network.") end print("[OK] Modem: " .. modemSide) @@ -94,9 +98,7 @@ print("[OK] Listening on channel " .. CRAFT_CHANNEL) -- Wrap our own inventory peripheral for pullItems/pushItems local selfInv = peripheral.wrap(selfName) if not selfInv then - print("[ERR] Cannot wrap own peripheral: " .. selfName) - print(" Make sure the wired modem is connected.") - return + return fatal("[ERR] Cannot wrap own peripheral: " .. selfName .. "\n Make sure the wired modem is connected.") end print("[OK] Self-inventory peripheral ready") @@ -266,20 +268,26 @@ end -- Main loop: listen for modem commands ------------------------------------------------- -while true do - local event, side, channel, replyChannel, message, distance = os.pullEvent("modem_message") +local ok, err = pcall(function() + while true do + local event, side, channel, replyChannel, message, distance = os.pullEvent("modem_message") - if channel == CRAFT_CHANNEL and type(message) == "table" then - if message.type == "craft_request" then - local result = handleCraftCommand(message) - -- Send result back to master - modem.transmit(CRAFT_REPLY_CHANNEL, CRAFT_CHANNEL, result) - elseif message.type == "ping" then - -- Health check from master - modem.transmit(CRAFT_REPLY_CHANNEL, CRAFT_CHANNEL, { - type = "pong", - name = selfName, - }) + if channel == CRAFT_CHANNEL and type(message) == "table" then + if message.type == "craft_request" then + local result = handleCraftCommand(message) + -- Send result back to master + modem.transmit(CRAFT_REPLY_CHANNEL, CRAFT_CHANNEL, result) + elseif message.type == "ping" then + -- Health check from master + modem.transmit(CRAFT_REPLY_CHANNEL, CRAFT_CHANNEL, { + type = "pong", + name = selfName, + }) + end end end +end) + +if not ok then + fatal("[ERR] Crafting turtle crashed:\n" .. tostring(err)) end