feat(download): show modrinth dependencies.

This commit is contained in:
huanghongxun 2022-05-22 01:33:27 +08:00
parent 1bc8450110
commit cc39a37beb

View File

@ -111,8 +111,10 @@ public final class ModrinthRemoteModRepository implements RemoteModRepository {
} }
@Override @Override
public RemoteMod getModById(String id) { public RemoteMod getModById(String id) throws IOException {
throw new UnsupportedOperationException(); id = StringUtils.removePrefix(id, "local-");
Project project = HttpRequest.GET(PREFIX + "/v2/project/" + id).getJson(Project.class);
return project.toMod();
} }
@Override @Override
@ -139,7 +141,7 @@ public final class ModrinthRemoteModRepository implements RemoteModRepository {
.map(name -> new Category(null, name, Collections.emptyList())); .map(name -> new Category(null, name, Collections.emptyList()));
} }
public static class Project { public static class Project implements RemoteMod.IMod {
private final String slug; private final String slug;
private final String title; private final String title;
@ -238,6 +240,39 @@ public final class ModrinthRemoteModRepository implements RemoteModRepository {
public List<String> getVersions() { public List<String> getVersions() {
return versions; return versions;
} }
@Override
public List<RemoteMod> loadDependencies(RemoteModRepository modRepository) throws IOException {
Set<String> dependencies = modRepository.getRemoteVersionsById(getId())
.flatMap(version -> version.getDependencies().stream())
.collect(Collectors.toSet());
List<RemoteMod> mods = new ArrayList<>();
for (String dependencyId : dependencies) {
if (StringUtils.isNotBlank(dependencyId)) {
mods.add(modRepository.getModById(dependencyId));
}
}
return mods;
}
@Override
public Stream<RemoteMod.Version> loadVersions(RemoteModRepository modRepository) throws IOException {
return modRepository.getRemoteVersionsById(getId());
}
public RemoteMod toMod() {
return new RemoteMod(
slug,
"",
title,
description,
categories,
null,
iconUrl,
(RemoteMod.IMod) this
);
}
} }
@Immutable @Immutable
@ -416,7 +451,7 @@ public final class ModrinthRemoteModRepository implements RemoteModRepository {
datePublished, datePublished,
type, type,
files.get(0).toFile(), files.get(0).toFile(),
dependencies.stream().map(Dependency::getProjectId).collect(Collectors.toList()), dependencies.stream().map(Dependency::getProjectId).filter(Objects::nonNull).collect(Collectors.toList()),
gameVersions, gameVersions,
loaders.stream().flatMap(loader -> { loaders.stream().flatMap(loader -> {
if ("fabric".equalsIgnoreCase(loader)) return Stream.of(ModLoaderType.FABRIC); if ("fabric".equalsIgnoreCase(loader)) return Stream.of(ModLoaderType.FABRIC);
@ -570,7 +605,16 @@ public final class ModrinthRemoteModRepository implements RemoteModRepository {
@Override @Override
public List<RemoteMod> loadDependencies(RemoteModRepository modRepository) throws IOException { public List<RemoteMod> loadDependencies(RemoteModRepository modRepository) throws IOException {
return Collections.emptyList(); Set<String> dependencies = modRepository.getRemoteVersionsById(getProjectId())
.flatMap(version -> version.getDependencies().stream())
.collect(Collectors.toSet());
List<RemoteMod> mods = new ArrayList<>();
for (String dependencyId : dependencies) {
if (StringUtils.isNotBlank(dependencyId)) {
mods.add(modRepository.getModById(dependencyId));
}
}
return mods;
} }
@Override @Override