Improve handling of offline players during events
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
Direzione di ricerca
Inizia leggendo AbstractEvent, MCPlayerEvent, Static.GetPlayer() e Static.GetCommandSender(), quindi confronta la gestione di player_login e player_spawn. Chiarisci il comportamento previsto per i giocatori offline e per i giocatori missing-byName, considera le estensioni e aggiungi una copertura completa; il lavoro è completato quando le ricerche nel contesto dell’evento e il comportamento dell’ambiente di binding sono definiti e verificati esplicitamente.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Some events pass a player object for players that are missing from the player list during the event. This causes a CREPlayerOfflineException when getting these players from Static.GetPlayer() or Static.GetCommandSender(), as well as made it tricky to pass the player to the bind environment. This was originally solved by hijacking the player injection system used for capture_runas(), but it wasn't designed for this.
Now, after some changes, the player is added to the environment from MCPlayerEvent instead, but injection is still used for getting players by name (and as a fallback for environment adding). But this happens in AbstractEvent, and this is undesirable as it mixes MC and MethodScript stuff. This will need to be changed some day in the future, but extensions would need to be considered.
Two events use injection still: player_login, where the player is not yet added to the player list at all; and player_spawn where the player is missing from the byName player map but not the byUUID player map (byUUID determines whether the player is "online" or not), which means they're technically online but Static.GetPlayer() can't find them without injection. I consider the player_spawn situation a bug, so it might be better to move the workaround for this to the bukkit abstraction layer.
As for player_login, the player is technically offline, so I'm not sure what the expectation should be here. Due to this, currently you can run functions from player context but not by name, except functions that take a CommandSender instead. (e.g. has_permission(<playerName>, <permissionNode>)) We could change Static.GetPlayer() to take an environment object for situations like this (is player_login the only one?), but that'll affect a lot of functions and some will malfunction in unknown ways for truly offline players. I haven't done a comprehensive test.
- Lingua principale
- Java
- Stelle
- 128
- Fork
- 70
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di EngineHub/CommandHelper
-
discussion wanted documentation
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
EngineHub/CommandHelper#1403 ·
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
EngineHub/CommandHelper#1354 ·
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
EngineHub/CommandHelper#1349 · 3 commenti ·
-
bug
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
EngineHub/CommandHelper#1341 · 2 commenti ·
-
bug discussion wanted
Difficoltà 4/5 3-5 giorni Idoneità per principianti 42/100
EngineHub/CommandHelper#1338 · 2 commenti ·
Tutte le issue di EngineHub/CommandHelper
Issue simili
-
awaiting triage bug Causes friction Hop Gui P1 P2 Transforms
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
apache/flink-agents#1152 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
jenkinsci/blueocean-plugin#5417 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
objectionary/eo-graphs#75 ·