local induction_port = peripheral.find("inductionPort") local monitor = peripheral.find("monitor") if not induction_port then error("No induction port found!") end if not monitor then error("No monitor found!") end monitor.setBackgroundColor(colors.black) monitor.clear() local function format_number(num) num = tonumber(num) or 0 local sign = " " if num < 0 then sign = "-" num = math.abs(num) end local suffixes = {"", "k", "M", "G", "T", "P", "E"} local i = 1 while num >= 1000 and i < #suffixes do num = num / 1000 i = i + 1 end return string.format("%s%.2f%s", sign, num, suffixes[i]) end local function formatTime(seconds) if not seconds then return "--" end local days = math.floor(seconds / 86400) seconds = seconds % 86400 local hours = math.floor(seconds / 3600) seconds = seconds % 3600 local minutes = math.floor(seconds / 60) seconds = math.floor(seconds % 60) local result = "" if days > 0 then result = result .. days.."d " end if hours > 0 or days > 0 then result = result .. hours.."h " end if minutes > 0 or hours > 0 or days > 0 then result = result .. minutes.."m " end result = result .. seconds.."s" return result end while true do local fill = induction_port.getEnergyFilledPercentage() or 0 local percent = fill * 100 local energy = induction_port.getEnergy() local maxEnergy = induction_port.getMaxEnergy() local lastInput = induction_port.getLastInput() local lastOutput = induction_port.getLastOutput() local transferCap = induction_port.getTransferCap() local netMovement = lastInput - lastOutput -- per tick local status, eta if netMovement > 0.001 then status = "Power" eta = ((maxEnergy - energy) / netMovement) * 0.05 elseif netMovement < -0.001 then status = "Drain" eta = (energy / -netMovement) * 0.05 else status = "Neutral" eta = nil end monitor.clear() monitor.setCursorPos(1,1) monitor.write("*Induction Matrix*") monitor.setCursorPos(1,2) monitor.write("------------------") monitor.setCursorPos(1,3) monitor.write(string.format("Stored: %s", format_number(energy))) monitor.setCursorPos(1,4) monitor.write(string.format("Limit : %s", format_number(maxEnergy))) monitor.setCursorPos(1,5) monitor.write(string.format("Charge : %.1f%%", percent)) monitor.setCursorPos(1,7) monitor.write(string.format("Input : %s", format_number(lastInput))) monitor.setCursorPos(1,8) monitor.write(string.format("Output: %s", format_number(lastOutput))) monitor.setCursorPos(1,9) monitor.write(string.format("Max IO: %s", format_number(transferCap))) monitor.setCursorPos(1,11) monitor.write(string.format("Change:%s", format_number(netMovement))) monitor.setCursorPos(1,12) monitor.write(string.format("%s: %s", status, formatTime(eta))) sleep(0.05) end