From 4acfeab9480b32bd8c1637704584ad2a040f45cd Mon Sep 17 00:00:00 2001 From: dfsek Date: Mon, 5 Jul 2021 21:56:14 -0700 Subject: [PATCH] getOrCreateRegistry --- .../java/com/dfsek/terra/api/config/ConfigPack.java | 2 ++ .../com/dfsek/terra/config/pack/ConfigPackImpl.java | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/common/api/src/main/java/com/dfsek/terra/api/config/ConfigPack.java b/common/api/src/main/java/com/dfsek/terra/api/config/ConfigPack.java index 85e5cbfbe..9a856fe10 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/config/ConfigPack.java +++ b/common/api/src/main/java/com/dfsek/terra/api/config/ConfigPack.java @@ -15,6 +15,8 @@ import java.util.Set; public interface ConfigPack extends LoaderRegistrar, LoaderHolder, RegistryHolder { BiomeProviderBuilder getBiomeProviderBuilder(); + CheckedRegistry getOrCreateRegistry(Class clazz); + WorldConfig toWorldConfig(TerraWorld world); void registerConfigType(ConfigType type, String id, int priority); diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java b/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java index 073146fd4..ab423891a 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/pack/ConfigPackImpl.java @@ -194,7 +194,6 @@ public class ConfigPackImpl implements ConfigPack { } }; - putPair(map, NoiseProvider.class, new NoiseRegistry()); putPair(map, LootTable.class, new OpenRegistryImpl<>()); putPair(map, Structure.class, new OpenRegistryImpl<>()); @@ -302,6 +301,15 @@ public class ConfigPackImpl implements ConfigPack { return biomeProviderBuilder; } + @SuppressWarnings("unchecked") + @Override + public CheckedRegistry getOrCreateRegistry(Class clazz) { + return (CheckedRegistry) registryMap.computeIfAbsent(clazz, c -> { + OpenRegistry registry = new OpenRegistryImpl<>(); + return ImmutablePair.of(registry, new CheckedRegistryImpl<>(registry)); + }).getRight(); + } + @Override public WorldConfigImpl toWorldConfig(TerraWorld world) {