Repository navigation
feat(bedrock): add social, party, and Realm Hub support - #7
Closed
AlexProgrammerDE wants to merge 30 commits into
Closed
AlexProgrammerDE wants to merge 30 commits into
AlexProgrammerDE wants to merge 30 commits into
Conversation
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.
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.
3 tasks
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Validation
./gradlew build --console=plainpassed for the earlier social and party work../gradlew compileJava --console=plain,./gradlew test --console=plain, andgit diff --checkpassed after the Realm Hub work. The repository currently has no test source set, so Gradle reportstest NO-SOURCE.Known limits for review