From 17ed31c60c0328c97411f2a5c4e6fffa1e2beb6e Mon Sep 17 00:00:00 2001 From: Dystroyer8 Date: Fri, 17 Jul 2026 01:25:34 +0200 Subject: [PATCH] Fix Andesite vault discovery and monitor scaling --- create_andesite_display.lua | 65 ++++++++++++++++++++++++------------- 1 file changed, 43 insertions(+), 22 deletions(-) diff --git a/create_andesite_display.lua b/create_andesite_display.lua index 8c1f00c..5579040 100644 --- a/create_andesite_display.lua +++ b/create_andesite_display.lua @@ -2,8 +2,8 @@ -- Two Create Item Vaults are discovered by their contents and remembered. local REFRESH_SECONDS = 1 -local MIN_WIDTH = 42 -local MIN_HEIGHT = 15 +local MIN_WIDTH = 28 +local MIN_HEIGHT = 13 local CLUTCH_OUTPUT_SIDE = "left" local STATE_FILE = "create_andesite_state.txt" local DEVICE_FILE = "create_andesite_devices.txt" @@ -142,7 +142,14 @@ local function countItems(inventory, wanted) if not inventory then return 0 end local count = 0 for _, item in pairs(inventory.list) do - if wanted[item.name] then count = count + (tonumber(item.count) or 0) end + local name = tostring(item.name or ""):lower() + local matches = wanted[item.name] + if wanted == ZINC_ITEMS and name:find("zinc", 1, true) and name:find("nugget", 1, true) then + matches = true + elseif wanted == ALLOY_ITEMS and name:find("andesite_alloy", 1, true) then + matches = true + end + if matches then count = count + (tonumber(item.count) or 0) end end return count end @@ -155,11 +162,13 @@ local function discoverVaults() local oldZinc, oldAlloy = devices.zinc, devices.alloy local savedZinc = getInventory(devices.zinc) local savedAlloy = getInventory(devices.alloy) + local connectedVaults = {} for _, name in ipairs(peripheral.getNames()) do if isVault(name) then local inventory = getInventory(name) if inventory then + connectedVaults[#connectedVaults + 1] = inventory if containsItems(inventory, ZINC_ITEMS) then devices.zinc = name savedZinc = inventory @@ -172,6 +181,27 @@ local function discoverVaults() end end + -- This controller intentionally owns exactly two vaults. If a mod supplies + -- Zinc Nuggets under an unexpected registry name, the non-alloy vault is + -- still unambiguous and becomes the input vault. + if not savedZinc and savedAlloy and #connectedVaults == 2 then + for _, inventory in ipairs(connectedVaults) do + if inventory.name ~= savedAlloy.name then + devices.zinc = inventory.name + savedZinc = inventory + end + end + end + + if not savedAlloy and savedZinc and #connectedVaults == 2 then + for _, inventory in ipairs(connectedVaults) do + if inventory.name ~= savedZinc.name then + devices.alloy = inventory.name + savedAlloy = inventory + end + end + end + if devices.zinc ~= oldZinc or devices.alloy ~= oldAlloy then saveText(DEVICE_FILE, textutils.serialize(devices)) end @@ -198,11 +228,6 @@ local function discoverStressometer() return nil, nil, nil, nil end -local function percentage(value, maximum) - if not maximum or maximum <= 0 then return 0 end - return math.min(100, value / maximum * 100) -end - local function evaluate() local zincVault, alloyVault = discoverVaults() local zinc = countItems(zincVault, ZINC_ITEMS) @@ -248,13 +273,10 @@ local function drawInventory(y, label, count, inventory, color) center(y, label .. ": NO DATA", colors.red) return end - local fill = percentage(inventory.total, inventory.capacity) - local fillText = ("%.1f"):format(fill):gsub("%.", ",") - local text = ("%s: %s / %s %s%%"):format( + local text = ("%s %s / %s"):format( label, formatInteger(count), - formatInteger(inventory.capacity), - fillText + formatInteger(inventory.capacity) ) center(y, text, color or colors.white) end @@ -263,7 +285,7 @@ local function drawButton(height, data) local width = monitor.getSize() local label = requestedRunning and " CONTROL: ENABLED " or " CONTROL: DISABLED " local x = math.max(1, math.floor((width - #label) / 2) + 1) - local y = math.max(14, height - 1) + local y = math.max(12, height - 1) button.x1 = x button.x2 = math.min(width, x + #label - 1) @@ -285,11 +307,11 @@ local function render() monitor.setBackgroundColor(colors.black) monitor.clear() - center(1, "ANDESITE ALLOY FACTORY", colors.cyan) + center(1, "ANDESITE FACTORY", colors.cyan) - drawInventory(3, "ZINC NUGGETS", data.zinc, data.zincVault, + drawInventory(3, "ZINC", data.zinc, data.zincVault, data.zinc <= 0 and colors.orange or colors.lime) - drawInventory(4, "ANDESITE ALLOY", data.alloy, data.alloyVault, + drawInventory(4, "ALLOY", data.alloy, data.alloyVault, data.alloyVault and data.alloyVault.total >= data.alloyVault.capacity and colors.orange or colors.lime) center(6, "MACHINE SHAFT", colors.cyan) @@ -299,15 +321,14 @@ local function render() center(7, "Speed: NO DATA", colors.red) end if data.capacity then - center(8, "Capacity: " .. formatInteger(data.capacity) .. " SU", colors.white) - center(9, "Usage: " .. formatInteger(data.usage) .. " SU", colors.white) - local loadText = ("Load: %.1f %%"):format(data.load):gsub("%.", ",") - center(10, loadText, data.load >= 90 and colors.red or data.load >= 70 and colors.orange or colors.lime) + center(8, "SU: " .. formatInteger(data.usage) .. " / " .. formatInteger(data.capacity), colors.white) + local loadText = ("Load: %.1f %%"):format(data.load):gsub("%.", ",") + center(9, loadText, data.load >= 90 and colors.red or data.load >= 70 and colors.orange or colors.lime) else center(8, "Shaft network offline", colors.gray) end - center(12, data.status, data.statusColor) + center(11, data.status, data.statusColor) drawButton(height, data) center(height, "Touch = Anlage freigeben/stoppen", colors.gray) end