-
Notifications
You must be signed in to change notification settings - Fork 0
Stream cam #6
Description
Is your feature request related to a problem? Please describe.
Tijdens events of streams hebben we een hands-free spectator camera nodig die soepel spelers kan volgen zonder dat staff handmatig hoeft te teleporteren of targets te wisselen. We willen daarnaast een eerlijk, permissie-gebaseerd wachtrijsysteem zodat spelers zich kunnen aanmelden om gevolgd te worden. Als niemand in de wachtrij staat, moet de camera alsnog nuttig zijn door vooraf ingestelde vaste posities te filmen (bijv. spawn/arena). Handmatig regelen is foutgevoelig, kost tijd en geeft schokkerige streams.
Describe the solution you'd like
Een Stream Cam functie in onze Paper “server-features” plugin:
-
Stream Cam-rol (permissie):
Speler metstreamcam.usekan cam-modus starten/stoppen. Bij start: forceer Spectator en sla vorige gamemode op voor herstel. -
Volg-wachtrij (permissie-gebaseerd):
Spelers metstreamcam.queue.joinkunnen via/streamcam joinde wachtrij in. De cam volgt automatisch de kop van de rij metsetSpectatorTarget.- Cyclen: na
Xseconden (configureerbaar) springt de cam naar de volgende in de rij. - Checks: sla offline/vanished/verboden werelden over.
- Grace: bij
/streamcam leaveof disconnect uit de wachtrij verwijderd.
- Cyclen: na
-
Idle-gedrag (lege wachtrij):
Film vaste posities. Staff kan benoemde cam-spots opslaan (world + xyz + yaw/pitch).- Modi:
static <naam>ofcycledoor een lijst met configureerbare verblijftijd. - Optioneel: zachte pan door langzaam yaw/pitch te bewegen op een scheduler.
- Modi:
-
Commands:
/streamcam join– in de wachtrij (vereiststreamcam.queue.join)/streamcam leave– verlaat de wachtrij/streamcam queue– bekijk de wachtrij en huidige target/streamcam start//streamcam stop– cam aan/uit (vereiststreamcam.use)/streamcam pos add <naam>– sla huidige locatie op als cam-spot (vereiststreamcam.manage)/streamcam pos del <naam>//streamcam pos list– beheer spots/streamcam idle <static|cycle> [naam]– stel idle-modus in (vereiststreamcam.manage)
-
UX & veiligheid:
Rustige actionbar/titles: “Nu volgend: {player} ({index}/{size})”, “Volgende in {seconds}s”. Rate-limit join/leave.
Cam-operator onkwetsbaar, botsingsloos, optioneel verborgen in tablist. Herstel vorige gamemode/state bij stop of disconnect. -
Multi-cam (optioneel): meerdere cam-operators tegelijk; elk met eigen wachtrij en idle-state.
Describe alternatives you've considered
- Handmatig spectaten/teleporteren: hoge operator-last en foutgevoelig.
- ReplayMod/externe capture-account: goed voor edits, minder voor live met permissies/wachtrij-fairness.
- Eenvoudige
/spectate <speler>macro’s: geen timing-cycle, geen wachtrij, geen idle-fallback.
Additional context
Doelplatform: Paper. Voorstel permissies & config:
streamcam:
enabled: true
cycle_seconds: 20 # tijd per speler in de wachtrij
queue_max_size: 100
require_same_world: false
skip_vanished: true
idle:
mode: "static" # static | cycle
spot: "spawn"
dwell_seconds: 15
gentle_pan: true
messages:
now_following: "🎥 Nu volgend: {player} ({index}/{size})"
next_in: "Volgende in {seconds}s"
joined_queue: "Je staat in de Stream Cam-wachtrij. Positie: {pos}."
left_queue: "Je hebt de wachtrij verlaten."
permissions:
use: "streamcam.use"
manage: "streamcam.manage"
join: "streamcam.queue.join"
view: "streamcam.queue.view"Acceptatiecriteria
- Speler met
streamcam.usekan/streamcam startuitvoeren; wordt Spectator en volgt automatisch de wachtrij-kop. /streamcam join|leave|queuewerken met correcte permissie-checks en duidelijke feedback.- Bij meerdere spelers in de wachtrij cycled de cam elk
cycle_seconds, waarbij ongeldige targets netjes worden overgeslagen. - Bij lege wachtrij filmt de cam een vaste positie (of cycled spots) tot iemand joint.
- Stoppen/herstarten herstelt gamemode/inventory veilig; geen console-errors bij wereldwissels, target-death of operator-disconnect.
(Implementatiehint, facultatief)
- Houd per cam state bij:
{mode: FOLLOW|IDLE, queue: Deque<UUID>, currentTarget, lastSwitchAt, idleMode, idleSpots[]}. - Gebruik
Player#setGameMode(SPECTATOR)enPlayer#setSpectatorTarget(target). - Persist spots in YAML of lichte DB (world UUID, x/y/z, yaw, pitch).
- Luister naar
PlayerQuitEvent,PlayerChangedWorldEvent, vanish-hooks en een herhalende taak voor cycle/pan.