-- 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