feat: improve modem detection logic with fallback for wireless modems and ensure channels are open
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user