feat: improve modem detection logic with fallback for wireless modems and ensure channels are open

This commit is contained in:
MayaTheShy
2026-03-22 22:09:28 -04:00
parent baaa724595
commit 904d4ec7f7

View File

@@ -194,28 +194,50 @@ local function main()
log.warn("INIT", "No smelter monitor on %s", cfg.SMELTER_MONITOR_SIDE)
end
-- Find modem for client communication
-- Find wired modem for client/turtle communication
for _, name in ipairs(peripheral.getNames()) do
if peripheral.getType(name) == "modem" then
ctx.networkModem = peripheral.wrap(name)
ctx.networkModemName = name
ctx.networkModem.open(cfg.ORDER_CHANNEL)
ctx.networkModem.open(cfg.CRAFT_REPLY_CHANNEL)
ctx.networkModem.open(cfg.SYSTEM_CHANNEL)
break
local m = peripheral.wrap(name)
-- Prefer wired modem (has getNameLocal); skip wireless
if m.isWireless and not m.isWireless() then
ctx.networkModem = m
ctx.networkModemName = name
ctx.networkModem.open(cfg.ORDER_CHANNEL)
ctx.networkModem.open(cfg.CRAFT_REPLY_CHANNEL)
ctx.networkModem.open(cfg.SYSTEM_CHANNEL)
break
elseif not ctx.networkModem then
-- Fallback: use wireless if no wired available
ctx.networkModem = m
ctx.networkModemName = name
end
end
end
if ctx.networkModem then
log.info("INIT", "Network modem: %s", ctx.networkModemName)
-- Ensure channels are open even on fallback modem
ctx.networkModem.open(cfg.ORDER_CHANNEL)
ctx.networkModem.open(cfg.CRAFT_REPLY_CHANNEL)
ctx.networkModem.open(cfg.SYSTEM_CHANNEL)
log.info("INIT", "Network modem: %s (wired=%s)", ctx.networkModemName,
tostring(ctx.networkModem.isWireless and not ctx.networkModem.isWireless()))
else
log.warn("INIT", "No modem found for client sync")
end
-- Detect crafting turtle on network
-- Detect crafting turtle on network (must have craft() method)
for _, name in ipairs(peripheral.getNames()) do
if name:match("^turtle_") then
ctx.craftTurtleName = name
break
local methods = peripheral.getMethods(name)
if methods then
local hasCraft = false
for _, m in ipairs(methods) do
if m == "craft" then hasCraft = true; break end
end
if hasCraft then
ctx.craftTurtleName = name
break
end
end
end
end
if ctx.craftTurtleName then