CCCPaste

detect_energy_level

-- energia.lua
-- Muestra el nivel de energía (FE) de un bloque detrás del ordenador

local side = "back" -- bloque que contiene energía (detrás del ordenador)

-- función para obtener energía actual y capacidad
local function getEnergy(side)
    local methods = {
        {"getEnergyStored", "getEnergyCapacity"},
        {"getEnergy", "getMaxEnergy"},
        {"getEnergyStored", "getMaxEnergyStored"},
        {"getEnergy", "getEnergyCapacity"},
        {"getEnergyStats"} -- algunos mods devuelven tabla {energy, capacity}
    }

    for _, pair in ipairs(methods) do
        local curMeth, capMeth = pair[1], pair[2]
        if peripheral.hasType(side) or peripheral.getType(side) then
            local ok1, cur = pcall(peripheral.call, side, curMeth)
            local ok2, cap = pcall(peripheral.call, side, capMeth)
            if ok1 and ok2 and type(cur) == "number" and type(cap) == "number" then
                return cur, cap
            elseif ok1 and type(cur) == "table" and cur.energy and cur.capacity then
                return cur.energy, cur.capacity
            end
        end
    end
    return nil, nil
end

while true do
    local energy, capacity = getEnergy(side)
    term.clear()
    term.setCursorPos(1,1)
    if energy and capacity then
        local percent = (energy / capacity) * 100
        print(("Energía: %d / %d FE (%.1f%%)"):format(energy, capacity, percent))
    else
        print("No se pudo leer energía del bloque en "..side)
        print("Asegúrate de que el bloque está conectado como periférico.")
    end
    sleep(1)
end