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)
|
log.warn("INIT", "No smelter monitor on %s", cfg.SMELTER_MONITOR_SIDE)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Find modem for client communication
|
-- Find wired modem for client/turtle communication
|
||||||
for _, name in ipairs(peripheral.getNames()) do
|
for _, name in ipairs(peripheral.getNames()) do
|
||||||
if peripheral.getType(name) == "modem" then
|
if peripheral.getType(name) == "modem" then
|
||||||
ctx.networkModem = peripheral.wrap(name)
|
local m = peripheral.wrap(name)
|
||||||
ctx.networkModemName = name
|
-- Prefer wired modem (has getNameLocal); skip wireless
|
||||||
ctx.networkModem.open(cfg.ORDER_CHANNEL)
|
if m.isWireless and not m.isWireless() then
|
||||||
ctx.networkModem.open(cfg.CRAFT_REPLY_CHANNEL)
|
ctx.networkModem = m
|
||||||
ctx.networkModem.open(cfg.SYSTEM_CHANNEL)
|
ctx.networkModemName = name
|
||||||
break
|
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
|
||||||
end
|
end
|
||||||
if ctx.networkModem then
|
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
|
else
|
||||||
log.warn("INIT", "No modem found for client sync")
|
log.warn("INIT", "No modem found for client sync")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Detect crafting turtle on network
|
-- Detect crafting turtle on network (must have craft() method)
|
||||||
for _, name in ipairs(peripheral.getNames()) do
|
for _, name in ipairs(peripheral.getNames()) do
|
||||||
if name:match("^turtle_") then
|
if name:match("^turtle_") then
|
||||||
ctx.craftTurtleName = name
|
local methods = peripheral.getMethods(name)
|
||||||
break
|
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
|
||||||
end
|
end
|
||||||
if ctx.craftTurtleName then
|
if ctx.craftTurtleName then
|
||||||
|
|||||||
Reference in New Issue
Block a user