From 356e84b262892daf0c92436b4db4ce76bfb2af9f Mon Sep 17 00:00:00 2001 From: MayaTheShy Date: Sun, 22 Mar 2026 16:11:28 -0400 Subject: [PATCH] feat: add interactive setup for Inventory Manager roles and configurations --- .package | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/.package b/.package index 181b0ac..91dcf0a 100644 --- a/.package +++ b/.package @@ -6,4 +6,92 @@ "^web/", "^__tests__/", "^startup/", "%.md$", "%.json$", "^%.git", "^LICENSE$", "^node_modules/", }, + install = [[ + local pkgDir = fs.combine("packages", "inventory-manager") + 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) Skip setup") + print("") + write("Choice (1/2/3/4): ") + 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(pkgDir, ".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(pkgDir, ".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(pkgDir, ".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(pkgDir, ".webbridge_config"), "w") + f.write(textutils.serialiseJSON(cfg)) + f.close() + print("Saved web bridge config.") + + else + print("Skipped — edit config files manually later.") + end + ]], }