Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 45 additions & 25 deletions src/main/java/net/ornithemc/meta/data/VersionDatabase.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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"})
Expand All @@ -60,6 +62,9 @@ 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])");

public static ConfigV3 config;

private static final String modifyForIntermediaryGeneration(String s, int generation) {
Expand All @@ -82,6 +87,34 @@ public static final MavenMetadataParser oslModuleMetadataParser(String module) {
return new MavenMetadataParser(ORNITHE_MAVEN_URL, "net.ornithemc.osl", module);
}

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 filterLoaderVersions(int generation, LoaderType loaderType) {
return versions -> {
boolean foundStableVersion = false;

for (Iterator<? extends BaseVersion> it = versions.iterator(); it.hasNext(); ) {
BaseVersion version = it.next();

if (generation >= 2 && invalidLoaderVersionsPattern(loaderType).matcher(version.getVersion()).matches()) {
it.remove();
} else if (!foundStableVersion && isPublicLoaderVersion(loaderType, version)) {
foundStableVersion = true;
version.setStable(true);
}
}
};
}

private static List<String> oslModules() {
List<String> modules = new ArrayList<>();

Expand Down Expand Up @@ -123,7 +156,7 @@ private static List<String> oslModules() {
private final Int2ObjectMap<List<BaseVersion>> game;
private final Int2ObjectMap<List<MavenVersion>> intermediary;
private final Int2ObjectMap<List<MavenBuildGameVersion>> feather;
private final Map<LoaderType, List<MavenBuildVersion>> loader;
private final Int2ObjectMap<Map<LoaderType, List<MavenBuildVersion>>> loader;
private final Map<String, List<MavenVersion>> oslDependencies;
private final Map<String, List<MavenVersion>> oslModules;

Expand All @@ -139,7 +172,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<>();
}
Expand All @@ -151,27 +184,13 @@ 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, 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);
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) {
Expand All @@ -188,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 {
Expand Down Expand Up @@ -297,8 +317,8 @@ public List<MavenBuildGameVersion> getFeather(int generation) {
return feather.get(generation);
}

public List<MavenBuildVersion> getLoader(LoaderType type) {
return loader.get(type).stream().filter(VersionDatabase::isPublicLoaderVersion).collect(Collectors.toList());
public List<MavenBuildVersion> getLoader(int generation, LoaderType type) {
return loader.get(generation).get(type).stream().filter(v -> isPublicLoaderVersion(type, v)).collect(Collectors.toList());
}

public List<MavenVersion> getOslDependencies(String version) {
Expand All @@ -309,7 +329,7 @@ public List<MavenVersion> getOslModule(String module) {
return oslModules.get(module);
}

public List<MavenBuildVersion> getAllLoader(LoaderType type) {
return Collections.unmodifiableList(loader.get(type));
public List<MavenBuildVersion> getAllLoader(int generation, LoaderType type) {
return Collections.unmodifiableList(loader.get(generation).get(type));
}
}
8 changes: 4 additions & 4 deletions src/main/java/net/ornithemc/meta/web/EndpointsV3.java
Original file line number Diff line number Diff line change
Expand Up @@ -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));

Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -219,7 +219,7 @@ private static List<?> getLoaderInfoAll(Context context, int generation, LoaderT

List<LoaderInfoV3> 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;
Expand Down