From c56e226c8cfa4d795d4bf65d559e291c393f2e25 Mon Sep 17 00:00:00 2001 From: Space Walker Date: Tue, 9 Sep 2025 11:41:52 +0200 Subject: [PATCH 1/5] set minimum fabric loader version for gen2 --- .../ornithemc/meta/data/VersionDatabase.java | 61 ++++++++++++------- .../net/ornithemc/meta/web/EndpointsV3.java | 8 +-- 2 files changed, 42 insertions(+), 27 deletions(-) diff --git a/src/main/java/net/ornithemc/meta/data/VersionDatabase.java b/src/main/java/net/ornithemc/meta/data/VersionDatabase.java index 599d219..0e60aa9 100644 --- a/src/main/java/net/ornithemc/meta/data/VersionDatabase.java +++ b/src/main/java/net/ornithemc/meta/data/VersionDatabase.java @@ -28,6 +28,7 @@ import net.ornithemc.meta.utils.MinecraftLauncherMeta; import net.ornithemc.meta.utils.MavenPomParser; import net.ornithemc.meta.utils.MavenMetadataParser; +import net.ornithemc.meta.utils.MavenMetadataParser.StableVersionIdentifier; import net.ornithemc.meta.utils.VersionManifest; import net.ornithemc.meta.web.LibraryUpgradesV3; import net.ornithemc.meta.web.LibraryUpgradesV3.LibraryUpgrade; @@ -39,6 +40,7 @@ import java.util.*; import java.util.function.Function; import java.util.function.Predicate; +import java.util.regex.Pattern; import java.util.stream.Collectors; @JsonIgnoreProperties({"manifest"}) @@ -60,6 +62,8 @@ public class VersionDatabase { public static final MavenMetadataParser OSL_METADATA_PARSER = new MavenMetadataParser(ORNITHE_MAVEN_URL, "net.ornithemc", "osl"); public static final MavenPomParser OSL_POM_PARSER = new MavenPomParser(ORNITHE_MAVEN_URL, "net.ornithemc", "osl"); + private static final Pattern INVALID_FABRIC_LOADER_VERSIONS_GEN2 = Pattern.compile("^(?:0\\.(?:\\d|1[0-6])\\.|0\\.17\\.[01])"); + public static ConfigV3 config; private static final String modifyForIntermediaryGeneration(String s, int generation) { @@ -82,6 +86,23 @@ public static final MavenMetadataParser oslModuleMetadataParser(String module) { return new MavenMetadataParser(ORNITHE_MAVEN_URL, "net.ornithemc.osl", module); } + public static StableVersionIdentifier filterFabricLoaderVersions(int generation) { + return versions -> { + boolean foundStableVersion = false; + + for (Iterator it = versions.iterator(); it.hasNext(); ) { + BaseVersion version = it.next(); + + if (generation >= 2 && INVALID_FABRIC_LOADER_VERSIONS_GEN2.matcher(version.getVersion()).matches()) { + it.remove(); + } else if (!foundStableVersion && isPublicLoaderVersion(version)) { + foundStableVersion = true; + version.setStable(true); + } + } + }; + } + private static List oslModules() { List modules = new ArrayList<>(); @@ -123,7 +144,7 @@ private static List oslModules() { private final Int2ObjectMap> game; private final Int2ObjectMap> intermediary; private final Int2ObjectMap> feather; - private final Map> loader; + private final Int2ObjectMap>> loader; private final Map> oslDependencies; private final Map> oslModules; @@ -139,7 +160,7 @@ private VersionDatabase() { this.game = new Int2ObjectOpenHashMap<>(); this.intermediary = new Int2ObjectOpenHashMap<>(); this.feather = new Int2ObjectOpenHashMap<>(); - this.loader = new EnumMap<>(LoaderType.class); + this.loader = new Int2ObjectOpenHashMap<>(); this.oslDependencies = new HashMap<>(); this.oslModules = new HashMap<>(); } @@ -151,27 +172,21 @@ public static VersionDatabase generate() throws Exception { for (int generation = 1; generation <= config.latestIntermediaryGeneration; generation++) { database.intermediary.put(generation, intermediaryMetadataParser(generation).getVersions(MavenVersion::new)); database.feather.put(generation, featherMetadataParser(generation).getVersions(MavenBuildGameVersion::new)); + database.loader.put(generation, new EnumMap<>(LoaderType.class)); + database.loader.get(generation).put(LoaderType.FABRIC, FABRIC_LOADER_METADATA_PARSER.getVersions(MavenBuildVersion::new, filterFabricLoaderVersions(generation))); + database.loader.get(generation).put(LoaderType.QUILT, QUILT_LOADER_METADATA_PARSER.getVersions(MavenBuildVersion::new, list -> { + for (BaseVersion version : list) { + // Quilt publishes beta versions of their loader, filter those out + if (isPublicLoaderVersion(version) && !version.getVersion().contains("-")) { + version.setStable(true); + break; + } + } + })); } database.raven = RAVEN_METADATA_PARSER.getVersions(MavenBuildGameVersion::new); database.sparrow = SPARROW_METADATA_PARSER.getVersions(MavenBuildGameVersion::new); database.nests = NESTS_METADATA_PARSER.getVersions(MavenBuildGameVersion::new); - database.loader.put(LoaderType.FABRIC, FABRIC_LOADER_METADATA_PARSER.getVersions(MavenBuildVersion::new, list -> { - for (BaseVersion version : list) { - if (isPublicLoaderVersion(version)) { - version.setStable(true); - break; - } - } - })); - database.loader.put(LoaderType.QUILT, QUILT_LOADER_METADATA_PARSER.getVersions(MavenBuildVersion::new, list -> { - for (BaseVersion version : list) { - // Quilt publishes beta versions of their loader, filter those out - if (isPublicLoaderVersion(version) && !version.getVersion().contains("-")) { - version.setStable(true); - break; - } - } - })); database.installer = INSTALLER_METADATA_PARSER.getVersions(MavenUrlVersion::new); database.osl = OSL_METADATA_PARSER.getVersions(MavenVersion::new); for (MavenVersion version : database.osl) { @@ -297,8 +312,8 @@ public List getFeather(int generation) { return feather.get(generation); } - public List getLoader(LoaderType type) { - return loader.get(type).stream().filter(VersionDatabase::isPublicLoaderVersion).collect(Collectors.toList()); + public List getLoader(int generation, LoaderType type) { + return loader.get(generation).get(type).stream().filter(VersionDatabase::isPublicLoaderVersion).collect(Collectors.toList()); } public List getOslDependencies(String version) { @@ -309,7 +324,7 @@ public List getOslModule(String module) { return oslModules.get(module); } - public List getAllLoader(LoaderType type) { - return Collections.unmodifiableList(loader.get(type)); + public List getAllLoader(int generation, LoaderType type) { + return Collections.unmodifiableList(loader.get(generation).get(type)); } } diff --git a/src/main/java/net/ornithemc/meta/web/EndpointsV3.java b/src/main/java/net/ornithemc/meta/web/EndpointsV3.java index 8c8b56d..bc0be95 100644 --- a/src/main/java/net/ornithemc/meta/web/EndpointsV3.java +++ b/src/main/java/net/ornithemc/meta/web/EndpointsV3.java @@ -75,11 +75,11 @@ public static void setup() { jsonGetF("/libraries/:game_version", generation -> context -> withLimitSkip(context, getLibraries(context, generation))); - jsonGet("/fabric-loader", context -> withLimitSkip(context, OrnitheMeta.database.getLoader(LoaderType.FABRIC))); + jsonGetF("/fabric-loader", generation -> context -> withLimitSkip(context, OrnitheMeta.database.getLoader(generation, LoaderType.FABRIC))); jsonGetF("/fabric-loader/:game_version", generation -> context -> withLimitSkip(context, getLoaderInfoAll(context, generation, LoaderType.FABRIC))); jsonGetF("/fabric-loader/:game_version/:loader_version", generation -> context -> getLoaderInfo(context, generation, LoaderType.FABRIC)); - jsonGet("/quilt-loader", context -> withLimitSkip(context, OrnitheMeta.database.getLoader(LoaderType.QUILT))); + jsonGetF("/quilt-loader", generation -> context -> withLimitSkip(context, OrnitheMeta.database.getLoader(generation, LoaderType.QUILT))); jsonGetF("/quilt-loader/:game_version", generation -> context -> withLimitSkip(context, getLoaderInfoAll(context, generation, LoaderType.QUILT))); jsonGetF("/quilt-loader/:game_version/:loader_version", generation -> context -> getLoaderInfo(context, generation, LoaderType.QUILT)); @@ -184,7 +184,7 @@ private static Object getLoaderInfo(Context context, int generation, LoaderType String gameVersion = context.pathParam("game_version"); String loaderVersion = context.pathParam("loader_version"); - MavenBuildVersion loader = OrnitheMeta.database.getAllLoader(type).stream() + MavenBuildVersion loader = OrnitheMeta.database.getAllLoader(generation, type).stream() .filter(mavenBuildVersion -> loaderVersion.equals(mavenBuildVersion.getVersion())) .findFirst().orElse(null); @@ -219,7 +219,7 @@ private static List getLoaderInfoAll(Context context, int generation, LoaderT List infoList = new ArrayList<>(); - for(MavenBuildVersion loader : OrnitheMeta.database.getLoader(type)){ + for(MavenBuildVersion loader : OrnitheMeta.database.getLoader(generation, type)){ infoList.add(new LoaderInfoV3(type, loader, mappings).populateMeta()); } return infoList; From 78713f40c7237845aedeaca0c63ab6e8c4d0eb7e Mon Sep 17 00:00:00 2001 From: Space Walker Date: Sun, 26 Oct 2025 10:24:47 +0100 Subject: [PATCH 2/5] update minimum Fabric Loader version to 0.17.3 --- src/main/java/net/ornithemc/meta/data/VersionDatabase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/ornithemc/meta/data/VersionDatabase.java b/src/main/java/net/ornithemc/meta/data/VersionDatabase.java index 0e60aa9..e7085d7 100644 --- a/src/main/java/net/ornithemc/meta/data/VersionDatabase.java +++ b/src/main/java/net/ornithemc/meta/data/VersionDatabase.java @@ -62,7 +62,7 @@ public class VersionDatabase { public static final MavenMetadataParser OSL_METADATA_PARSER = new MavenMetadataParser(ORNITHE_MAVEN_URL, "net.ornithemc", "osl"); public static final MavenPomParser OSL_POM_PARSER = new MavenPomParser(ORNITHE_MAVEN_URL, "net.ornithemc", "osl"); - private static final Pattern INVALID_FABRIC_LOADER_VERSIONS_GEN2 = Pattern.compile("^(?:0\\.(?:\\d|1[0-6])\\.|0\\.17\\.[01])"); + private static final Pattern INVALID_FABRIC_LOADER_VERSIONS_GEN2 = Pattern.compile("^(?:0\\.(?:\\d|1[0-6])\\.|0\\.17\\.[0-2])"); public static ConfigV3 config; From 85af9a19f7ed33b8e85d9e9aee1f2bd5c5946b76 Mon Sep 17 00:00:00 2001 From: Space Walker Date: Sun, 26 Oct 2025 10:32:37 +0100 Subject: [PATCH 3/5] set minimum Quilt Loader version to 0.29.3 --- .../ornithemc/meta/data/VersionDatabase.java | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/main/java/net/ornithemc/meta/data/VersionDatabase.java b/src/main/java/net/ornithemc/meta/data/VersionDatabase.java index e7085d7..bc09ac6 100644 --- a/src/main/java/net/ornithemc/meta/data/VersionDatabase.java +++ b/src/main/java/net/ornithemc/meta/data/VersionDatabase.java @@ -63,6 +63,7 @@ public class VersionDatabase { public static final MavenPomParser OSL_POM_PARSER = new MavenPomParser(ORNITHE_MAVEN_URL, "net.ornithemc", "osl"); private static final Pattern INVALID_FABRIC_LOADER_VERSIONS_GEN2 = Pattern.compile("^(?:0\\.(?:\\d|1[0-6])\\.|0\\.17\\.[0-2])"); + private static final Pattern INVALID_QUILT_LOADER_VERSIONS_GEN2 = Pattern.compile("^(?:0\\.(?:\\d|1\\d|2[0-8])\\.|0\\.29\\.[0-2])"); public static ConfigV3 config; @@ -103,6 +104,25 @@ public static StableVersionIdentifier filterFabricLoaderVersions(int generation) }; } + public static StableVersionIdentifier filterQuiltLoaderVersions(int generation) { + return versions -> { + boolean foundStableVersion = false; + + for (Iterator it = versions.iterator(); it.hasNext(); ) { + BaseVersion version = it.next(); + + if (generation >= 2 && INVALID_QUILT_LOADER_VERSIONS_GEN2.matcher(version.getVersion()).matches()) { + it.remove(); + } else + // Quilt publishes beta versions of their loader, filter those out + if (!foundStableVersion && isPublicLoaderVersion(version) && !version.getVersion().contains("-")) { + foundStableVersion = true; + version.setStable(true); + } + } + }; + } + private static List oslModules() { List modules = new ArrayList<>(); @@ -174,15 +194,7 @@ public static VersionDatabase generate() throws Exception { database.feather.put(generation, featherMetadataParser(generation).getVersions(MavenBuildGameVersion::new)); database.loader.put(generation, new EnumMap<>(LoaderType.class)); database.loader.get(generation).put(LoaderType.FABRIC, FABRIC_LOADER_METADATA_PARSER.getVersions(MavenBuildVersion::new, filterFabricLoaderVersions(generation))); - database.loader.get(generation).put(LoaderType.QUILT, QUILT_LOADER_METADATA_PARSER.getVersions(MavenBuildVersion::new, list -> { - for (BaseVersion version : list) { - // Quilt publishes beta versions of their loader, filter those out - if (isPublicLoaderVersion(version) && !version.getVersion().contains("-")) { - version.setStable(true); - break; - } - } - })); + database.loader.get(generation).put(LoaderType.QUILT, QUILT_LOADER_METADATA_PARSER.getVersions(MavenBuildVersion::new, filterQuiltLoaderVersions(generation))); } database.raven = RAVEN_METADATA_PARSER.getVersions(MavenBuildGameVersion::new); database.sparrow = SPARROW_METADATA_PARSER.getVersions(MavenBuildGameVersion::new); From b4c0a9c42c701d296912efd84f750562989fff38 Mon Sep 17 00:00:00 2001 From: Space Walker Date: Tue, 28 Oct 2025 15:58:58 +0100 Subject: [PATCH 4/5] clean up --- .../ornithemc/meta/data/VersionDatabase.java | 43 ++++++++----------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/src/main/java/net/ornithemc/meta/data/VersionDatabase.java b/src/main/java/net/ornithemc/meta/data/VersionDatabase.java index bc09ac6..2f9acd2 100644 --- a/src/main/java/net/ornithemc/meta/data/VersionDatabase.java +++ b/src/main/java/net/ornithemc/meta/data/VersionDatabase.java @@ -87,35 +87,27 @@ public static final MavenMetadataParser oslModuleMetadataParser(String module) { return new MavenMetadataParser(ORNITHE_MAVEN_URL, "net.ornithemc.osl", module); } - public static StableVersionIdentifier filterFabricLoaderVersions(int generation) { - return versions -> { - boolean foundStableVersion = false; - - for (Iterator it = versions.iterator(); it.hasNext(); ) { - BaseVersion version = it.next(); - - if (generation >= 2 && INVALID_FABRIC_LOADER_VERSIONS_GEN2.matcher(version.getVersion()).matches()) { - it.remove(); - } else if (!foundStableVersion && isPublicLoaderVersion(version)) { - foundStableVersion = true; - version.setStable(true); - } - } - }; + public static Pattern invalidLoaderVersionsPattern(LoaderType loaderType) { + switch (loaderType) { + case FABRIC: + return INVALID_FABRIC_LOADER_VERSIONS_GEN2; + case QUILT: + return INVALID_QUILT_LOADER_VERSIONS_GEN2; + default: + throw new IllegalStateException("no invalid loader versions pattern for loader type " + loaderType.getName()); + } } - public static StableVersionIdentifier filterQuiltLoaderVersions(int generation) { + public static StableVersionIdentifier filterLoaderVersions(int generation, LoaderType loaderType) { return versions -> { boolean foundStableVersion = false; for (Iterator it = versions.iterator(); it.hasNext(); ) { BaseVersion version = it.next(); - if (generation >= 2 && INVALID_QUILT_LOADER_VERSIONS_GEN2.matcher(version.getVersion()).matches()) { + if (generation >= 2 && invalidLoaderVersionsPattern(loaderType).matcher(version.getVersion()).matches()) { it.remove(); - } else - // Quilt publishes beta versions of their loader, filter those out - if (!foundStableVersion && isPublicLoaderVersion(version) && !version.getVersion().contains("-")) { + } else if (!foundStableVersion && isPublicLoaderVersion(loaderType, version)) { foundStableVersion = true; version.setStable(true); } @@ -193,8 +185,8 @@ public static VersionDatabase generate() throws Exception { database.intermediary.put(generation, intermediaryMetadataParser(generation).getVersions(MavenVersion::new)); database.feather.put(generation, featherMetadataParser(generation).getVersions(MavenBuildGameVersion::new)); database.loader.put(generation, new EnumMap<>(LoaderType.class)); - database.loader.get(generation).put(LoaderType.FABRIC, FABRIC_LOADER_METADATA_PARSER.getVersions(MavenBuildVersion::new, filterFabricLoaderVersions(generation))); - database.loader.get(generation).put(LoaderType.QUILT, QUILT_LOADER_METADATA_PARSER.getVersions(MavenBuildVersion::new, filterQuiltLoaderVersions(generation))); + database.loader.get(generation).put(LoaderType.FABRIC, FABRIC_LOADER_METADATA_PARSER.getVersions(MavenBuildVersion::new, filterLoaderVersions(generation, LoaderType.FABRIC))); + database.loader.get(generation).put(LoaderType.QUILT, QUILT_LOADER_METADATA_PARSER.getVersions(MavenBuildVersion::new, filterLoaderVersions(generation, LoaderType.QUILT))); } database.raven = RAVEN_METADATA_PARSER.getVersions(MavenBuildGameVersion::new); database.sparrow = SPARROW_METADATA_PARSER.getVersions(MavenBuildGameVersion::new); @@ -215,8 +207,9 @@ public static VersionDatabase generate() throws Exception { return database; } - private static boolean isPublicLoaderVersion(BaseVersion version) { - return true; + private static boolean isPublicLoaderVersion(LoaderType type, BaseVersion version) { + // Quilt publishes beta versions of their loader, filter those out + return !(type == LoaderType.QUILT && version.getVersion().contains("-")); } private void loadMcData() throws IOException { @@ -325,7 +318,7 @@ public List getFeather(int generation) { } public List getLoader(int generation, LoaderType type) { - return loader.get(generation).get(type).stream().filter(VersionDatabase::isPublicLoaderVersion).collect(Collectors.toList()); + return loader.get(generation).get(type).stream().filter(v -> isPublicLoaderVersion(type, v)).collect(Collectors.toList()); } public List getOslDependencies(String version) { From 92e4d413dbf11eb9d792e2e1b29fa882204db382 Mon Sep 17 00:00:00 2001 From: Space Walker Date: Thu, 30 Oct 2025 19:19:26 +0100 Subject: [PATCH 5/5] fix invalid loader versions patterns --- src/main/java/net/ornithemc/meta/data/VersionDatabase.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/ornithemc/meta/data/VersionDatabase.java b/src/main/java/net/ornithemc/meta/data/VersionDatabase.java index 2f9acd2..04cb224 100644 --- a/src/main/java/net/ornithemc/meta/data/VersionDatabase.java +++ b/src/main/java/net/ornithemc/meta/data/VersionDatabase.java @@ -62,8 +62,8 @@ public class VersionDatabase { public static final MavenMetadataParser OSL_METADATA_PARSER = new MavenMetadataParser(ORNITHE_MAVEN_URL, "net.ornithemc", "osl"); public static final MavenPomParser OSL_POM_PARSER = new MavenPomParser(ORNITHE_MAVEN_URL, "net.ornithemc", "osl"); - private static final Pattern INVALID_FABRIC_LOADER_VERSIONS_GEN2 = Pattern.compile("^(?:0\\.(?:\\d|1[0-6])\\.|0\\.17\\.[0-2])"); - private static final Pattern INVALID_QUILT_LOADER_VERSIONS_GEN2 = Pattern.compile("^(?:0\\.(?:\\d|1\\d|2[0-8])\\.|0\\.29\\.[0-2])"); + private static final Pattern INVALID_FABRIC_LOADER_VERSIONS_GEN2 = Pattern.compile("^(?:0\\.(?:\\d|1[0-6])\\..+|0\\.17\\.[0-2])"); + private static final Pattern INVALID_QUILT_LOADER_VERSIONS_GEN2 = Pattern.compile("^(?:0\\.(?:\\d|1\\d|2[0-8])\\..+|0\\.29\\.[0-2])"); public static ConfigV3 config;