From 65e415cb4cb5fe9463751258a8b884ae4b9380bc Mon Sep 17 00:00:00 2001 From: modmuss50 <modmuss50@gmail.com> Date: Sat, 26 Nov 2022 19:58:25 +0000 Subject: [PATCH] Add some useful helper methods to FabricDynamicRegistryProvider.Entries (#2692) * Add some useful helper methods to FabricDynamicRegistryProvider.Entries * Update fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/provider/FabricDynamicRegistryProvider.java Co-authored-by: Juuz <6596629+Juuxel@users.noreply.github.com> Co-authored-by: Juuz <6596629+Juuxel@users.noreply.github.com> --- .../fabric/test/biome/WorldgenProvider.java | 13 +-------- .../FabricDynamicRegistryProvider.java | 29 +++++++++++++++++-- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/fabric-biome-api-v1/src/testmod/java/net/fabricmc/fabric/test/biome/WorldgenProvider.java b/fabric-biome-api-v1/src/testmod/java/net/fabricmc/fabric/test/biome/WorldgenProvider.java index fb5c682a9..89d4a2198 100644 --- a/fabric-biome-api-v1/src/testmod/java/net/fabricmc/fabric/test/biome/WorldgenProvider.java +++ b/fabric-biome-api-v1/src/testmod/java/net/fabricmc/fabric/test/biome/WorldgenProvider.java @@ -19,7 +19,6 @@ package net.fabricmc.fabric.test.biome; import java.util.List; import java.util.concurrent.CompletableFuture; -import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.RegistryWrapper; import net.minecraft.registry.entry.RegistryEntry; @@ -44,17 +43,7 @@ public class WorldgenProvider extends FabricDynamicRegistryProvider { protected void configure(RegistryWrapper.WrapperLookup registries, Entries entries) { final RegistryWrapper.Impl<Biome> biomeRegistry = registries.getWrapperOrThrow(RegistryKeys.BIOME); - List<RegistryKey<Biome>> allBiomes = List.of( - TestBiomes.TEST_CRIMSON_FOREST, - TestBiomes.CUSTOM_PLAINS, - TestBiomes.TEST_END_HIGHLANDS, - TestBiomes.TEST_END_MIDLANDS, - TestBiomes.TEST_END_BARRRENS - ); - - for (RegistryKey<Biome> biomeRegistryKey : allBiomes) { - entries.add(biomeRegistryKey, biomeRegistry.getOrThrow(biomeRegistryKey).value()); - } + entries.addAll(biomeRegistry); ConfiguredFeature<?, ?> COMMON_DESERT_WELL = new ConfiguredFeature<>(Feature.DESERT_WELL, DefaultFeatureConfig.INSTANCE); diff --git a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/provider/FabricDynamicRegistryProvider.java b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/provider/FabricDynamicRegistryProvider.java index efe604305..71588502d 100644 --- a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/provider/FabricDynamicRegistryProvider.java +++ b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/provider/FabricDynamicRegistryProvider.java @@ -74,15 +74,17 @@ public abstract class FabricDynamicRegistryProvider implements DataProvider { private final RegistryWrapper.WrapperLookup registries; // Registry ID -> Entries for that registry private final Map<Identifier, RegistryEntries<?>> queuedEntries; + private final String modId; @ApiStatus.Internal - Entries(RegistryWrapper.WrapperLookup registries) { + Entries(RegistryWrapper.WrapperLookup registries, String modId) { this.registries = registries; this.queuedEntries = RegistryLoader.DYNAMIC_REGISTRIES.stream() .collect(Collectors.toMap( e -> e.key().getValue(), e -> RegistryEntries.create(registries, e) )); + this.modId = modId; } /** @@ -122,12 +124,33 @@ public abstract class FabricDynamicRegistryProvider implements DataProvider { } /** - * Adds a new object to be data generated and returns a reference to it for use in other objects. + * Adds a new object to be data generated. + * + * @return a reference to it for use in other objects. */ public <T> RegistryEntry<T> add(RegistryKey<T> registry, T object) { return getQueuedEntries(registry).add(registry.getValue(), object); } + /** + * Adds a new {@link RegistryKey} from a given {@link RegistryWrapper.Impl} to be data generated. + * + * @return a reference to it for use in other objects. + */ + public <T> RegistryEntry<T> add(RegistryWrapper.Impl<T> registry, RegistryKey<T> valueKey) { + return add(valueKey, registry.getOrThrow(valueKey).value()); + } + + /** + * All the registry entries whose namespace matches the current effective mod ID will be data generated. + */ + public <T> List<RegistryEntry<T>> addAll(RegistryWrapper.Impl<T> registry) { + return registry.streamKeys() + .filter(registryKey -> registryKey.getValue().getNamespace().equals(modId)) + .map(key -> add(registry, key)) + .toList(); + } + @SuppressWarnings("unchecked") <T> RegistryEntries<T> getQueuedEntries(RegistryKey<T> key) { RegistryEntries<?> regEntries = queuedEntries.get(key.getRegistry()); @@ -177,7 +200,7 @@ public abstract class FabricDynamicRegistryProvider implements DataProvider { return registriesFuture.thenCompose(registries -> { return CompletableFuture .supplyAsync(() -> { - Entries entries = new Entries(registries); + Entries entries = new Entries(registries, output.getModId()); configure(registries, entries); return entries; })