Skip to content

feat(bedrock): add social, party, and Realm Hub support - #7

Closed
AlexProgrammerDE wants to merge 30 commits into
ViaVersionAddons:mainfrom
AlexProgrammerDE:main
Closed

AlexProgrammerDE wants to merge 30 commits into
ViaVersionAddons:mainfrom
AlexProgrammerDE:main

Conversation

@AlexProgrammerDE

@AlexProgrammerDE AlexProgrammerDE commented Sep 24, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • Move Realm Timeline consent to MinecraftAuth 5.0.3 and show a graphic with an explanation before opt in.
  • Expand Bedrock Friends with people discovery, recent players, followers, profiles, friend requests, favorites, achievements, statistics, and a local screenshot gallery.
  • Add party discovery, create/join/leave, member and leader controls, privacy changes, live invitations, and text chat.
  • Add a Realm Hub for event stories, members, Timeline activity, world slots, backups, and Hub and server settings. The Realm list also shows more detail for the selected Realm.
  • Show service errors through the existing toast handling.

Validation

  • ./gradlew build --console=plain passed for the earlier social and party work.
  • ./gradlew compileJava --console=plain, ./gradlew test --console=plain, and git diff --check passed after the Realm Hub work. The repository currently has no test source set, so Gradle reports test NO-SOURCE.
  • Live read-only Realm calls confirmed the world detail, event, activity, and story settings response shapes. The Realm owner mutations and two-account party flows still need live validation.

Known limits for review

  • The available Realm endpoints expose event stories and Timeline activity. Player-authored story posts, comments, likes, and screenshot assets are not implemented because their request format could not be verified. The supplied network capture contained DNS and connectivity checks, with no Realm requests.
  • Xbox does not allow games to add users to the account-wide Mute or Avoid lists, so profile blocking, muting, and reporting remain in the linked Xbox profile: https://learn.microsoft.com/en-us/gaming/gdk/docs/services/fundamentals/identity/privacy/live-privacy-overview
  • The screenshot gallery lists local Java client screenshots. Bedrock cloud showcase upload and browsing are not wired up.
  • Party voice and automatic travel to another member's world or Realm are not implemented. The party implementation currently covers membership, invitations, privacy, and text chat.
  • Party discovery, SignalR invitations, signaling chat, and Realm owner controls have not been verified against a live two-account session. This PR remains a draft for that validation.

Support ViaProxy NetherNet address schemes and upgrade the signaling transport used by Realms. Discover Xbox friends' joinable Bedrock worlds through MPSD, join their sessions, and supply the host nonce during login.

Update the ViaBedrock compatibility calls required by current snapshots and document the new connection paths.
Expose the mutual friends list and online presence alongside joinable Bedrock worlds. Add player search and friend request controls so the social screen supports the same core workflows as the Bedrock Friends drawer.

Load friends, requests, and worlds independently so a slow Xbox endpoint does not hold up the other views.
Show the selected player's Gamertag, presence, relationship, Gamerscore, and friend count from the profile data already returned by PeopleHub.
Request the full PeopleHub decoration set accepted by Xbox Live so friends and friend requests load. Match the current ViaBedrock chunk queue field type so the game can finish entering a friend-hosted world.
Show each friend in a compact two-line row with an explicit connection status. Keep Gamerscore in the labeled profile view and clip long names and activity to prevent overlap. Tighten the navigation and use a screen-specific title.
Xbox Live requires Content-Length: 0 for empty friend mutation requests. Java HTTP/2 omits that header and the service responds with 411, while HTTP/1.1 sends it and succeeds.
Center a single-line result when its display name and gamertag are the same and there is no activity text.
Realms can require each member to opt in to its Timeline before joining. Detect that specific service error and show the member what play activity becomes visible before they choose to opt in. Save only playerOptIn, verify the saved setting, and retry the join.
The new friends and Realms flows hid service error codes behind generic toasts. Preserve Xbox response details, explain known Realms codes, and show actionable HTTP failures across the screens. Refresh Realm state so a closed or expired subscription cannot be joined from stale list data.
Use MinecraftAuth for Realm Timeline consent and expand the Bedrock social UI with discovery, relationship actions, achievements, statistics, and local screenshots. Add party discovery, membership and privacy controls, invitation notifications, and text chat through the Minecraft and PlayFab services.

