CCCPaste

f1e5d33c928f2

-- energyMonitor.lua
-- Zeigt den Energieinhalt eines Speichers (rechts) auf einem Monitor (oben) an.
-- Entwickelt für Advanced Computer (CC: Tweaked)

-- Peripheriegeräte abrufen
local battery = peripheral.wrap("right")
local monitor = peripheral.wrap("top")

if not battery then
    error("❌ Kein Energiespeicher rechts gefunden!")
end

if not monitor then
    error("❌ Kein Monitor oben gefunden!")
end

-- Monitor vorbereiten
monitor.setTextScale(1)
monitor.setBackgroundColor(colors.black)
monitor.clear()
monitor.setCursorPos(1,1)

-- Funktion zum Zeichnen des Fortschrittsbalkens
local function drawBar(x, y, width, percent)
    local filled = math.floor(width * percent)
    monitor.setCursorPos(x, y)
    monitor.setBackgroundColor(colors.green)
    monitor.write(string.rep(" ", filled))
    monitor.setBackgroundColor(colors.gray)
    monitor.write(string.rep(" ", width - filled))
    monitor.setBackgroundColor(colors.black)
end

-- Funktion, um Energie aus verschiedenen Mods zu lesen
local function getEnergyData(periph)
    local stored, max = 0, 0

    if periph.getEnergyStored and periph.getMaxEnergyStored then
        stored = periph.getEnergyStored()
        max = periph.getMaxEnergyStored()
    elseif periph.getEnergy and periph.getMaxEnergy then
        stored = periph.getEnergy()
        max = periph.getMaxEnergy()
    elseif periph.getStored and periph.getCapacity then
        stored = periph.getStored()
        max = periph.getCapacity()
    else
        error("⚠️ Unbekannte Energie-API – Block unterstützt keine Energieabfrage.")
    end

    return stored, max
end

-- Hauptschleife
while true do
    monitor.clear()
    monitor.setCursorPos(1,1)
    monitor.setTextColor(colors.white)

    local ok, energyStored, energyCapacity = pcall(function()
        local s, m = getEnergyData(battery)
        return s, m
    end)

    if not ok then
        monitor.setTextColor(colors.red)
        monitor.write("Fehler beim Lesen der Energie!")
        sleep(2)
    else
        local percent = (energyCapacity > 0) and (energyStored / energyCapacity) or 0
        local percentText = string.format("%.1f%%", percent * 100)

        monitor.setTextColor(colors.cyan)
        monitor.write("Energie-Speicher")
        monitor.setCursorPos(1,2)
        monitor.setTextColor(colors.white)
        monitor.write(string.format("%d / %d RF", energyStored, energyCapacity))
        monitor.setCursorPos(1,3)
        drawBar(1, 3, 25, percent)
        monitor.setCursorPos(1,5)
        monitor.setTextColor(colors.yellow)
        monitor.write("Fuellstand: " .. percentText)
    end

    sleep(2)
end