More locking Options

This commit is contained in:
Frank 2023-05-23 22:48:25 +02:00
parent fc53546119
commit 7c88f0ec43
2 changed files with 42 additions and 7 deletions

View file

@ -7,10 +7,13 @@ 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;
@ -74,6 +77,38 @@ public abstract class RegistrySupplier {
});
}
public <T extends DataProvider> void addProviderWithLock(
FabricDataGenerator.Pack pack,
FabricDataGenerator.Pack.RegistryDependentFactory<T> 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 <T extends DataProvider> void addProviderWithLock(
FabricDataGenerator.Pack pack,
FabricDataGenerator.Pack.Factory<T> 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<RegistrySupplier.RegistryInfo<?>> {
public <T> void add(ResourceKey<? extends Registry<T>> key, Codec<T> elementCodec) {
this.add(new RegistrySupplier.RegistryInfo<T>(key, elementCodec));