Xbox does not permit games to mutate its mute or block lists, so those account-wide actions remain on the linked Xbox profile. Live party flows still need two-account validation.
The earlier Bedrock PR landed upstream as a squashed commit with the same tree as our fork. Record that upstream history so this draft PR contains only the new social and party work.
Show an illustrative Timeline grid and explain what other Realm members can see before requesting opt-in. Keep the join action explicit and fit the disclosure and choices in compact game windows.
Forced MinecraftAuth refreshes exchanged a token on every party, friends, and profile request, which hit the token service rate limit. Read valid cached credentials and refresh only after expiry. Stop party discovery from immediately retrying after an error and back off on HTTP 429. Query statistics with Minecraft's known SCID so accounts with no returned achievements can still load stats.
Bedrock records profile statistics and achievement progress under several Xbox title IDs and service configurations. Query the documented batch API, combine values across those configurations, and let player profiles show their own achievements. This restores the figures visible in Bedrock for accounts that play on different platforms.
Send favorites to Xbox Social and use a PlayFab-audience XSTS token for party discovery. Let the party server echo sent chat messages and resolve numeric sender IDs to known names so messages appear once with readable authors.
Expose Realm events, member management, timeline activity, world slots, backups, and settings from the available Bedrock services. Keep player-authored stories out of the UI until their request format is verified.
@AlexProgrammerDE AlexProgrammerDE changed the title feat(bedrock): add social profiles and party controls feat(bedrock): add social, party, and Realm Hub support Sep 24, 2026
Show compact relative times for recent Realm events and local calendar dates for older events. Recompute the label as the list renders so it stays current while the Hub remains open.
Load Xbox game profile pictures for social and Realm screens so player entries show their actual profile images. Use artwork from an installed Bedrock client for Realm events when available, with Minecraft item and skin fallbacks. Cache and bound image downloads to keep rendering responsive.
Render the installed Bedrock UI's Realms title, default Realm preview, and menu background in the corresponding screens. Resize the large preview in memory before registering its texture, and keep text and background fallbacks when local artwork is unavailable.
Use translated in-world skins and Xbox achievement icons when available, and display Bedrock event artwork and timeline graphics at their intended sizes. Render local screenshot previews and Realm-provided images before falling back to installed Bedrock art, so the social and Realm screens retain more of the source client visuals.
Decode Bedrock JPEG artwork before registering textures so Realm previews render. Reserve space beside Realm logos for descriptions and replace the Hub story fallback item with a drawn placeholder because item stacks fail before registry components are bound in this client.
Package the static Realm, Timeline, stats, achievements, and event images used by the mod so rendering no longer depends on a separate Bedrock installation. Keep live account and Realm images on their existing service-backed paths.
Remove bundled Bedrock artwork and custom painted controls so Realm and social screens follow the existing Minecraft UI. Keep service-provided previews, player portraits, consent actions, and Timeline data while simplifying their presentation.
Keep the client-derived Realm thumbnails when Realms provides no preview, and restore the achievement icon fallback when Xbox provides no icon. Keep these content assets separate from the removed Bedrock screen artwork.
Realm story entries use client-provided pictures for specific events. Render them as small content thumbnails beside the text while keeping the standard ViaFabricPlus list layout.
Show the client-derived Timeline example below the consent text when space permits and return the four stat category icons to their rows. Keep the ViaFabricPlus screen layout and controls.
The restored Bedrock statistic icons are black silhouettes and blend into ViaFabricPlus list rows. Tint them light gray when loading while preserving the bundled originals and their transparency.
The client icons crop at the current stat row size and add visual noise. Keep stat values as plain list text while retaining the Timeline consent illustration.
Match the multiplayer server list's double-click and selection-key behavior for actionable Bedrock rows. Route Enter from chat, search, and form fields through their existing guarded actions so keyboard use behaves like the corresponding buttons.
AlexProgrammerDE added a commit to StackAnvil/viafabricplus-bedrock that referenced this pull request Oct 7, 2026
Bring the Bedrock social and Realms integration into one upstream feature so its account flows and screens can be reviewed together. Add friend profiles, party chat and invitations, Realm Hub details, achievements, statistics, and the image loading used by those screens.

This adapts the work from viafabricplus-bedrock PR ViaVersionAddons#7. Keep it as one feature patch because the screens share account and social services and should be promoted together.

Clear the friends screen's pending join state after handing off to the connection screen. A disconnect can return to that same screen, where the stale state otherwise keeps Join disabled.

Preserve the selected friend world during list refreshes so the Join action continues to target the item the player chose.

SignalR 9.0.4 depends on MessagePack 0.8.20, which embeds Jackson 2.9 jars. Use the current MessagePack adapter and align Jackson 2 before Fabric nests the dependencies. Jackson 3 hosts still load Jackson 2 annotations, so the old annotation jar can break their startup.

Compare list double clicks with Minecraft's named left mouse button. Minecraft 26.3 numbers it as 1, so a hardcoded zero silently disabled double-click activation in social lists and their downstream Realm and server browsers.
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.

1 participant