Skip to content

Add Xbox split-screen support#6091

Open
psalkowski wants to merge 1 commit intoGeyserMC:masterfrom
psalkowski:feature/xbox-splitscreen-support
Open

Add Xbox split-screen support#6091
psalkowski wants to merge 1 commit intoGeyserMC:masterfrom
psalkowski:feature/xbox-splitscreen-support

Conversation

@psalkowski
Copy link

@psalkowski psalkowski commented Jan 7, 2026

Summary

Adds Xbox split-screen (couch co-op) support, allowing multiple players to join from a single Xbox console.

Background

This feature has been requested by the community (see Reddit, #750, #1459, #2521). Previous attempts were made in #976 and #3109 but were never merged.

Implementation

Sub-client handling

  • Enabled SubClientLoginPacket processing (removed from ILLEGAL_SERIALIZER)
  • Added setupSubClientSession() in LoginEncryptionUtils to authenticate sub-clients
  • Sub-clients inherit locale and server address from parent session (not included in their JWT)

Disconnect detection

  • Added DisconnectPacket handler to properly detect when sub-client leaves split-screen
  • Sub-clients share the upstream connection with parent, so we don't close it on sub-client disconnect

Reconnect handling

  • When sub-client rejoins after disconnect, CloudburstMC reuses the same BedrockServerSession
  • We detect closed session and create a fresh GeyserSession for clean rejoin

Session tracking

  • Added parentSession field to track sub-client relationships
  • Added sessionByXuid() lookup in SessionManager

Testing

Tested on Xbox Series X with split-screen:

  • Two players joining simultaneously
  • Sub-client leaving and rejoining
  • Parent disconnecting (sub-clients also disconnect)
  • Server transfers between backend servers

Download

Binary file can be found here: https://github.com/psalkowski/Geyser/releases/download/v2.9.2-splitscreen/Geyser-Velocity-2.9.2-splitscreen.jar

@onebeastchris
Copy link
Member

Hello! Thank you for the PR. However, there's a few questions about the approach here:

  • Can you explain the reasoning behind replacing the current GeyserSession? Can we not take the approach used in Add support for splitscreen players #3109?
  • Have you tested Guest accounts? What values do those send in the SubClientLoginPacket?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants