JoinStep
The step onPlayerJoin and onPlayerReady receive: it reaches the
joining player and each entity her join spawns, and nothing else, so a
refused join takes back all of it and leaves the world as it was.
spawn(step, prefab) takes it, and so does every call that takes an
EntityAuthority, such as destroy and attach, each for the player
or an entity her join spawned; a call that takes an Authority, such
as kick or dealDamage, fails to typecheck, and every other
authority over the world is refused while her join runs. She adds her
own traits with koota’s player.add. Unreal’s PostLogin
and Roblox’s PlayerAdded hand over the whole server; here a join
that fails can be undone.