{ required = { 'platform', }, title = "Inventory Manager (Unstable)", description = "UNSTABLE/DEV — Automated inventory management system for CC:Tweaked. Uses cc-platform-core. May have breaking changes. Install 'inventory-manager' for the stable version.", repository = "gitea://git.spatulaa.com/MayaTheShy/Inventory-Manager-CC/main/", exclude = { "^web/", "^__tests__/", "^startup/", "%.md$", "%.json$", "^%.git", "^LICENSE$", "^node_modules/", "%.bak$", "^listDevicesByType%.lua$", }, install = [[ local cfgDir = "usr/config/inventory-manager" if not fs.isDir(cfgDir) then fs.makeDir(cfgDir) end local function ask(prompt, default) if default and #default > 0 then write(prompt .. " [" .. default .. "]: ") else write(prompt .. ": ") end local val = read() if not val or #val == 0 then return default end return val end print("") print("-- Inventory Manager Setup --") print("") print("Which role(s) will this computer run?") print(" 1) Inventory Manager (main controller)") print(" 2) Inventory Client (display-only)") print(" 3) Web Bridge (HTTP forwarder)") print(" 4) Mining Turtle (cobble miner)") print(" 5) Skip setup") print("") write("Choice (1/2/3/4/5): ") local choice = read() if choice == "1" then print("") print("-- Manager Configuration --") local monitorSide = ask("Monitor side", "left") local smelterMonitorSide = ask("Smelter monitor side", "top") local dropperName = ask("Dropper peripheral name", "minecraft:dropper_9") local barrelName = ask("Barrel peripheral name", "minecraft:barrel_0") local serverUrl = ask("Web server URL (blank to skip)", "") local cfg = { monitorSide = monitorSide, smelterMonitorSide = smelterMonitorSide, dropperName = dropperName, barrelName = barrelName, } local f = fs.open(fs.combine(cfgDir, ".manager_config"), "w") f.write(textutils.serialiseJSON(cfg)) f.close() print("Saved manager config.") if serverUrl and #serverUrl > 0 then local bcfg = { serverUrl = serverUrl } local bf = fs.open(fs.combine(cfgDir, ".webbridge_config"), "w") bf.write(textutils.serialiseJSON(bcfg)) bf.close() print("Saved web bridge config.") end elseif choice == "2" then print("") print("-- Client Configuration --") local monitorSide = ask("Monitor side", "left") local smelterMonitorSide = ask("Smelter monitor side", "top") local dropperName = ask("Dropper peripheral name (blank if none)", "") local barrelName = ask("Barrel peripheral name (blank if none)", "") local cfg = { monitorSide = monitorSide, smelterMonitorSide = smelterMonitorSide, } if dropperName and #dropperName > 0 then cfg.dropperName = dropperName end if barrelName and #barrelName > 0 then cfg.barrelName = barrelName end local f = fs.open(fs.combine(cfgDir, ".client_config"), "w") f.write(textutils.serialiseJSON(cfg)) f.close() print("Saved client config.") elseif choice == "3" then print("") print("-- Web Bridge Configuration --") local serverUrl = ask("Web server URL", "http://localhost") local cfg = { serverUrl = serverUrl } local f = fs.open(fs.combine(cfgDir, ".webbridge_config"), "w") f.write(textutils.serialiseJSON(cfg)) f.close() print("Saved web bridge config.") elseif choice == "4" then print("") print("-- Mining Turtle Configuration --") local mineInterval = ask("Mine interval in seconds", "0.5") local dumpThreshold = ask("Dump when N slots full", "14") local cfg = { mineInterval = tonumber(mineInterval) or 0.5, dumpThreshold = tonumber(dumpThreshold) or 14, } local f = fs.open(fs.combine(cfgDir, ".miner_config"), "w") f.write(textutils.serialiseJSON(cfg)) f.close() print("Saved miner config.") else print("Skipped — edit config files manually later.") end ]], }