GetPlayerDataRes: {
    avatar?: PBAvatarBase;
    displayName: string;
    emotes: PBAvatarEquippedData["emoteUrns"];
    entity: Entity;
    isGuest: boolean;
    joinedAtMs: number;
    name: string;
    nameResolved: boolean;
    position: TransformType["position"] | undefined;
    userId: string;
    wearables: PBAvatarEquippedData["wearableUrns"];
}

Type declaration

  • Optional avatar?: PBAvatarBase
  • displayName: string

    Always-renderable name: the profile name when resolved, otherwise a shortened address. Never empty — prefer this over name for anything shown to a player.

  • emotes: PBAvatarEquippedData["emoteUrns"]
  • entity: Entity

    The avatar entity currently backing this player.

    Tracking is keyed on the ADDRESS, so this can change without any event: if one entity for an address disappears and another appears within the same tick, the player never left, and no arrival or departure fires even though entity now points somewhere else. Re-read it with getPlayer(userId) rather than caching it — anything attached to a stale entity is attached to nothing.

  • isGuest: boolean
  • joinedAtMs: number

    Date.now() of the tick this player was first seen, or 0 if not tracked yet.

  • name: string

    The raw avatar profile name, or '' while the profile has not replicated. Use displayName for a value that is always renderable.

  • nameResolved: boolean

    True once a real profile name has been seen for this player. Sticky: a profile that later reports an empty name does not clear it.

  • position: TransformType["position"] | undefined
  • userId: string
  • wearables: PBAvatarEquippedData["wearableUrns"]