diff --git a/src/main/java/org/betterx/bclib/api/v3/datagen/RegistriesDataProvider.java b/src/main/java/org/betterx/bclib/api/v3/datagen/RegistriesDataProvider.java index 74eb610a..78b5a74c 100644 --- a/src/main/java/org/betterx/bclib/api/v3/datagen/RegistriesDataProvider.java +++ b/src/main/java/org/betterx/bclib/api/v3/datagen/RegistriesDataProvider.java @@ -48,23 +48,32 @@ public abstract class RegistriesDataProvider implements DataProvider { return registriesFuture.thenCompose(registriesProvider -> CompletableFuture .supplyAsync(() -> registries) - .thenCompose(entries -> CompletableFuture.runAsync(() -> { - registries.acquireLock(); - final RegistryOps dynamicOps = RegistryOps.create( - JsonOps.INSTANCE, - registriesProvider - ); + .thenCompose(entries -> { + registries.acquireLock(); + final RegistryOps dynamicOps = RegistryOps.create( + JsonOps.INSTANCE, + registriesProvider + ); - for (RegistrySupplier.RegistryInfo registryData : entries.allRegistries) { - serializeRegistry( - cachedOutput, registriesProvider, dynamicOps, registryData - ); - } - registries.releaseLock(); - }))); + CompletableFuture[] futures = entries + .allRegistries + .stream() + .map(registryData -> serializeRegistry( + cachedOutput, + registriesProvider, + dynamicOps, + registryData + )) + .toArray(CompletableFuture[]::new); + + registries.releaseLock(); + return CompletableFuture.allOf(futures); + } + ) + ); } - private void serializeRegistry( + private CompletableFuture serializeRegistry( CachedOutput cachedOutput, HolderLookup.Provider registryAccess, DynamicOps dynamicOps, @@ -86,19 +95,18 @@ public abstract class RegistriesDataProvider implements DataProvider { registryData.key().location().getPath() ); - elements.forEach(entry -> - serializeElements( - pathProvider.json(entry.unwrapKey().orElseThrow().location()), - cachedOutput, - dynamicOps, - registryData.elementCodec(), - entry.value() - ) - ); + return CompletableFuture.allOf(elements.stream().map(entry -> serializeElements( + pathProvider.json(entry.unwrapKey().orElseThrow().location()), + cachedOutput, + dynamicOps, + registryData.elementCodec(), + entry.value() + )).toArray(CompletableFuture[]::new)); } + return CompletableFuture.completedFuture(null); } - private void serializeElements( + private CompletableFuture serializeElements( Path path, CachedOutput cachedOutput, DynamicOps dynamicOps, @@ -112,11 +120,9 @@ public abstract class RegistriesDataProvider implements DataProvider { string )); if (optional.isPresent()) { - DataProvider.saveStable(cachedOutput, optional.get(), path); - LOGGER.info(path + " written"); - } else { - LOGGER.warning(path + " is empty"); + return DataProvider.saveStable(cachedOutput, optional.get(), path); } + return CompletableFuture.completedFuture(null); } public void buildRegistry(RegistrySetBuilder registryBuilder) {