CCCPaste

2b3b6b1f6c630

-- Assign the monitor to the 'monitor' variable (assuming it's connected on the right)
local monitor = peripheral.wrap("right")
local redstoneSide = "back" -- Define the redstone side where the signal will be output
local updateRate = 1

-- Set the text scale on the monitor
monitor.setTextScale(0.8)

-- Function to find an IC2 energy storage block
local function findIC2Storage()
    local storageTypes = {
        "batbox",
        "cesu",
        "mfe",
        "mfsu"
    }

    for _, storageType in ipairs(storageTypes) do
        local storage = peripheral.find(storageType)
        if storage then
            return storage, storageType:upper()
        end
    end
    return nil, nil
end

-- Function to format EU values
local function formatEU(energy)
    if energy >= 1000000 then
        return string.format("%.1f M EU", energy / 1000000)
    elseif energy >= 1000 then
        return string.format("%.1f k EU", energy / 1000)
    else
        return string.format("%.0f EU", energy)
    end
end

local storage, storageType = findIC2Storage()

-- Track last stored value for rate/direction
local lastStored = { amount = 0, name = "Unknown" }

local function displayStorageInfo()
    if not storage then
        print("IC2 storage block not found.")
        return
    end

    -- Get current stored energy and maximum capacity
    local maxEnergy = storage.getCapacity()
    local currentEnergy = storage.getStored()
    local filledPercentage = (currentEnergy / maxEnergy) * 100

    -- Calculate change in energy since last update
    local change = currentEnergy - lastStored.amount
    local direction = "stable"
    local directionVerb = "stable"

    if change > 0 then
        direction = "increasing"
        directionVerb = "fill"
    elseif change < 0 then
        direction = "decreasing"
        directionVerb = "empty"
    end

    -- Output redstone signal based on energy level
    if filledPercentage < 25 then
        redstone.setOutput(redstoneSide, true)
    elseif filledPercentage > 75 then
        redstone.setOutput(redstoneSide, false)
    end

    -- Update last known stored amount
    lastStored.amount = currentEnergy
    lastStored.name = storageType

    -- Clear monitor screen
    monitor.clear()
    monitor.setCursorPos(1, 1)

    -- Display info
    monitor.write(string.format("Showing Data For [%s]", storageType))
    monitor.setCursorPos(1, 2)
    monitor.write(string.format("Capacity : %s", formatEU(maxEnergy)))
    monitor.setCursorPos(1, 3)
    monitor.write(string.format("Stored   : %s", formatEU(currentEnergy)))
    monitor.setCursorPos(1, 4)
    if filledPercentage < 25 then
        monitor.setTextColour(colours.red)
    end
    monitor.write(string.format("Filled   : %.2f%%", filledPercentage))
    monitor.setTextColour(colours.white)
    monitor.setCursorPos(1, 5)
    monitor.write(string.format("Direction: %s by %.0f EU", direction, math.abs(change)))
end

-- Main loop
while true do
    displayStorageInfo()
    os.sleep(updateRate)
end