View difference between Paste ID: dAkJ4FKM and ReEzLtjn
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