Skip to content

Commit

Permalink
Fix bad interaction between FabricDynamicRegistryProvider and modde…
Browse files Browse the repository at this point in the history
…d dynamic registries (#3353)

* Add reproduction test

* Fix the issue
  • Loading branch information
Technici4n authored Oct 1, 2023
1 parent b18afef commit d19c412
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ public static final class Entries {
Entries(RegistryWrapper.WrapperLookup registries, String modId) {
this.registries = registries;
this.queuedEntries = DynamicRegistries.getDynamicRegistries().stream()
// Some modded dynamic registries might not be in the wrapper lookup, filter them out
.filter(e -> registries.getOptionalWrapper(e.key()).isPresent())
.collect(Collectors.toMap(
e -> e.key().getValue(),
e -> RegistryEntries.create(registries, e)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ public class DataGeneratorTestContent implements ModInitializer {
TEST_DATAGEN_DYNAMIC_REGISTRY_KEY,
new Identifier(MOD_ID, "tiny_potato")
);
// Empty registry
public static final RegistryKey<Registry<TestDatagenObject>> TEST_DATAGEN_DYNAMIC_EMPTY_REGISTRY_KEY =
RegistryKey.ofRegistry(new Identifier("fabric", "test_datagen_dynamic_empty"));

@Override
public void onInitialize() {
Expand All @@ -73,6 +76,7 @@ public void onInitialize() {
.build());

DynamicRegistries.register(TEST_DATAGEN_DYNAMIC_REGISTRY_KEY, TestDatagenObject.CODEC);
DynamicRegistries.register(TEST_DATAGEN_DYNAMIC_EMPTY_REGISTRY_KEY, TestDatagenObject.CODEC);
}

private static Block createBlock(String name, boolean hasItem, AbstractBlock.Settings settings) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ public void buildRegistry(RegistryBuilder registryBuilder) {
TEST_DATAGEN_DYNAMIC_REGISTRY_KEY,
this::bootstrapTestDatagenRegistry
);
// do NOT add TEST_DATAGEN_DYNAMIC_EMPTY_REGISTRY_KEY, should still work without it
}

private void bootstrapTestDatagenRegistry(Registerable<DataGeneratorTestContent.TestDatagenObject> registerable) {
Expand Down

0 comments on commit d19c412

Please sign in to comment.