diff --git a/core/src/main/java/art/arcane/iris/pack/ingest/ModIngester.java b/core/src/main/java/art/arcane/iris/pack/ingest/ModIngester.java index 3870781f0..99d209c30 100644 --- a/core/src/main/java/art/arcane/iris/pack/ingest/ModIngester.java +++ b/core/src/main/java/art/arcane/iris/pack/ingest/ModIngester.java @@ -96,8 +96,19 @@ public final class ModIngester { items.addAll(featureItems); items.addAll(ModStructureIngester.ingest(request.catalog().structures(), namespaces, hostBiomes, dimension)); pack.flush(); - IngestManifest.write(pack, request.catalog(), request.dimensionKey(), targetKey, namespaces, items); - return new ModIngestReport(target, items, IngestManifest.summary(targetKey, pack, namespaces, items)); + Set reported = reportedNamespaces(namespaces, items); + IngestManifest.write(pack, request.catalog(), request.dimensionKey(), targetKey, reported, items); + return new ModIngestReport(target, items, IngestManifest.summary(targetKey, pack, reported, items)); + } + + private static Set reportedNamespaces(Set namespaces, List items) { + Set reported = new TreeSet<>(); + for (ModIngestItem item : items) { + if (namespaces.contains(item.namespace())) { + reported.add(item.namespace()); + } + } + return reported; } private static Set selectNamespaces(ModIngestRequest request, Set reserved) { diff --git a/core/src/test/java/art/arcane/iris/pack/ingest/ModIngesterPackTest.java b/core/src/test/java/art/arcane/iris/pack/ingest/ModIngesterPackTest.java index f5d6d0f87..4bfa22e54 100644 --- a/core/src/test/java/art/arcane/iris/pack/ingest/ModIngesterPackTest.java +++ b/core/src/test/java/art/arcane/iris/pack/ingest/ModIngesterPackTest.java @@ -20,6 +20,8 @@ package art.arcane.iris.pack.ingest; import art.arcane.iris.pack.PackValidationResult; import art.arcane.iris.pack.PackValidator; +import art.arcane.iris.pack.ingest.catalog.CatalogNamespace; +import art.arcane.iris.pack.ingest.catalog.WorldgenCatalog; import com.google.gson.JsonObject; import org.junit.Rule; import org.junit.Test; @@ -30,6 +32,7 @@ import java.nio.charset.StandardCharsets; import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; @@ -203,6 +206,26 @@ public class ModIngesterPackTest { assertTrue(report.items().stream().noneMatch(item -> item.namespace().equals("minecraft"))); } + @Test + public void namespacesWithoutAnyIngestedContentAreLeftOutOfTheManifestAndSummary() throws Exception { + Path root = folder.getRoot().toPath(); + Path source = ModIngestFixture.writeSourcePack(root); + Path target = root.resolve("packs").resolve("quiet"); + WorldgenCatalog fixture = ModIngestFixture.catalog(); + List namespaces = new ArrayList<>(fixture.namespaces()); + namespaces.add(new CatalogNamespace("quietmod", "Quiet Mod", "1.0.0")); + WorldgenCatalog catalog = new WorldgenCatalog(fixture.format(), fixture.minecraftVersion(), fixture.platform(), + fixture.capturedAtEpochMillis(), fixture.contentFingerprint(), namespaces, fixture.biomes(), + fixture.placedFeatures(), fixture.structures(), fixture.dimensionTypes(), fixture.levelStems()); + + ModIngestReport report = ModIngester.ingest(new ModIngestRequest(source, target, "overworld", catalog, Set.of(), false)); + + assertEquals(List.of("examplemod", "othermod"), + ModIngestFixture.strings(ModIngestFixture.readJson(target.resolve("ingest/manifest.json")).get("namespaces"))); + assertTrue(report.summaryLines().stream().noneMatch(line -> line.startsWith("quietmod"))); + assertEquals(3, report.summaryLines().size()); + } + private static List directoryNames(Path root) throws IOException { try (Stream entries = Files.list(root)) { return entries.map((Path entry) -> entry.getFileName().toString()).sorted().toList();