Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local refreshInterval = 1
- --# Do not reduce this beyond 0.5, or you may have issues with using the mouse controls.
- local peripheralBlacklist = {
- ["tile_thermalexpansion_machine_rockgen_name"] = true;
- }
- local function getLiquids()
- --# get the liquids from anything that has a tank
- local liquids = { }
- --# for all peripherals
- for _,name in pairs(peripheral.getNames()) do
- --# if we accept the peripheral
- if not peripheralBlacklist[ peripheral.getType(name) ] then
- --# wrap the peripheral
- local p = peripheral.wrap(name)
- --# if it has tanks
- if p and p.getTankInfo then
- --# for all the tanks in the block
- for _,tank in pairs(p.getTankInfo("unknown")) do
- --# if the tank is not empty
- if tank.amount then
- --# store all the liquid info, collated
- local rName = tank.rawName or tank.name or "fuck you"
- local nName = tank.name or name
- local tAmount = tank.amount or 0
- local tCapacity = tank.capacity or 0
- liquids[rName] = liquids[rName] or { name = nName; amount = 0; capacity = 0; }
- liquids[rName].amount = liquids[rName].amount + tAmount
- liquids[rName].capacity = liquids[rName].capacity + tCapacity
- liquids[rName].percent = math.ceil((liquids[rName].amount / liquids[rName].capacity) * 100)
- end
- end
- end
- end
- end
- --# convert to indexed table
- local i, indexed = 1, {}
- for rawName,liquid in pairs(liquids) do
- liquid.rawName = rawName
- indexed[i] = liquid
- i = i + 1
- end
- return indexed
- end
- local function getEnergy()
- local energy = {amount = 0; capacity = 0; percent = 0 }
- for _,name in pairs(peripheral.getNames()) do
- if not peripheralBlacklist[ peripheral.getType(name) ] then
- local p = peripheral.wrap(name)
- if p and p.getEnergyStored and p.getMaxEnergyStored then
- energy.amount = energy.amount + (p.getEnergyStored("unknown") or 0)
- energy.capacity = energy.capacity + (p.getMaxEnergyStored("unknown") or 0)
- energy.percent = math.ceil((energy.amount/energy.capacity)*100)
- end
- end
- end
- return energy
- end
- local function getMEStorage()
- local storage = { free = 0; available = 0; capacity = 0; amount = 0; unused = 0; percent = 0 }
- for _,name in pairs(peripheral.getNames()) do
- local p = peripheral.wrap(name)
- if p and p.getFreeBytes and p.getTotalBytes and p.getUnusedBytes then
- storage.free = p.getFreeBytes()
- storage.available = p.getFreeBytes()
- storage.capacity = p.getTotalBytes()
- storage.amount = p.getTotalBytes() - p.getFreeBytes()
- storage.unused = p.getUnusedBytes()
- storage.percent = math.ceil((storage.amount/storage.capacity)*100)
- end
- end
- return storage
- end
- local selected = 1
- term.setBackgroundColor(colors.black)
- term.clear()
- while true do
- local fluidInfo = getLiquids()
- local storage = getMEStorage()
- local energy = getEnergy()
- term.setCursorPos(1,1)
- term.setBackgroundColor(colors.black)
- term.clearLine()
- term.setCursorPos(1,2)
- term.clearLine()
- for i = 0,10 do
- term.setCursorPos(i + 10, 2)
- write(" ")
- end
- term.setCursorPos(1,1)
- if energy.capacity ~= 0 then
- term.setTextColor(colors.white)
- write("Power: "..energy.amount.."/"..energy.capacity.." RF")
- if energy.percent >= 50 then
- term.setBackgroundColor(colors.green)
- for i = 0, energy.percent/10 do
- term.setCursorPos(i + 10, 2)
- write(" ")
- end
- term.setCursorPos(10,2)
- write(energy.percent.."%")
- elseif energy.percent >= 25 and energy.percent < 50 then
- term.setBackgroundColor(colors.yellow)
- for i = 0, energy.percent/10 do
- term.setCursorPos(i + 10, 2)
- write(" ")
- end
- term.setCursorPos(10,2)
- write(energy.percent.."%")
- elseif energy.percent >= 10 and energy.percent < 25 then
- term.setBackgroundColor(colors.orange)
- for i = 0, energy.percent/10 do
- term.setCursorPos(i + 10, 2)
- write(" ")
- end
- term.setCursorPos(10,2)
- write(energy.percent.."%")
- elseif energy.percent >= 0 and energy.percent < 10 then
- term.setBackgroundColor(colors.red)
- for i = 0, energy.percent/10 do
- term.setCursorPos(i + 10, 2)
- write(" ")
- end
- term.setCursorPos(10,2)
- write(energy.percent.."%")
- end
- else
- term.setBackgroundColor(colors.black)
- term.setCursorPos(1,1)
- term.clearLine()
- term.setTextColor(colors.red)
- write("Energy storage not connected!")
- end
- term.setCursorPos(1,4)
- if storage.capacity ~= 0 then
- term.setTextColor(colors.white)
- term.setBackgroundColor(colors.black)
- term.clearLine()
- term.setCursorPos(1,5)
- term.clearLine()
- for i = 0,10 do
- term.setCursorPos(i + 10, 5)
- write(" ")
- end
- term.setCursorPos(1,4)
- write("ME Storage: "..storage.amount.."/"..storage.capacity.." bytes")
- if storage.percent >= 50 then
- term.setBackgroundColor(colors.green)
- for i = 0, storage.percent/10 do
- term.setCursorPos(i + 10, 5)
- write(" ")
- end
- term.setCursorPos(10,5)
- write(storage.percent.."%")
- elseif storage.percent >= 25 and storage.percent < 50 then
- term.setBackgroundColor(colors.yellow)
- for i = 0, storage.percent/10 do
- term.setCursorPos(i + 10, 5)
- write(" ")
- end
- term.setCursorPos(10,5)
- write(storage.percent.."%")
- elseif storage.percent >= 10 and storage.percent < 25 then
- term.setBackgroundColor(colors.orange)
- for i = 0, storage.percent/10 do
- term.setCursorPos(i + 10, 5)
- write(" ")
- end
- term.setCursorPos(10,5)
- write(storage.percent.."%")
- elseif storage.percent >= 0 and storage.percent < 10 then
- term.setBackgroundColor(colors.red)
- for i = 0, storage.percent/10 do
- term.setCursorPos(i + 10, 5)
- write(" ")
- end
- term.setCursorPos(10,5)
- write(storage.percent.."%")
- end
- else
- term.setBackgroundColor(colors.black)
- term.setCursorPos(1,4)
- term.clearLine()
- term.setCursorPos(1,5)
- term.clearLine()
- term.setTextColor(colors.red)
- write("ME storage not connected!")
- end
- term.setCursorPos(49,1)
- term.setBackgroundColor(colors.black)
- term.setTextColor(colors.white)
- term.setCursorPos(1,8)
- term.clearLine()
- if #fluidInfo ~= 0 then
- term.setCursorPos(1,7)
- term.setTextColor(colors.white)
- term.setBackgroundColor(colors.black)
- term.clearLine()
- for i = 0,10 do
- term.setCursorPos(i + 10,8)
- write(" ")
- end
- term.setCursorPos(1,7)
- write(fluidInfo[selected].rawName..": "..fluidInfo[selected].amount.."/"..fluidInfo[selected].capacity.." mB")
- if fluidInfo[selected].percent >= 50 then
- term.setBackgroundColor(colors.black)
- term.setCursorPos(1,8)
- term.clearLine()
- term.setBackgroundColor(colors.green)
- for i = 0, fluidInfo[selected].percent/10 do
- term.setCursorPos(i + 10,8)
- write(" ")
- end
- term.setCursorPos(10,8)
- write(fluidInfo[selected].percent.."%")
- elseif fluidInfo[selected].percent >= 25 and fluidInfo[selected].percent < 50 then
- term.setBackgroundColor(colors.yellow)
- for i = 0, fluidInfo[selected].percent/10 do
- term.setCursorPos(i + 10,8)
- write(" ")
- end
- term.setCursorPos(10,8)
- write(fluidInfo[selected].percent.."%")
- elseif fluidInfo[selected].percent >= 10 and fluidInfo[selected].percent < 25 then
- term.setBackgroundColor(colors.orange)
- for i = 0, fluidInfo[selected].percent/10 do
- term.setCursorPos(i + 10,8)
- write(" ")
- end
- term.setCursorPos(10,8)
- write(fluidInfo[selected].percent.."%")
- elseif fluidInfo[selected].percent >= 0 and fluidInfo[selected].percent < 10 then
- term.setBackgroundColor(colors.red)
- for i = 0, fluidInfo[selected].percent/10 do
- term.setCursorPos(i + 10,8)
- write(" ")
- end
- term.setCursorPos(10,8)
- write(fluidInfo[selected].percent.."%")
- end
- else
- term.setBackgroundColor(colors.black)
- term.setCursorPos(1,7)
- term.clearLine()
- term.setCursorPos(1,8)
- term.clearLine()
- term.setTextColor(colors.red)
- write("No fluids detected!")
- end
- term.setTextColor(colors.white)
- term.setBackgroundColor(colors.black)
- term.setCursorPos(2,8)
- if #fluidInfo ~=0 then
- write("<<-->>")
- local refresh = os.startTimer(refreshInterval)
- local events = {os.pullEvent()}
- if events[1] == "mouse_click" and events[2] == 1 then
- if events[3] >= 2 and events[3] <= 4 and events[4] == 8 then
- selected = selected - 1
- term.setCursorPos(2,8)
- term.setBackgroundColor(colors.white)
- term.setTextColor(colors.black)
- write("<<-")
- elseif events[3] >= 5 and events[3] <= 7 and events[4] == 8 then
- selected = selected + 1
- term.setCursorPos(5,8)
- term.setBackgroundColor(colors.white)
- term.setTextColor(colors.black)
- write("->>")
- end
- if selected < 1 then
- selected = #fluidInfo
- elseif selected > #fluidInfo then
- selected = 1
- end
- end
- else
- sleep(refreshInterval)
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment