SuperMcBrent

worker_essence_farm_reader

Oct 31st, 2025 (edited)
345
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.69 KB | Gaming | 0 0
  1. local importName = "left"
  2. local exportName = "right"
  3. local import = peripheral.wrap(importName)
  4. local export = peripheral.wrap(exportName)
  5. peripheral.find("modem", rednet.open)
  6.  
  7. local itemsFile = "counts.txt"
  8. local tempFile  = "counts.tmp"
  9. local flagFile  = "clear.flg"
  10.  
  11. -- load existing counts
  12. local items     = {}
  13. if fs.exists(itemsFile) then
  14.     local f = fs.open(itemsFile, "r")
  15.     items = textutils.unserialize(f.readAll()) or {}
  16.     f.close()
  17. end
  18.  
  19. function StripEssence(itemname)
  20.     return itemname:gsub("_essence", "")
  21. end
  22.  
  23. function AddItem(item)
  24.     local name = StripEssence(item.displayName)
  25.     items[name] = (items[name] or 0) + item.count
  26. end
  27.  
  28. -- atomic save of items
  29. function SaveItemsToFile()
  30.     local f = fs.open(tempFile, "w")
  31.     f.write(textutils.serialize(items))
  32.     f.close()
  33.     if fs.exists(itemsFile) then fs.delete(itemsFile) end
  34.     fs.move(tempFile, itemsFile)
  35. end
  36.  
  37. -- check if a clear flag is present
  38. function CheckAndClear()
  39.     if fs.exists(flagFile) then
  40.         -- reset items
  41.         items = {}
  42.         if fs.exists(itemsFile) then fs.delete(itemsFile) end
  43.         if fs.exists(tempFile) then fs.delete(tempFile) end
  44.         fs.delete(flagFile)
  45.         print("Essence counts cleared (flag)")
  46.     end
  47. end
  48.  
  49. function HandleRequest(sender, message, protocol)
  50.     print("Handling: " .. tostring(message))
  51.     if message == "provideEssenceCount" then
  52.         local snapshot = {}
  53.         if fs.exists(itemsFile) then
  54.             local f = fs.open(itemsFile, "r")
  55.             snapshot = textutils.unserialize(f.readAll()) or {}
  56.             f.close()
  57.         end
  58.         rednet.send(sender, snapshot, protocol)
  59.     elseif message == "clearEssenceCount" then
  60.         fs.open(flagFile, "w").close()
  61.         print("Clear request received")
  62.     end
  63. end
  64.  
  65. function RequestListener()
  66.     local sender, message, protocol = rednet.receive()
  67.     if type(message) == "table" and protocol == "batchedRequests" then
  68.         print("Received batch of " .. #message .. " requests")
  69.         for _, req in ipairs(message) do
  70.             HandleRequest(sender, req.message, req.protocol)
  71.         end
  72.     else
  73.         HandleRequest(sender, message, protocol)
  74.     end
  75. end
  76.  
  77. function MoveItemsLoop()
  78.     while true do
  79.         CheckAndClear()
  80.  
  81.         for i = 1, 27 do
  82.             local item = import.getItemDetail(i)
  83.             if item then
  84.                 AddItem(item)
  85.                 import.pushItems(exportName, i, item.count)
  86.             end
  87.         end
  88.  
  89.         SaveItemsToFile()
  90.         sleep(0.1)
  91.     end
  92. end
  93.  
  94. parallel.waitForAll(
  95.     MoveItemsLoop,
  96.     function()
  97.         while true do
  98.             RequestListener()
  99.         end
  100.     end
  101. )
  102.  
Add Comment
Please, Sign In to add comment