ModMetadataFabricModJson: Determine "mod ID" from source if missing

This commit is contained in:
Juuz
2023-02-16 21:43:41 +02:00
parent 2456edf285
commit a2ef9dbc83
2 changed files with 39 additions and 5 deletions

View File

@@ -40,7 +40,6 @@ import javax.inject.Inject;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import dev.architectury.tinyremapper.TinyRemapper;
import org.jetbrains.annotations.Nullable;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
@@ -193,8 +192,7 @@ public abstract class InterfaceInjectionProcessor implements MinecraftJarProcess
public record InjectedInterface(String modId, String className, String ifaceName) {
public static List<InjectedInterface> fromMod(FabricModJson fabricModJson) {
if (fabricModJson instanceof ModMetadataFabricModJson modMetadataFmj) {
// TODO 1.1 MERGE: Inject file path into mod metadatas if possible
return modMetadataFmj.getModMetadata().getInjectedInterfaces("<unknown mod>");
return modMetadataFmj.getModMetadata().getInjectedInterfaces(modMetadataFmj.getId());
}
final String modId = fabricModJson.getId();

View File

@@ -26,7 +26,8 @@ package net.fabricmc.loom.util.fmj;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.StringJoiner;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -34,14 +35,20 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import dev.architectury.loom.metadata.JsonBackedModMetadataFile;
import dev.architectury.loom.metadata.ModMetadataFile;
import org.gradle.api.Project;
import org.gradle.api.tasks.SourceSet;
import org.jetbrains.annotations.Nullable;
import net.fabricmc.loom.util.gradle.SourceSetHelper;
public final class ModMetadataFabricModJson extends FabricModJson {
private final ModMetadataFile modMetadata;
private final FabricModJsonSource source;
ModMetadataFabricModJson(ModMetadataFile modMetadata, FabricModJsonSource source) {
super(getJsonForModMetadata(modMetadata), source);
this.modMetadata = modMetadata;
this.source = source;
}
private static JsonObject getJsonForModMetadata(ModMetadataFile modMetadata) {
@@ -58,7 +65,36 @@ public final class ModMetadataFabricModJson extends FabricModJson {
@Override
public String getId() {
return Objects.requireNonNullElseGet(modMetadata.getId(), super::getId);
return Optional.ofNullable(modMetadata.getId())
.or(this::getIdFromSource)
.orElseGet(super::getId);
}
private Optional<String> getIdFromSource() {
if (source instanceof FabricModJsonSource.ZipSource zip) {
return Optional.of(zip.zipPath().getFileName().toString());
} else if (source instanceof FabricModJsonSource.DirectorySource directory) {
return Optional.of(directory.directoryPath().getFileName().toString());
} else if (source instanceof FabricModJsonSource.SourceSetSource sourceSets) {
final StringJoiner joiner = new StringJoiner("+");
for (SourceSet sourceSet : sourceSets.sourceSets()) {
final Project project = SourceSetHelper.getSourceSetProject(sourceSet);
final String path = project.getPath();
final StringBuilder sb = new StringBuilder(path);
if (!path.endsWith(":")) {
sb.append(':');
}
sb.append(sourceSet.getName());
joiner.add(sb.toString());
}
return Optional.of(joiner.toString());
}
return Optional.empty();
}
@Override