virtualdxs

Lava Power Controller (1.16.5)

Sep 22nd, 2021
984
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. threshold = 0.8
  2. notifThreshold = 0.25
  3. mon = peripheral.find("monitor")
  4. modem = peripheral.find("modem")
  5. notifSentFlag = false
  6.  
  7. cells = table.pack(peripheral.find("thermal:energy_cell"))
  8.  
  9. function notifSend (text)
  10.   modem.transmit(1337,1,text)
  11. end
  12.  
  13. function writeMonStatus (state,pct)
  14.   mon.clear()
  15.   if mon.setTextScale ~= nil then
  16.     mon.setTextScale(1)
  17.     local width, height = mon.getSize()
  18.     if width < 15 or height < 5 then -- Small monitor - scale down
  19.       mon.setTextScale(0.5)
  20.     else -- Large monitor - scale up
  21.       local scale = math.min(width / 14, height / 2, 5)
  22.       scale = math.floor(scale * 2) / 2 -- multiple of 0.5
  23.       mon.setTextScale(scale)
  24.     end
  25.   end
  26.   mon.setCursorPos(1,1)
  27.   mon.write("State: " .. (state and "On" or "Off"))
  28.   mon.setCursorPos(1,2)
  29.   mon.write("Energy: " .. pct .. "%")
  30. end
  31.  
  32. function main ()
  33.   local energyCur = 0
  34.   local energyMax = 0
  35.  
  36.   for _,cell in ipairs(cells) do -- ipairs avoids returning count (key "n")
  37.     energyCur = energyCur + cell.getEnergy()
  38.     energyMax = energyMax + cell.getEnergyCapacity()
  39.   end
  40.  
  41.   local energyFraction = energyCur/energyMax
  42.   print(energyFraction)
  43.   local energyPercent = string.format("%.2f",
  44.     math.floor(energyFraction*10000)/100)
  45.  
  46.   if energyFraction < notifThreshold then
  47.     if not notifSentFlag then
  48.       notifSentFlag = true
  49.       notifSend("Warning: Base power capacity at "
  50.       ..energyPercent.."%")
  51.     end
  52.   else
  53.     notifSentFlag = false
  54.   end
  55.  
  56.   local state = energyFraction < threshold
  57.   redstone.setOutput("top",state)
  58.   writeMonStatus(state,energyPercent)
  59. end
  60.  
  61. while true do
  62.   status,err = pcall(main)
  63.   if not status then print(err) end
  64.   sleep(5)
  65. end
RAW Paste Data