typetoken getOrCreateRegistry

This commit is contained in:
dfsek 2021-07-18 13:37:40 -07:00
parent d10e2050cb
commit ebc81b196a
2 changed files with 15 additions and 5 deletions

View File

@ -6,11 +6,13 @@ import com.dfsek.terra.api.registry.meta.RegistryFactory;
import com.dfsek.terra.api.registry.meta.RegistryHolder;
import com.dfsek.terra.api.tectonic.LoaderHolder;
import com.dfsek.terra.api.tectonic.LoaderRegistrar;
import com.dfsek.terra.api.util.TypeToken;
import com.dfsek.terra.api.util.seeded.SeededBiomeProvider;
import com.dfsek.terra.api.world.TerraWorld;
import com.dfsek.terra.api.world.generator.ChunkGeneratorProvider;
import com.dfsek.terra.api.world.generator.GenerationStageProvider;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -18,7 +20,14 @@ import java.util.Set;
public interface ConfigPack extends LoaderRegistrar, LoaderHolder, RegistryHolder {
SeededBiomeProvider getBiomeProviderBuilder();
<T> CheckedRegistry<T> getOrCreateRegistry(Class<T> clazz);
<T> CheckedRegistry<T> getOrCreateRegistry(Type clazz);
default <T> CheckedRegistry<T> getOrCreateRegistry(Class<T> clazz) {
return getOrCreateRegistry((Type) clazz);
}
default <T> CheckedRegistry<T> getOrCreateRegistry(TypeToken<T> type) {
return getOrCreateRegistry(type.getType());
}
WorldConfig toWorldConfig(TerraWorld world);

View File

@ -28,6 +28,7 @@ import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.registry.OpenRegistry;
import com.dfsek.terra.api.registry.exception.DuplicateEntryException;
import com.dfsek.terra.api.registry.meta.RegistryFactory;
import com.dfsek.terra.api.util.ReflectionUtil;
import com.dfsek.terra.api.util.generic.pair.ImmutablePair;
import com.dfsek.terra.api.util.seeded.SeededBiomeProvider;
import com.dfsek.terra.api.world.TerraWorld;
@ -203,7 +204,7 @@ public class ConfigPackImpl implements ConfigPack {
}
private void checkDeadEntries(TerraPlugin main) {
registryMap.forEach((clazz, pair) -> ((OpenRegistryImpl<?>) pair.getLeft()).getDeadEntries().forEach((id, value) -> main.getDebugLogger().warning("Dead entry in '" + clazz + "' registry: '" + id + "'")));
registryMap.forEach((clazz, pair) -> ((OpenRegistryImpl<?>) pair.getLeft()).getDeadEntries().forEach((id, value) -> main.getDebugLogger().warning("Dead entry in '" + ReflectionUtil.typeToString(clazz) + "' registry: '" + id + "'")));
}
@Override
@ -299,12 +300,12 @@ public class ConfigPackImpl implements ConfigPack {
@SuppressWarnings("unchecked")
@Override
public <T> CheckedRegistry<T> getOrCreateRegistry(Class<T> clazz) {
return (CheckedRegistry<T>) registryMap.computeIfAbsent(clazz, c -> {
public <T> CheckedRegistry<T> getOrCreateRegistry(Type type) {
return (CheckedRegistry<T>) registryMap.computeIfAbsent(type, c -> {
OpenRegistry<T> registry = new OpenRegistryImpl<>();
selfLoader.registerLoader(c, registry);
abstractConfigLoader.registerLoader(c, registry);
main.getDebugLogger().info("Registered loader for registry of class " + c);
main.getDebugLogger().info("Registered loader for registry of class " + ReflectionUtil.typeToString(c));
return ImmutablePair.of(registry, new CheckedRegistryImpl<>(registry));
}).getRight();
}