Support downloading NeoForge from official maven.

This commit is contained in:
Tungstend 2024-02-07 14:54:23 +08:00
parent b139b540ff
commit 98dfa6d0d1
2 changed files with 78 additions and 3 deletions

View File

@ -22,7 +22,7 @@ import com.tungsten.fclcore.download.fabric.FabricVersionList;
import com.tungsten.fclcore.download.forge.ForgeBMCLVersionList; import com.tungsten.fclcore.download.forge.ForgeBMCLVersionList;
import com.tungsten.fclcore.download.game.GameVersionList; import com.tungsten.fclcore.download.game.GameVersionList;
import com.tungsten.fclcore.download.liteloader.LiteLoaderVersionList; import com.tungsten.fclcore.download.liteloader.LiteLoaderVersionList;
import com.tungsten.fclcore.download.neoforge.NeoForgeBMCLVersionList; import com.tungsten.fclcore.download.neoforge.NeoForgeOfficialVersionList;
import com.tungsten.fclcore.download.optifine.OptiFineBMCLVersionList; import com.tungsten.fclcore.download.optifine.OptiFineBMCLVersionList;
import com.tungsten.fclcore.download.quilt.QuiltAPIVersionList; import com.tungsten.fclcore.download.quilt.QuiltAPIVersionList;
import com.tungsten.fclcore.download.quilt.QuiltVersionList; import com.tungsten.fclcore.download.quilt.QuiltVersionList;
@ -35,7 +35,7 @@ public class MojangDownloadProvider implements DownloadProvider {
private final FabricVersionList fabric; private final FabricVersionList fabric;
private final FabricAPIVersionList fabricApi; private final FabricAPIVersionList fabricApi;
private final ForgeBMCLVersionList forge; private final ForgeBMCLVersionList forge;
private final NeoForgeBMCLVersionList neoforge; private final NeoForgeOfficialVersionList neoforge;
private final LiteLoaderVersionList liteLoader; private final LiteLoaderVersionList liteLoader;
private final OptiFineBMCLVersionList optifine; private final OptiFineBMCLVersionList optifine;
private final QuiltVersionList quilt; private final QuiltVersionList quilt;
@ -48,7 +48,7 @@ public class MojangDownloadProvider implements DownloadProvider {
this.fabric = new FabricVersionList(this); this.fabric = new FabricVersionList(this);
this.fabricApi = new FabricAPIVersionList(this); this.fabricApi = new FabricAPIVersionList(this);
this.forge = new ForgeBMCLVersionList(apiRoot); this.forge = new ForgeBMCLVersionList(apiRoot);
this.neoforge = new NeoForgeBMCLVersionList(apiRoot); this.neoforge = new NeoForgeOfficialVersionList(this);
this.liteLoader = new LiteLoaderVersionList(this); this.liteLoader = new LiteLoaderVersionList(this);
this.optifine = new OptiFineBMCLVersionList(apiRoot); this.optifine = new OptiFineBMCLVersionList(apiRoot);
this.quilt = new QuiltVersionList(this); this.quilt = new QuiltVersionList(this);

View File

@ -0,0 +1,75 @@
package com.tungsten.fclcore.download.neoforge;
import static com.tungsten.fclcore.util.Lang.wrap;
import com.tungsten.fclcore.download.DownloadProvider;
import com.tungsten.fclcore.download.VersionList;
import com.tungsten.fclcore.util.Lang;
import com.tungsten.fclcore.util.StringUtils;
import com.tungsten.fclcore.util.io.HttpRequest;
import java.util.List;
import java.util.concurrent.CompletableFuture;
public final class NeoForgeOfficialVersionList extends VersionList<NeoForgeRemoteVersion> {
private final DownloadProvider downloadProvider;
public NeoForgeOfficialVersionList(DownloadProvider downloadProvider) {
this.downloadProvider = downloadProvider;
}
@Override
public boolean hasType() {
return false;
}
private static final String OLD_URL = "https://maven.neoforged.net/api/maven/versions/releases/net/neoforged/forge";
private static final String META_URL = "https://maven.neoforged.net/api/maven/versions/releases/net/neoforged/neoforge";
@Override
public CompletableFuture<?> refreshAsync() {
return CompletableFuture.supplyAsync(wrap(() -> new OfficialAPIResult[]{
HttpRequest.GET(downloadProvider.injectURL(OLD_URL)).getJson(OfficialAPIResult.class),
HttpRequest.GET(downloadProvider.injectURL(META_URL)).getJson(OfficialAPIResult.class)
})).thenAccept(results -> {
lock.writeLock().lock();
try {
versions.clear();
for (String version : results[0].versions) {
versions.put("1.20.1", new NeoForgeRemoteVersion(
"1.20.1", StringUtils.removePrefix(version, "1.20.1-"),
Lang.immutableListOf(
downloadProvider.injectURL("https://maven.neoforged.net/releases/net/neoforged/forge/" + version + "/forge-" + version + "-installer.jar")
)
));
}
for (String version : results[1].versions) {
String mcVersion = "1." + version.substring(0, version.indexOf('.', version.indexOf('.') + 1));
versions.put(mcVersion, new NeoForgeRemoteVersion(
mcVersion, version,
Lang.immutableListOf(
downloadProvider.injectURL("https://maven.neoforged.net/releases/net/neoforged/neoforge/" + version + "/neoforge-" + version + "-installer.jar")
)
));
}
} finally {
lock.writeLock().unlock();
}
});
}
private static final class OfficialAPIResult {
private final boolean isSnapshot;
private final List<String> versions;
public OfficialAPIResult(boolean isSnapshot, List<String> versions) {
this.isSnapshot = isSnapshot;
this.versions = versions;
}
}
}