-
Notifications
You must be signed in to change notification settings - Fork 68
Description
Tasks
- Store filter data in the config
- Automatically convert profile
game_versionandmod_loaderfields to filters - Implement set-intersection based filtering
Feedback on why the version was considered incompatible #76 - Implement the filters
- Mod loader (prefer)
- Mod loader (any)
- Game version (strict)
- Game version (minor)
This will allow all game versions that were considered to not have significant changes between them, e.g.1.21.2and1.21.3. This is determined using Modrinth's version list tag. - Release channel
Add support for release channels #196
Alpha and Beta will be mapped to prerelease in GitHub releases. - Version/File/Release title
- Version/File/Release description/changelog
- Filename
- Filter options when creating and configuring a profile
- Implement the
-Mand-Vflags for filters with a warning to switch to the new system #486
The Problem
- Version matching may be inaccurate for CurseForge / Modrinth mods due to mod devs not labelling version compatibility in enough detail.
- Version matching may be inaccurate for GitHub mods due to nonstandard naming conventions.
- The workaround for this is to use the flag
--dont-check-game-versionor the config option"check_game_version": falsewhich introduces its own issues if either a) the profile is for a non-current game version, or b) ferium can't determine what game version the mod is for. And after updating mods or the profile game version, it can be tedious to review which mods dont need the"check_game_version": falsesetting anymore. The fallback feature uses the most common version patterns to help users get the mod versions they want using more robust workarounds that don't break profile configs in the future.
My Solution
Introduce a new flag --fallback=<spec> which specifies which mod version(s) to consider as compatible if the original cannot be found. This replaces --dont-check-game-version. I recommend several options for fallback specifications which collectively would fix #29, #95, and #154.
Syntax
The syntax would be something like ferium add X --fallback=<spec> where <spec> is one of the following:
latest: use the latest version of the mod available. This is the easiest way to get a mod to work when the profile version is the latest minecraft version. However it has a significant flaw - it is not future-proof. Creating a profile today with this setting may work now but might break when mods update. The current game version check shares this issue, and as a result I would like to propose a way to save / export a profile that saves a specific jar file URL with each mod that points to the exact URL thatferium upgradewould pull from. That way, when a user gets a profile working (after troubleshooting launching & ingame mod conflicts) they can go back to ferium and "lock" the versions to make the profile to work at any point in the far future (seeurloption below).minor: The latest minor version for the same major version. If the profile is set to 1.18 or 1.18.3 for example, then setting--fallback=minormeans the latest mod release (maybe its earlier, like 1.18.1, or later, like 1.18.9) should be considered compatible. This option is almost the same aslatestexcept it would not download a 1.19 version into a 1.18.2 profile. Think of this as the "probably future-proof version oflatest." The "probably" comes from the fact that I don't know what to do if the game version can't be decided, OR if the mod later releases a breaking update for a later minor version.previous: Attempt to use the mod version for the minor game version preceeding the profile game version. Example: If 1.18.2 does not exist,previousis short for "1.18.1". If the profile is set to 1.18.1, then "previous" means 1.18. This would be the ideal setting for making a 1.16.5 profile where almost all 1.16.4 mods would work just fine because 1.16.5 had only a couple small security changes. More generally this option is to address mods which don't update compatibility info for a minor version update because the previous version still works.major: Consider any mod release for the previous major version to be compatible. This is the perfect solution for mods likeFakeDomi/FastChestwhich "bucket" their releases by major version.x.y.z(number / version string): A comma-separated list of version numbers to check in order if the exact version fails. For exampleferium add X --fallback=1.18.1,1.18would attempt to find a mod release for 1.18.1 first, then try 1.18 after.url: a URL to a specific github release, github jar file within a release, curseforge file download url etc. Github jar file URLs at a minimum, compatibility with the "save" feature idea above at a maximum. Tells ferium explicitly where to find a mod if it doesn't find a matching version. This is necessary for mods such asA5b84/dark-loading-screenwhich only lists version compatibility in their changelog.
User Workflow and When the fallback gets used
Suppose the user makes a profile using ferium add ..., then later (maybe days or weeks later) runs ferium upgrade. When creating a profile the user may have to specify fallback options to get compatible versions of mods, or simply accept that some mods may not be compatible (#142). When they run ferium upgrade, an updated mod version which exactly matches the profile game version may be available and should be used instead. Second, the actual mod version that gets used as the result of a fallback option may be updated, so that's important to detect when running ferium upgrade. I think this logic fits in with what ferium does already but I wanted to be specific.
Max Version Constraints
If this gets implemented I would also propose separate and independant flag to constrain the mod versions that are considered compatible. The purpose would be to future-proof the use of fallback=latest. Another way to do that would be exporting exact mod versions. Perhaps something like one of these:
--max-version=profile: If a mod which is marked compatible via a fallback has a version which ferium can detect and the version is greater than the profile game version, this option marks the candidate as incompatible.--max-version=major: If the profile is for1.18.1or1.18, this disqualifies mods which have an identifiable version of1.19.x / 1.19+.--max-version=<date>, where<date>is something like20220623which restricts compatibility to releases before this date