Skip to content

Tie a Mod profile to a server bookmark, and join with the right Mods in one press #505

Description

@Pixnop

Summary

A player who plays on several servers keeps one set of Mods per server and switches by hand before joining. Let a server bookmark remember the Mod profile it needs, so joining that server switches the Installation to that profile first, in one press.

Why

Raised on the Discord by SpookieBoogie: "Will there be a way to set up a direct connection with a profile, since I would assume most people would have a profile dedicated for a specific server, at least that's how I do it." Zaldaryon was thinking the same thing. Today the two halves exist and do not know about each other: profiles switch an Installation's Mods (#428), bookmarks join a server (#460, PR #475), and nothing ties one to the other. The failure it removes is the common one: joining with the wrong Mods and being refused by the server, or loading a modded world with a set it was not built for.

What the player sees

  • On the Manage Servers page of an Installation, each bookmark gains an optional "Mods profile" field, chosen from the Installation's saved profiles, with "Any profile" as the default (today's behaviour, nothing switches).
  • Pressing Join on a bookmark whose profile is already active launches straight away, as today.
  • When the profile differs, the launcher says which profile it will switch to, asks once, then switches and joins. The switch uses the same path as the Mod profiles popup, so nothing is downloaded and nothing is copied.
  • A bookmark whose profile was deleted says so on the row and joins without switching, rather than failing.
  • A modpack export that carries the bookmarks carries the profile name too, and an import maps it back by name when the target Installation has a profile with that name.

How it could work here

  • ServerBookmarkType gains an optional modProfileId, normalized in src/domain/servers/bookmarks.ts the way the rest of the record is (unknown or missing means none; a value is kept as an opaque id, the profile file is the source of truth).
  • The pairing rule lives in the domain: given the Installation's profiles, the active one and the bookmark, answer "join as is", "switch to this profile then join", or "profile missing, join as is", with its own tests.
  • The renderer composes it: useModProfiles for the switch, the existing join path from Server bookmarks per Installation, and a modpack that carries them #460 for the launch, one confirmation dialog, the existing notifications for the outcomes.
  • The profile file already lives in the Installation folder (riftlauncher-mod-profiles.json, format 1), so a profile id means nothing outside its Installation: the field must be dropped when a bookmark is copied to another Installation or imported without a matching name.

Out of scope

Creating a profile from a server's Mod list (that is the server Mods work, #459). Switching profiles automatically when the game is already running. Any change to how profiles themselves are stored.

Acceptance

  • A bookmark can carry a profile, and "Any profile" keeps today's behaviour.
  • Join with a different profile asks once, switches, then joins; the launch carries the same arguments as before.
  • Join with the profile already active does not ask and does not touch the Mods folder.
  • A deleted profile is reported on the row and does not block the join.
  • The switch refuses while the Mods folder is busy, like every other write path.
  • Export and import of a modpack carry the profile by name, and drop it when the name is unknown.
  • Domain tests for the pairing rule, renderer tests for the three outcomes, and a headless check of the whole flow.

Reported on the Discord by SpookieBoogie. Builds on #428 and #460.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions