SHOW:
|
|
- or go back to the newest paste.
1 | - | -- playerDetectorDoor -- |
1 | + | -- player_detectorDoor -- |
2 | - | -- https://pastebin.com/tKfbvZT2 -- |
2 | + | |
3 | local detectionRange = 8 -- Detection range in blocks | |
4 | - | local detectionRange = 8 -- Detection range in blocks |
4 | + | local redstoneDuration = 4 -- Delay (in seconds) before turning off after player leaves |
5 | - | local redstoneDuration = 4 -- Duration (in seconds) for redstone signal |
5 | + | local invertMode = false -- Invert signal logic |
6 | - | local invertMode = false -- Invert redstone signal: true = always on, off when player detected |
6 | + | local redstoneSide = "top" -- Side where redstone is emitted |
7 | - | local redstoneSide = "top" -- Side where redstone is emitted |
7 | + | |
8 | -- FINDING THE PLAYER DETECTOR AUTOMATICALLY -- | |
9 | local detector = nil | |
10 | for _, name in ipairs(peripheral.getNames()) do | |
11 | if peripheral.getType(name) == "player_detector" then | |
12 | - | if peripheral.getType(name) == "playerDetector" then |
12 | + | |
13 | break | |
14 | end | |
15 | end | |
16 | ||
17 | if not detector then | |
18 | print("No player detector found!") | |
19 | return | |
20 | end | |
21 | ||
22 | print("Player detector found on " .. peripheral.getName(detector)) | |
23 | print("Monitoring for players...") | |
24 | ||
25 | -- TRACKING STATE -- | |
26 | local playerPresent = false | |
27 | local lastPlayerTime = os.clock() | |
28 | local redstoneState = false | |
29 | - | local playerDetected = #players > 0 |
29 | + | |
30 | -- FUNCTION TO SET REDSTONE CLEANLY | |
31 | local function setRedstone(state) | |
32 | - | redstone.setOutput(redstoneSide, not playerDetected) |
32 | + | if redstoneState ~= state then |
33 | redstone.setOutput(redstoneSide, state) | |
34 | - | redstone.setOutput(redstoneSide, playerDetected) |
34 | + | redstoneState = state |
35 | print("Redstone " .. (state and "ON" or "OFF")) | |
36 | end | |
37 | - | if playerDetected then |
37 | + | |
38 | - | sleep(redstoneDuration) |
38 | + | |
39 | - | redstone.setOutput(redstoneSide, invertMode) -- Reset output after duration |
39 | + | |
40 | while true do | |
41 | local players = detector.getPlayersInRange(detectionRange) | |
42 | - | sleep(0.01) -- Short delay to prevent excessive CPU usage |
42 | + | local detected = #players > 0 |
43 | ||
44 | if detected then | |
45 | lastPlayerTime = os.clock() | |
46 | playerPresent = true | |
47 | else | |
48 | playerPresent = false | |
49 | end | |
50 | ||
51 | local elapsed = os.clock() - lastPlayerTime | |
52 | ||
53 | local shouldBeOn | |
54 | if invertMode then | |
55 | shouldBeOn = not playerPresent and elapsed < redstoneDuration | |
56 | else | |
57 | shouldBeOn = playerPresent or (elapsed < redstoneDuration) | |
58 | end | |
59 | ||
60 | setRedstone(shouldBeOn) | |
61 | ||
62 | sleep(0.1) | |
63 | end | |
64 |