SHOW:
|
|
- or go back to the newest paste.
1 | -- Wrap peripherals | |
2 | local monitor = peripheral.wrap("top") | |
3 | local silo = peripheral.wrap("left") | |
4 | local playerDetector = peripheral.wrap("right") | |
5 | ||
6 | -- Setup the monitor | |
7 | monitor.clear() | |
8 | monitor.setTextScale(1) | |
9 | monitor.setTextColor(colors.white) | |
10 | monitor.setBackgroundColor(colors.black) | |
11 | ||
12 | -- Monitor dimensions | |
13 | local width, height = monitor.getSize() | |
14 | ||
15 | -- Table to store player names and their displayed positions | |
16 | local playerDisplay = {} | |
17 | local selectedPlayer = nil -- Store the selected player's name | |
18 | ||
19 | -- Check if the player detector supports coordinate retrieval | |
20 | local hasGetPlayerCoords = playerDetector and playerDetector.getPlayerPos ~= nil | |
21 | ||
22 | -- Helper function to update the monitor | |
23 | local function updateMonitor(players) | |
24 | monitor.clear() | |
25 | playerDisplay = {} -- Reset playerDisplay table | |
26 | ||
27 | if #players > 0 then | |
28 | monitor.setCursorPos(1, 1) | |
29 | monitor.setTextColor(colors.cyan) | |
30 | monitor.write("Players Nearby:") | |
31 | ||
32 | for i, player in ipairs(players) do | |
33 | local x = 2 | |
34 | local y = i + 2 | |
35 | playerDisplay[i] = { name = player, posX = x, posY = y } | |
36 | monitor.setCursorPos(x, y) | |
37 | if player == selectedPlayer then | |
38 | monitor.setTextColor(colors.green) -- Highlight selected player | |
39 | else | |
40 | monitor.setTextColor(colors.white) | |
41 | end | |
42 | monitor.write(player) | |
43 | end | |
44 | else | |
45 | monitor.setCursorPos(1, math.floor(height / 2)) | |
46 | monitor.setTextColor(colors.red) | |
47 | monitor.write("No Players Detected") | |
48 | end | |
49 | end | |
50 | ||
51 | -- Helper function to display player coordinates | |
52 | local function displayPlayerCoords(playerName) | |
53 | local coords = hasGetPlayerCoords and playerDetector.getPlayerPos(playerName) or nil | |
54 | ||
55 | -- Clear only the coordinate section | |
56 | monitor.setBackgroundColor(colors.black) | |
57 | for i = height - 5, height - 2 do | |
58 | monitor.setCursorPos(1, i) | |
59 | monitor.write(string.rep(" ", width)) | |
60 | end | |
61 | ||
62 | monitor.setCursorPos(1, height - 5) | |
63 | monitor.setTextColor(colors.yellow) | |
64 | monitor.write("Player: " .. playerName) | |
65 | if coords then | |
66 | monitor.setCursorPos(1, height - 4) | |
67 | monitor.write("X: " .. coords.x) | |
68 | monitor.setCursorPos(1, height - 3) | |
69 | monitor.write("Y: " .. coords.y) | |
70 | monitor.setCursorPos(1, height - 2) | |
71 | monitor.write("Z: " .. coords.z) | |
72 | else | |
73 | monitor.setCursorPos(1, height - 4) | |
74 | monitor.setTextColor(colors.red) | |
75 | monitor.write("Coordinates unavailable.") | |
76 | end | |
77 | end | |
78 | - | -- Keep the coordinates displayed for 10 seconds |
78 | + | |
79 | - | sleep(10) |
79 | + | |
80 | while true do | |
81 | -- Check player detector | |
82 | local players = playerDetector.getPlayersInRange(1000000000000) -- "Infinite" range | |
83 | updateMonitor(players) | |
84 | ||
85 | -- Wait for a monitor touch event | |
86 | local event, side, x, y = os.pullEvent("monitor_touch") | |
87 | ||
88 | -- Check if a player name was clicked | |
89 | for _, player in pairs(playerDisplay) do | |
90 | if x >= player.posX and x <= player.posX + #player.name and y == player.posY then | |
91 | selectedPlayer = player.name | |
92 | displayPlayerCoords(selectedPlayer) | |
93 | break | |
94 | end | |
95 | end | |
96 | ||
97 | -- Sleep to refresh every 1 second | |
98 | sleep(1) | |
99 | end | |
100 |