Files
Inventory-Manager-CC/autorun/startup.lua
MayaTheShy 2adfa7f7a3 Add mining turtle for infinite cobblestone generators
New miningTurtle.lua: sits on top of a cobble gen, continuously
digs down, and pushes items into networked chests via wired modem.
Features:
- Configurable mine interval, dump threshold, fuel slot
- Auto-dumps inventory when slots fill or timer expires
- Auto-refuels from designated fuel slot
- Remote reboot via SYSTEM_CHANNEL
- Stats display (mined, dumped, uptime, fuel)
- Persistent config in usr/config/inventory-manager/.miner_config

Also adds:
- startup/miner.lua: auto-update + launch script for standalone use
- .package: new 'Mining Turtle' role (option 4) in setup wizard
- autorun/startup.lua: detects .miner_config and launches miningTurtle
2026-03-22 21:32:42 -04:00

93 lines
2.5 KiB
Lua

-- Inventory Manager - Opus autorun script
-- Detects configured role and launches the appropriate program at boot
local fs = _G.fs
local kernel = _G.kernel
local os = _G.os
local peripheral = _G.peripheral
local shell = _ENV.shell
local BASE = 'packages/inventory-manager'
local CFG = 'usr/config/inventory-manager'
-------------------------------------------------
-- Determine role from config files written during install
-------------------------------------------------
local function cfgExists(name)
return fs.exists(fs.combine(CFG, name))
or fs.exists(fs.combine(BASE, name))
end
local role
if cfgExists('.manager_config') then
role = 'manager'
elseif cfgExists('.client_config') then
role = 'client'
elseif cfgExists('.webbridge_config') then
role = 'bridge'
elseif cfgExists('.miner_config') then
role = 'miner'
elseif _G.turtle then
role = 'turtle'
end
if not role then return end
-------------------------------------------------
-- Register reboot listener as a kernel hook
-- Allows remote reboot via modem (channel 4205)
-------------------------------------------------
local SYSTEM_CHANNEL = 4205
local modem = peripheral.find('modem')
if modem then
modem.open(SYSTEM_CHANNEL)
kernel.hook('modem_message', function(_, data)
-- data = { side, channel, replyChannel, message, distance }
if data[2] == SYSTEM_CHANNEL
and type(data[4]) == 'table'
and data[4].type == 'reboot'
then
local target = data[4].target or 'all'
if target == 'all'
or target == role
or target == tostring(os.getComputerID())
then
os.reboot()
end
end
end)
end
-------------------------------------------------
-- Launch the program for this role
-------------------------------------------------
local programs = {
manager = 'inventoryManager.lua',
client = 'inventoryClient.lua',
bridge = 'inventoryWebBridge.lua',
turtle = 'craftingTurtle.lua',
miner = 'miningTurtle.lua',
}
local program = fs.combine(BASE, programs[role])
if shell.openForegroundTab then
shell.openForegroundTab(program)
-- Client role also runs the dropper controller
if role == 'client' then
local dropper = fs.combine(BASE, 'dropperController.lua')
if fs.exists(dropper) then
shell.openTab(dropper)
end
end
else
-- No multishell — run directly (blocks boot)
shell.run(program)
end