robathome icon

ChestMon - remote

robathome | PRO | 10/30/25 03:42:15 PM UTC (Edited) | 0 ⭐ | 272 👁️ | Never ⏰ | []
text |

1.66 KB

|

None

|

0 👍

/

0 👎

-- inv_client_loop.lua  (Advanced Wireless Pocket Computer)
local PROTO = "inv"
local REFRESH = 2        -- seconds
local side = peripheral.getName(peripheral.find("modem")) or error("no modem")
rednet.open(side)
 local items, top = {}, 1
 local function fetch()
  rednet.broadcast("list", PROTO)
  local id, resp = rednet.receive(PROTO, 3)
  if id and type(resp) == "table" then items = resp end
end
 local function draw()
  term.clear()
  term.setCursorPos(1,1)
  print(("Items (%d)  —  %s"):format(#items, textutils.formatTime(os.clock(), true)))
  print(("-"):rep(28))
  local w,h = term.getSize()
  local visible = h - 3
  for i = 0, visible-1 do
    local row = items[top + i]
    if not row then break end
    term.setCursorPos(1, 3 + i)
    print(("%-24s x%d"):format(row.name or "?", row.count or 0))
  end
  term.setCursorPos(1, h)
  print("[Q] quit   [↑/↓] scroll")
end
 local function clampTop()
  local w,h = term.getSize()
  local visible = h - 3
  if top < 1 then top = 1 end
  local maxTop = math.max(1, #items - visible + 1)
  if top > maxTop then top = maxTop end
end
 -- main loop
while true do
  fetch()
  clampTop()
  draw()
   -- wait up to REFRESH seconds for input; otherwise refresh again
  local t = os.startTimer(REFRESH)
  while true do
    local e, a = os.pullEvent()
    if e == "timer" and a == t then
      break
    elseif e == "key" then
      if a == keys.q then
        term.clear(); term.setCursorPos(1,1); return
      elseif a == keys.up then
        top = top - 1; clampTop(); draw()
      elseif a == keys.down then
        top = top + 1; clampTop(); draw()
      end
    end
  end
end
 

Comments