Advertisement
cc-editor

raffinierie

Feb 4th, 2025
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.84 KB | None | 0 0
  1. settings.load()
  2.  
  3. -- #region Setup
  4. local me_bridge = peripheral.wrap(settings.get("refinery.me_bridge"))
  5. local fermenter_item = settings.get("refinery.fermenter_item")
  6. local squeezer_item = settings.get("refinery.squeezer_item")
  7. local refineries = {}
  8.  
  9. local recipient_id = settings.get("rednet.recipient")
  10. local protocol = settings.get("rednet.protocol")
  11. local modem_side = settings.get("rednet.modemSide")
  12.  
  13. local info = {
  14.     refineries = {},
  15.     storage_fermenter = {
  16.         item = fermenter_item,
  17.         amount = 0
  18.     },
  19.     storage_squeezer = {
  20.         item = squeezer_item,
  21.         amount = 0
  22.     },
  23.     storage_fuel = {
  24.         amount = 0,
  25.         max_amount = 4608
  26.     }
  27. }
  28.  
  29. for i, unit in pairs(settings.get("refinery.units")) do
  30.     refineries[i] = {
  31.         fermenter = peripheral.wrap(unit.fermenter),
  32.         squeezer = peripheral.wrap(unit.squeezer),
  33.         refinery = peripheral.wrap(unit.refinery),
  34.         disable_threshold = unit.disable_threshold,
  35.     }
  36.  
  37.     info.refineries[i] = {
  38.         id = i,
  39.         fermenter = "unknown",
  40.         fermenter_storage = 0,
  41.         fermenter_storage_max = 512,
  42.         fermenter_tank = 0,
  43.         fermenter_tank_max = 24000,
  44.         squeezer = "unknown",
  45.         squeezer_storage = 0,
  46.         squeezer_storage_max = 512,
  47.         squeezer_tank = 0,
  48.         squeezer_tank_max = 24000,
  49.         refinery = "unknown",
  50.         refinery_tank_fermenter = 0,
  51.         refinery_tank_fermenter_max = 24000,
  52.         refinery_tank_squeezer = 0,
  53.         refinery_tank_squeezer_max = 24000
  54.     }
  55. end
  56.  
  57. rednet.open(modem_side)
  58. -- #endregion
  59.  
  60. local function is_saturated(machine)
  61.     local storage_amount = 0
  62.     local saturated = true
  63.     for i = 1, machine.getInputSlotCount(), 1 do
  64.         local stack = machine.getInputStack(i)
  65.         if stack == nil then
  66.            saturated = false
  67.         else
  68.             if stack.count < 56 then
  69.                 saturated = false
  70.             end
  71.             storage_amount = storage_amount + stack.count
  72.         end
  73.     end
  74.  
  75.     if not saturated then
  76.         print("  is not saturated")
  77.     end
  78.     return saturated, storage_amount
  79. end
  80.  
  81. local function is_item_stored(item_name, item_amount)
  82.     local item = me_bridge.getItem({name = item_name})
  83.     if item == nil or item.amount == nil then
  84.         if item_amount < 1 then
  85.             print("  minimum required item amount not defined")
  86.             return true
  87.         end
  88.         print("  required items not stored")
  89.         return false
  90.     end
  91.     if item.amount < item_amount then
  92.         print("  not enough required items stored")
  93.         return false
  94.     end
  95.     return true
  96. end
  97.  
  98. local function get_storage()
  99.     local item = me_bridge.getItem({name = fermenter_item})
  100.     local amount = 0
  101.     if fermenter_item ~= nil then
  102.         amount = fermenter_item.amount
  103.     end
  104.     info.storage_fermenter.amount = amount
  105.  
  106.     item = me_bridge.getItem({name = squeezer_item})
  107.     amount = 0
  108.     if squeezer_item ~= nil then
  109.         amount = squeezer_item.amount
  110.     end
  111.     info.storage_squeezer.amount = amount
  112.  
  113.     info.storage_fuel.amount = me_bridge.getUsedFluidStorage()
  114.     info.storage_fuel.max_amount = me_bridge.getTotalFluidStorage()
  115. end
  116.  
  117. local function check_unit(unit_id)
  118.     print("Checking Fermenter "..unit_id)
  119.     local is_fermenter_saturated, fermenter_items_stored = is_saturated(refineries[unit_id].fermenter)
  120.     local is_fermenter_stored = is_item_stored(fermenter_item, refineries[unit_id].disable_threshold)
  121.     if is_fermenter_saturated and is_fermenter_stored then
  122.         print("  -> enabled")
  123.         refineries[unit_id].fermenter.setEnabled(true)
  124.         info.refineries[unit_id].fermenter = "enabled"
  125.     else
  126.         print("  -> disabled")
  127.         refineries[unit_id].fermenter.setEnabled(false)
  128.         info.refineries[unit_id].fermenter = "disabled"
  129.     end
  130.     info.refineries[unit_id].fermenter_storage = fermenter_items_stored
  131.     info.refineries[unit_id].fermenter_tank = refineries[unit_id].fermenter.getFluid().amount
  132.  
  133.     print("Checking Squeezer "..unit_id)
  134.     local is_squeezer_saturated, squeezer_items_stored = is_saturated(refineries[unit_id].squeezer)
  135.     local is_squeezer_stored = is_item_stored(squeezer_item, refineries[unit_id].disable_threshold)
  136.     if is_squeezer_saturated and is_squeezer_stored then
  137.         print("  -> enabled")
  138.         refineries[unit_id].squeezer.setEnabled(true)
  139.         info.refineries[unit_id].squeezer = "enabled"
  140.     else
  141.         print("  -> disabled")
  142.         refineries[unit_id].squeezer.setEnabled(false)
  143.         info.refineries[unit_id].squeezer = "disabled"
  144.     end
  145.     info.refineries[unit_id].squeezer_storage = squeezer_items_stored
  146.     info.refineries[unit_id].squeezer_tank = refineries[unit_id].squeezer.getFluid().amount
  147.  
  148.  
  149.     if refineries[unit_id].fermenter.isRunning() then
  150.         info.refineries[unit_id].fermenter = "active"
  151.     end
  152.     if refineries[unit_id].squeezer.isRunning() then
  153.         info.refineries[unit_id].squeezer = "active"
  154.     end
  155.     if refineries[unit_id].refinery.isRunning() then
  156.         info.refineries[unit_id].refinery = "active"
  157.     elseif refineries[unit_id].refinery.getEnabled() then
  158.         info.refineries[unit_id].refinery = "enabled"
  159.     else
  160.         info.refineries[unit_id].refinery = "disabled"
  161.     end
  162.     info.refineries[unit_id].refinery_tank_fermenter = refineries[unit_id].refinery.getRightInputFluid().amount
  163.     info.refineries[unit_id].refinery_tank_squeezer = refineries[unit_id].refinery.getLeftInputFluid().amount
  164. end
  165.  
  166. local function send_update()
  167.     print("Sending update via [" .. protocol .. "] to PC" .. recipient_id)
  168.     rednet.send(recipient_id, info, protocol)
  169.     print("Update sent")
  170. end
  171.  
  172. while true do
  173.     for i, _ in ipairs(refineries) do
  174.         check_unit(i)
  175.     end
  176.     get_storage()
  177.     send_update()
  178.     sleep(5)
  179. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement