View difference between Paste ID: styiy98d and F5dmPq1s
SHOW: | | - or go back to the newest paste.
1
local a=http.get"https://raw.githubusercontent.com/rxi/json.lua/bee7ee3431133009a97257bde73da8a34e53c15c/json.lua"local b=fs.open("/libs/json.lua","w")b.write(a.readAll())a.close()b.close()
2
3
local json = require("/libs/json")
4
local worldurl = "https://dynmap.switchcraft.pw/up/world/world/"
5
local tX, tY = term.getSize()
6
local reqdelay = 1
7
local errdelay = 10
8
local world = {}
9
10
local function writeAt(text, x, y, tc, bg)
11
  term.setCursorPos(x, y)
12
  term.setTextColor(tc or colors.white)
13
  term.setBackgroundColor(bg or colors.black)
14
  term.write(text)
15
end
16
17
local function getMinecraftTime(servertime)
18
    return {
19
      hours = ((servertime / 1000) + 6) % 24,
20
      minutes = ((servertime / 1000) % 1) * 60,
21
      isDay = (servertime >= 0 and servertime < 13700),
22
    }
23
end
24
25
local function getWorld(world)
26
  if world == "world" then return "Overworld"
27
  elseif world == "-some-other-bogus-world-" then return "Nether"
28
  elseif world == "DIM1" then return "The End"
29
  else return "? "..world
30
  end
31
end
32
33
local function draw(world)
34
  term.setBackgroundColor(colors.black)
35
  term.clear()
36-
  term.setCursorPos(1, tY)
36+
37-
  term.setTextColor(colors.red)
37+
38-
  term.write('<---')
38+
39
  if world.hasStorm then weather = "Raining"
40
    if world.isThundering then weather = "Thunderstorm"
41
    end
42
  end
43
44
  writeAt(("%d players online | %#2d:%02d (%s) | %s"):format(world.currentcount, time.hours, time.minutes, time.isDay and "Day" or "Night", weather), 1, 1)
45
46
  for id, player in pairs(world.players) do
47
    local bg = (id % 2 == 0) and colors.black or colors.gray
48
    local cy = 2+id
49
    term.setCursorPos(1, cy)
50
    term.setBackgroundColor(bg)
51
    term.clearLine()
52
    writeAt("\16 "..player.name, 1, cy, nil, bg)
53
    writeAt(("| \3%#2d \4%#2d |"):format(player.health, player.armor), 20, cy, nil, bg)
54
    writeAt(getWorld(player.world), 32, cy, nil, bg)
55
    writeAt(("| %#5d, %#3d, %#5d"):format(math.floor(player.x), math.floor(player.y), math.floor(player.z)), 42, cy, nil, bg)
56
  end
57
end
58
59
local timeout = os.startTimer(0)
60
while true do
61
  local event, url, data, data2 = os.pullEvent()
62
  if event == "http_success" then
63
    local recv = data.readAll()
64
    data.close()
65
    world = json.decode(recv)
66
    if world then
67
      draw(world)
68
      timeout = os.startTimer(reqdelay)
69
    else
70
      printError("Could not decode json: "..recv)
71
      timeout = os.startTimer(errdelay)
72
    end
73
  elseif event == "http_failure" then
74
    printError("Could not connect to "..url)
75
    timeout = os.startTimer(errdelay)
76
  elseif event == "timer" and url == timeout then http.request(worldurl)
77
  elseif event == "term_resize" then
78
    tX, tY = term.getSize()
79
    draw(world)
80
  elseif event == "key" then
81
    if url == keys.q then
82
      sleep(0)
83
      break
84-
  elseif event == "monitor_touch" then
84+
85-
      if data < 5 and data2 == tY then
85+
86-
          break
86+