From cd208cbd18852a23056958ead53c22005dfe352e Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 18 Jul 2021 13:31:17 -0700 Subject: [PATCH] use typetokens in RegistryHolder --- .../api/registry/meta/RegistryHolder.java | 23 +++++++++++++++++-- .../terra/config/pack/ConfigPackImpl.java | 12 +++++----- .../terra/config/pack/WorldConfigImpl.java | 3 ++- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/common/api/src/main/java/com/dfsek/terra/api/registry/meta/RegistryHolder.java b/common/api/src/main/java/com/dfsek/terra/api/registry/meta/RegistryHolder.java index 29a8fd8a8..d69163070 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/registry/meta/RegistryHolder.java +++ b/common/api/src/main/java/com/dfsek/terra/api/registry/meta/RegistryHolder.java @@ -2,9 +2,28 @@ package com.dfsek.terra.api.registry.meta; import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.registry.Registry; +import com.dfsek.terra.api.util.TypeToken; + +import java.lang.reflect.Type; public interface RegistryHolder { - Registry getRegistry(Class clazz); + default Registry getRegistry(Class clazz) { + return getRegistry((Type) clazz); + } - CheckedRegistry getCheckedRegistry(Class clazz) throws IllegalStateException; + default Registry getRegistry(TypeToken type) { + return getRegistry(type.getType()); + } + + Registry getRegistry(Type type); + + default CheckedRegistry getCheckedRegistry(Class clazz) throws IllegalStateException { + return getCheckedRegistry((Type) clazz); + } + + default CheckedRegistry getCheckedRegistry(TypeToken type) { + return getCheckedRegistry(type.getType()); + } + + CheckedRegistry getCheckedRegistry(Type type) throws IllegalStateException; } 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 1a4b3db5e..bb27e78f4 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 @@ -84,7 +84,7 @@ public class ConfigPackImpl implements ConfigPack { private final SeededBiomeProvider seededBiomeProvider; - private final Map, ImmutablePair, CheckedRegistry>> registryMap = new HashMap<>(); + private final Map, CheckedRegistry>> registryMap = new HashMap<>(); private final ConfigTypeRegistry configTypeRegistry; @@ -220,7 +220,7 @@ public class ConfigPackImpl implements ConfigPack { return this; } - protected Map, ImmutablePair, CheckedRegistry>> getRegistryMap() { + protected Map, CheckedRegistry>> getRegistryMap() { return registryMap; } @@ -269,14 +269,14 @@ public class ConfigPackImpl implements ConfigPack { @Override @SuppressWarnings("unchecked") - public CheckedRegistry getRegistry(Class clazz) { - return (CheckedRegistry) registryMap.getOrDefault(clazz, ImmutablePair.ofNull()).getRight(); + public CheckedRegistry getRegistry(Type type) { + return (CheckedRegistry) registryMap.getOrDefault(type, ImmutablePair.ofNull()).getRight(); } @SuppressWarnings("unchecked") @Override - public CheckedRegistry getCheckedRegistry(Class clazz) throws IllegalStateException { - return (CheckedRegistry) registryMap.getOrDefault(clazz, ImmutablePair.ofNull()).getRight(); + public CheckedRegistry getCheckedRegistry(Type type) throws IllegalStateException { + return (CheckedRegistry) registryMap.getOrDefault(type, ImmutablePair.ofNull()).getRight(); } @SuppressWarnings("unchecked") diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/pack/WorldConfigImpl.java b/common/implementation/src/main/java/com/dfsek/terra/config/pack/WorldConfigImpl.java index da29f5099..371cc4c76 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/pack/WorldConfigImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/pack/WorldConfigImpl.java @@ -13,6 +13,7 @@ import com.dfsek.terra.registry.LockedRegistryImpl; import com.dfsek.terra.registry.OpenRegistryImpl; import com.dfsek.terra.world.SamplerCacheImpl; +import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map; @@ -24,7 +25,7 @@ public class WorldConfigImpl implements WorldConfig { private final TerraWorld world; private final ConfigPackImpl pack; - private final Map, Registry> registryMap = new HashMap<>(); + private final Map> registryMap = new HashMap<>(); public WorldConfigImpl(TerraWorld world, ConfigPackImpl pack, TerraPlugin main) { this.world = world;