Repository navigation
feat(bedrock): add classic Dressing Room - #11
AlexProgrammerDE wants to merge 4 commits into
Conversation
Let players select Steve, Alex, or an imported skin and cape for each Bedrock account. Send that appearance in the login client data while preserving the friend-world nonce. Changes apply on the next connection because live skin updates need a separate protocol path.
Use Minecraft’s player skin widget so the selected skin renders at the preview’s actual size and supports rotation. Position the controls, preview, and status relative to the available screen height so the title and footer do not collide with them.
Minecraft runs with AWT headless, so its AWT file dialog fails when importing skins or capes. Use LWJGL Native File Dialog on the UI thread and bundle its desktop native libraries. Clarify that an imported cape does not grant a Minecraft account cape and may not be shown by every server or client.
Minecraft 26.3 already runs its window through SDL3, whose asynchronous file dialog can select PNGs without another native dependency. Keep the callback and filter alive for the dialog lifetime, then hand the selected path back to the game thread.
Research: owned Bedrock capes and persona packsI traced the Bedrock Dressing Room cape flow with a signed-in account and verified the resulting catalogue entries against the account's Marketplace entitlements. This is a possible path for a later owned-cape picker alongside the custom PNG import in this PR.
The package format and a working decryption approach are shown in MerelyCapes. PlayFab's Get Item documentation describes the catalogue content URL, and the Bedrock pack format notes describe How this could extend the Dressing RoomAn account-scoped catalogue service could list owned capes with their real thumbnails, then download and decode the selected asset on demand. The appearance model would keep the official item, piece, and pack IDs separate from a custom file import. We would also need to verify the Bedrock login claims for official persona capes, handle token refresh, bound downloads and archive extraction, and avoid logging tokens or retaining decrypted assets across accounts. The same entitlement, catalogue, and package pipeline could later discover owned Character Creator pieces, emotes, and skin-pack content. Those need separate work for geometry, animation, tinting, preview rendering, and the relevant Bedrock protocol fields. This PR remains scoped to classic skins and custom cape import. |
Summary
Validation
./gradlew check buildpasses, including appearance persistence and image validation tests../gradlew runClientlaunches Minecraft 26.3 without a startup or mixin error and is running with the latest changes.Review notes
Appearance changes take effect on the next Bedrock connection. This PR covers classic skins and capes; live skin updates and Character Creator assets need separate protocol and rendering work. Imported cape data does not unlock a Minecraft account cape. The login protocol carries cape image data, but visibility may depend on the server and other clients.