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 5d2834fb..a3d4215e 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 @@ -60,7 +60,8 @@ public abstract class RegistriesDataProvider implements DataProvider { cachedOutput, registriesProvider, dynamicOps, - registryData + registryData, + registries )) .toArray(CompletableFuture[]::new); @@ -71,12 +72,19 @@ public abstract class RegistriesDataProvider implements DataProvider { ); } + private CompletableFuture serializeRegistry( CachedOutput cachedOutput, HolderLookup.Provider registryAccess, DynamicOps dynamicOps, - RegistrySupplier.RegistryInfo registryData + RegistrySupplier.RegistryInfo registryData, + RegistrySupplier registries ) { + try { + registries.MAIN_LOCK.acquire(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } final List> elements = registryData.allElements(registryAccess); final HolderLookup.RegistryLookup registry = registryAccess.lookupOrThrow(registryData.key()); LOGGER.info("Serializing " @@ -86,6 +94,7 @@ public abstract class RegistriesDataProvider implements DataProvider { + " elements from " + registryData.data.key() ); + registries.MAIN_LOCK.release(); if (!elements.isEmpty()) { PackOutput.PathProvider pathProvider = this.output.createPathProvider( diff --git a/src/main/java/org/betterx/bclib/api/v3/datagen/RegistrySupplier.java b/src/main/java/org/betterx/bclib/api/v3/datagen/RegistrySupplier.java index 8c9b4b45..049467f4 100644 --- a/src/main/java/org/betterx/bclib/api/v3/datagen/RegistrySupplier.java +++ b/src/main/java/org/betterx/bclib/api/v3/datagen/RegistrySupplier.java @@ -7,13 +7,10 @@ import net.minecraft.core.Holder; import net.minecraft.core.HolderLookup; import net.minecraft.core.Registry; import net.minecraft.core.RegistrySetBuilder; -import net.minecraft.data.DataProvider; import net.minecraft.data.worldgen.BootstapContext; import net.minecraft.resources.RegistryDataLoader; import net.minecraft.resources.ResourceKey; -import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; - import java.util.LinkedList; import java.util.List; import java.util.Objects; @@ -23,6 +20,7 @@ import org.jetbrains.annotations.Nullable; public abstract class RegistrySupplier { private static final int MAX_PERMITS = 2000; private final Semaphore BOOTSTRAP_LOCK = new Semaphore(MAX_PERMITS); + public final Semaphore MAIN_LOCK = new Semaphore(1); final List> allRegistries; @Nullable List defaultModIDs; @@ -60,55 +58,6 @@ public abstract class RegistrySupplier { BOOTSTRAP_LOCK.release(MAX_PERMITS); } - - public void addWithLock( - RegistrySetBuilder registryBuilder, - ResourceKey> resourceKey, - RegistrySetBuilder.RegistryBootstrap registryBootstrap - ) { - try { - BOOTSTRAP_LOCK.acquire(); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - registryBuilder.add(resourceKey, (ctx) -> { - registryBootstrap.run(ctx); - BOOTSTRAP_LOCK.release(); - }); - } - - public void addProviderWithLock( - FabricDataGenerator.Pack pack, - FabricDataGenerator.Pack.RegistryDependentFactory factory - ) { - try { - BOOTSTRAP_LOCK.acquire(); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - pack.addProvider((output, future) -> { - final T res = factory.create(output, future); - BOOTSTRAP_LOCK.release(); - return res; - }); - } - - public void addProviderWithLock( - FabricDataGenerator.Pack pack, - FabricDataGenerator.Pack.Factory factory - ) { - try { - BOOTSTRAP_LOCK.acquire(); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - pack.addProvider((output, future) -> { - final T res = factory.create(output); - BOOTSTRAP_LOCK.release(); - return res; - }); - } - public class InfoList extends LinkedList> { public void add(ResourceKey> key, Codec elementCodec) { this.add(new RegistrySupplier.RegistryInfo(key, elementCodec)); diff --git a/src/main/java/org/betterx/datagen/bclib/BCLibDatagen.java b/src/main/java/org/betterx/datagen/bclib/BCLibDatagen.java index 72804d8a..d24e65ef 100644 --- a/src/main/java/org/betterx/datagen/bclib/BCLibDatagen.java +++ b/src/main/java/org/betterx/datagen/bclib/BCLibDatagen.java @@ -25,17 +25,17 @@ public class BCLibDatagen implements DataGeneratorEntrypoint { if (BCLib.ADD_TEST_DATA) { TestBiomes.ensureStaticallyLoaded(); - BCLRegistrySupplier.INSTANCE.addProviderWithLock(pack, TestWorldgenProvider::new); - BCLRegistrySupplier.INSTANCE.addProviderWithLock(pack, TestBiomes::new); + pack.addProvider(TestWorldgenProvider::new); + pack.addProvider(TestBiomes::new); RecipeDataProvider.createTestRecipes(); } else { - BCLRegistrySupplier.INSTANCE.addProviderWithLock(pack, NullscapeBiomes::new); + pack.addProvider(NullscapeBiomes::new); } - BCLRegistrySupplier.INSTANCE.addProviderWithLock(pack, RecipeDataProvider::new); - BCLRegistrySupplier.INSTANCE.addProviderWithLock(pack, WorldPresetDataProvider::new); - BCLRegistrySupplier.INSTANCE.addProviderWithLock(pack, BCLibRegistriesDataProvider::new); - BCLRegistrySupplier.INSTANCE.addProviderWithLock(pack, BCLAdvancementDataProvider::new); + pack.addProvider(RecipeDataProvider::new); + pack.addProvider(WorldPresetDataProvider::new); + pack.addProvider(BCLibRegistriesDataProvider::new); + pack.addProvider(BCLAdvancementDataProvider::new); }