Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- === Reactor Monitor & Control Script ===
- -- CC:Tweaked - Extreme Reactors (ATM10)
- -- Monitor GUI + Auto Control + Manual Button
- -- Ethan Edition
- local REACTOR_NAME = "BigReactors-Reactor_0" -- Adjust if different
- local MONITOR_NAME = "monitor_0" -- Adjust if different
- local autoControl = true
- local reactor = peripheral.wrap(REACTOR_NAME)
- local monitor = peripheral.wrap(MONITOR_NAME)
- local function centerText(line, text)
- local w, _ = monitor.getSize()
- monitor.setCursorPos(math.floor((w - #text) / 2) + 1, line)
- monitor.write(text)
- end
- local function drawButton(label, active)
- local w, h = monitor.getSize()
- monitor.setCursorPos(2, h - 1)
- if active then
- monitor.setBackgroundColor(colors.red)
- monitor.setTextColor(colors.white)
- else
- monitor.setBackgroundColor(colors.lime)
- monitor.setTextColor(colors.black)
- end
- monitor.write(" [ " .. label .. " ] ")
- monitor.setBackgroundColor(colors.black)
- end
- local function drawGUI()
- monitor.clear()
- monitor.setTextColor(colors.cyan)
- centerText(1, "=== Reactor Control ===")
- monitor.setTextColor(colors.white)
- monitor.setCursorPos(1, 3)
- monitor.write("Status: ")
- monitor.setTextColor(reactor.getActive() and colors.lime or colors.red)
- monitor.write(reactor.getActive() and "ONLINE" or "OFFLINE")
- monitor.setTextColor(colors.white)
- monitor.setCursorPos(1, 4)
- monitor.write(string.format("RF/t: %.0f", reactor.getEnergyProducedLastTick()))
- monitor.setCursorPos(1, 5)
- monitor.write(string.format("Fuel: %.2f%%", reactor.getFuelAmount() / reactor.getFuelAmountMax() * 100))
- monitor.setCursorPos(1, 6)
- monitor.write(string.format("Temp: %.1f C", reactor.getFuelTemperature()))
- monitor.setCursorPos(1, 7)
- monitor.write(string.format("Energy: %.0f / %.0f RF",
- reactor.getEnergyStored(), reactor.getEnergyCapacity()))
- monitor.setCursorPos(1, 8)
- monitor.write("Mode: " .. (autoControl and "AUTO" or "MANUAL"))
- drawButton(reactor.getActive() and "TURN OFF" or "TURN ON", not autoControl)
- end
- local function toggleReactor()
- reactor.setActive(not reactor.getActive())
- end
- local function toggleControlMode()
- autoControl = not autoControl
- end
- local function handleTouch(x, y)
- local _, h = monitor.getSize()
- if y == h - 1 then
- if autoControl then
- toggleControlMode()
- else
- toggleReactor()
- end
- end
- end
- local function autoControlLogic()
- local stored = reactor.getEnergyStored()
- local max = reactor.getEnergyCapacity()
- if stored / max >= 0.95 then
- reactor.setActive(false)
- elseif stored / max <= 0.20 then
- reactor.setActive(true)
- end
- end
- -- === Startup ===
- monitor.setTextScale(1)
- monitor.setBackgroundColor(colors.black)
- monitor.clear()
- monitor.setCursorBlink(false)
- -- === Event Loop ===
- while true do
- drawGUI()
- if autoControl then
- autoControlLogic()
- end
- local event, side, x, y = os.pullEvent()
- if event == "monitor_touch" then
- handleTouch(x, y)
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment