From deeb70ba0dd9ab718290bfe214dd15a321a64103 Mon Sep 17 00:00:00 2001 From: MayaTheShy Date: Sun, 22 Mar 2026 02:52:30 -0400 Subject: [PATCH] Buffer ORDER_CHANNEL messages in craftItem function to avoid re-queue bounce --- inventoryManager.lua | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/inventoryManager.lua b/inventoryManager.lua index b57085a..6bdfc57 100644 --- a/inventoryManager.lua +++ b/inventoryManager.lua @@ -1173,6 +1173,7 @@ local function craftItem(recipeIdx) log.info("CRAFT", "Waiting for turtle reply (timeout: %ds)...", CRAFT_TIMEOUT) local deadline = os.clock() + CRAFT_TIMEOUT local result = nil + local bufferedMessages = {} -- Buffer ORDER_CHANNEL messages to avoid re-queue bounce while os.clock() < deadline do local timerId = os.startTimer(math.max(0.1, deadline - os.clock())) @@ -1185,14 +1186,19 @@ local function craftItem(recipeIdx) result = message break elseif channel == ORDER_CHANNEL then - -- Re-queue so Task 12 picks it up after craftItem returns - os.queueEvent(event, p1, p2, p3, p4, p5) + -- Buffer for re-queue after loop exits (avoids bounce loop) + table.insert(bufferedMessages, {event, p1, p2, p3, p4, p5}) end elseif event == "timer" and p1 == timerId then -- Timeout tick, loop will check deadline end end + -- Re-queue any buffered ORDER_CHANNEL messages so Task 12 processes them + for _, msg in ipairs(bufferedMessages) do + os.queueEvent(table.unpack(msg)) + end + activity.crafting = false needsRedraw = true smelterNeedsRedraw = true