QuiltMC / quilt-standard-libraries

A set of libraries to assist in making Quilt mods.
Apache License 2.0
152 stars 85 forks source link

QSL depends on a very wide range of minecraft versions by default #312

Closed AlexIIL closed 1 year ago

AlexIIL commented 1 year ago

This is due to QMJ's versions field of a depends block interpreting prefix-less versions (like 1.20.1) as being prefixed with ^, which means it will be loaded in any version of minecraft after 1.20 and before 2.0. I think the fix for this is to always prefix the minecraft version with = here: https://github.com/QuiltMC/quilt-standard-libraries/blob/3e912ab0bfc3272b99ab6121d80f3e65ef9c6933/build-logic/src/main/java/qsl/internal/json/QmjBuilder.java#L51-L59 (This doesn't affect snapshots)

I found this out from quilt-loader 0.19.2-beta.2, which logs a warning when encountering unnecessary version constraints:

Warnings for quilt.mod.json at: '/qfapi-7.0.3_qsl-6.0.3_fapi-0.83.1_mc-1.20.1.jar!/META-INF/jars/block_content_registry-6.0.3+1.20.1.jar!/quilt.mod.json'

(FWIW I think the decision to default to ^ is an odd one, and probably causes a lot of confusion. :/ Perhaps in future QMJ specs we can remove it? Either way that doesn't help us now)

EnnuiL commented 1 year ago

About the default being ^, I believe it was a decision made in order to match common SemVer implementations, and it had regular dependencies in mind rather than the least-semver-following component ever; I'd rather have it stay ^ (with the clarification being provided through the in-dev-hell JSON schema) than use = because of Minecraft

Anyway, huh, looks like we did miss a = here, and we didn't mind that much due to many of our versions supporting one version only, with nothing else other than adding an extra version being done for cases like this one

EnnuiL commented 1 year ago

Fixed on QSL v6.0.4, which adopts the new method introduced by Quilt Loader 0.19.2