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 | + |