From d5601229ac8c08002afa330a52c3c8bffe80a380 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 18 Jul 2021 13:55:35 -0700 Subject: [PATCH] use TypeToken for registries --- .../com/dfsek/terra/addons/biome/BiomeConfigType.java | 7 +++++-- .../com/dfsek/terra/addons/flora/FloraConfigType.java | 7 +++++-- .../java/com/dfsek/terra/addons/ore/OreConfigType.java | 6 ++++-- .../dfsek/terra/addons/palette/PaletteConfigType.java | 7 +++++-- .../com/dfsek/terra/addons/tree/TreeConfigType.java | 6 ++++-- .../generation/feature/FeatureGenerationAddon.java | 2 +- .../addons/generation/flora/FloraGenerationAddon.java | 2 +- .../addons/generation/tree/TreeGenerationAddon.java | 2 +- .../java/com/dfsek/terra/api/config/ConfigType.java | 3 ++- .../event/events/config/ConfigurationLoadEvent.java | 7 ++++--- .../event/events/config/type/ConfigTypeLoadEvent.java | 7 ++++--- .../com/dfsek/terra/config/pack/ConfigPackImpl.java | 10 +++++----- .../terra/registry/config/ConfigTypeRegistry.java | 3 ++- 13 files changed, 43 insertions(+), 26 deletions(-) diff --git a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/BiomeConfigType.java b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/BiomeConfigType.java index 113a42c68..99039a55e 100644 --- a/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/BiomeConfigType.java +++ b/common/addons/config-biome/src/main/java/com/dfsek/terra/addons/biome/BiomeConfigType.java @@ -7,6 +7,7 @@ import com.dfsek.terra.api.config.ConfigFactory; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigType; import com.dfsek.terra.api.registry.OpenRegistry; +import com.dfsek.terra.api.util.TypeToken; import com.dfsek.terra.api.util.seeded.SeededTerraBiome; import java.util.function.Supplier; @@ -15,6 +16,8 @@ public class BiomeConfigType implements ConfigType BIOME_TYPE_TOKEN = new TypeToken<>() {}; + public BiomeConfigType(ConfigPack pack) { this.pack = pack; this.factory = new BiomeFactory(pack); @@ -31,8 +34,8 @@ public class BiomeConfigType implements ConfigType getTypeClass() { - return SeededTerraBiome.class; + public TypeToken getTypeClass() { + return BIOME_TYPE_TOKEN; } @Override diff --git a/common/addons/config-flora/src/main/java/com/dfsek/terra/addons/flora/FloraConfigType.java b/common/addons/config-flora/src/main/java/com/dfsek/terra/addons/flora/FloraConfigType.java index aec5bf959..aa4b2342a 100644 --- a/common/addons/config-flora/src/main/java/com/dfsek/terra/addons/flora/FloraConfigType.java +++ b/common/addons/config-flora/src/main/java/com/dfsek/terra/addons/flora/FloraConfigType.java @@ -5,6 +5,7 @@ import com.dfsek.terra.api.config.ConfigFactory; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigType; import com.dfsek.terra.api.registry.OpenRegistry; +import com.dfsek.terra.api.util.TypeToken; import com.dfsek.terra.api.world.Flora; import java.util.function.Supplier; @@ -13,6 +14,8 @@ public class FloraConfigType implements ConfigType { private final FloraFactory factory = new FloraFactory(); private final ConfigPack pack; + public static final TypeToken FLORA_TYPE_TOKEN = new TypeToken<>(){}; + public FloraConfigType(ConfigPack pack) { this.pack = pack; } @@ -28,8 +31,8 @@ public class FloraConfigType implements ConfigType { } @Override - public Class getTypeClass() { - return Flora.class; + public TypeToken getTypeClass() { + return FLORA_TYPE_TOKEN; } @Override diff --git a/common/addons/config-ore/src/main/java/com/dfsek/terra/addons/ore/OreConfigType.java b/common/addons/config-ore/src/main/java/com/dfsek/terra/addons/ore/OreConfigType.java index a76f335bc..7945f9ecf 100644 --- a/common/addons/config-ore/src/main/java/com/dfsek/terra/addons/ore/OreConfigType.java +++ b/common/addons/config-ore/src/main/java/com/dfsek/terra/addons/ore/OreConfigType.java @@ -6,12 +6,14 @@ import com.dfsek.terra.api.config.ConfigFactory; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigType; import com.dfsek.terra.api.registry.OpenRegistry; +import com.dfsek.terra.api.util.TypeToken; import java.util.function.Supplier; public class OreConfigType implements ConfigType { private final OreFactory factory = new OreFactory(); private final ConfigPack pack; + public static final TypeToken ORE_TYPE_TOKEN = new TypeToken<>(){}; public OreConfigType(ConfigPack pack) { this.pack = pack; @@ -28,8 +30,8 @@ public class OreConfigType implements ConfigType { } @Override - public Class getTypeClass() { - return Ore.class; + public TypeToken getTypeClass() { + return ORE_TYPE_TOKEN; } @Override diff --git a/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/PaletteConfigType.java b/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/PaletteConfigType.java index 8e05d56c5..f7980e4e7 100644 --- a/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/PaletteConfigType.java +++ b/common/addons/config-palette/src/main/java/com/dfsek/terra/addons/palette/PaletteConfigType.java @@ -8,6 +8,7 @@ import com.dfsek.terra.api.config.ConfigFactory; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigType; import com.dfsek.terra.api.registry.OpenRegistry; +import com.dfsek.terra.api.util.TypeToken; import com.dfsek.terra.api.world.generator.Palette; import java.util.function.Supplier; @@ -17,6 +18,8 @@ public class PaletteConfigType implements ConfigType { private final ConfigPack pack; private final TerraPlugin main; + public static final TypeToken PALETTE_TYPE_TOKEN = new TypeToken<>(){}; + public PaletteConfigType(ConfigPack pack, TerraPlugin main) { this.pack = pack; this.main = main; @@ -33,8 +36,8 @@ public class PaletteConfigType implements ConfigType { } @Override - public Class getTypeClass() { - return Palette.class; + public TypeToken getTypeClass() { + return PALETTE_TYPE_TOKEN; } @Override diff --git a/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/TreeConfigType.java b/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/TreeConfigType.java index 7af6d171a..4a44a9e19 100644 --- a/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/TreeConfigType.java +++ b/common/addons/config-tree/src/main/java/com/dfsek/terra/addons/tree/TreeConfigType.java @@ -5,6 +5,7 @@ import com.dfsek.terra.api.config.ConfigFactory; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigType; import com.dfsek.terra.api.registry.OpenRegistry; +import com.dfsek.terra.api.util.TypeToken; import com.dfsek.terra.api.world.Tree; import java.util.function.Supplier; @@ -13,6 +14,7 @@ public class TreeConfigType implements ConfigType { private final TreeFactory factory = new TreeFactory(); private final ConfigPack pack; + public static final TypeToken TREE_TYPE_TOKEN = new TypeToken<>(){}; public TreeConfigType(ConfigPack pack) { this.pack = pack; } @@ -28,8 +30,8 @@ public class TreeConfigType implements ConfigType { } @Override - public Class getTypeClass() { - return Tree.class; + public TypeToken getTypeClass() { + return TREE_TYPE_TOKEN; } @Override diff --git a/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/FeatureGenerationAddon.java b/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/FeatureGenerationAddon.java index 8be6158e0..58081c971 100644 --- a/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/FeatureGenerationAddon.java +++ b/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/FeatureGenerationAddon.java @@ -30,7 +30,7 @@ public class FeatureGenerationAddon extends TerraAddon implements EventListener } public void onBiomeLoad(ConfigurationLoadEvent event) { - if(SeededTerraBiome.class.isAssignableFrom(event.getType().getTypeClass())) { + if(event.is(SeededTerraBiome.class)) { event.getLoadedObject(SeededTerraBiome.class).getContext().put(event.load(new BiomeFeaturesTemplate()).get()); } } diff --git a/common/addons/generation-stage-flora/src/main/java/com/dfsek/terra/addons/generation/flora/FloraGenerationAddon.java b/common/addons/generation-stage-flora/src/main/java/com/dfsek/terra/addons/generation/flora/FloraGenerationAddon.java index a3a9a19eb..0995ff372 100644 --- a/common/addons/generation-stage-flora/src/main/java/com/dfsek/terra/addons/generation/flora/FloraGenerationAddon.java +++ b/common/addons/generation-stage-flora/src/main/java/com/dfsek/terra/addons/generation/flora/FloraGenerationAddon.java @@ -31,7 +31,7 @@ public class FloraGenerationAddon extends TerraAddon implements EventListener { } public void onBiomeLoad(ConfigurationLoadEvent event) { - if(SeededTerraBiome.class.isAssignableFrom(event.getType().getTypeClass())) { + if(event.is(SeededTerraBiome.class)) { event.getLoadedObject(SeededTerraBiome.class).getContext().put(event.load(new BiomeFloraTemplate()).get()); } } diff --git a/common/addons/generation-stage-tree/src/main/java/com/dfsek/terra/addons/generation/tree/TreeGenerationAddon.java b/common/addons/generation-stage-tree/src/main/java/com/dfsek/terra/addons/generation/tree/TreeGenerationAddon.java index 2143780d3..251d7ec32 100644 --- a/common/addons/generation-stage-tree/src/main/java/com/dfsek/terra/addons/generation/tree/TreeGenerationAddon.java +++ b/common/addons/generation-stage-tree/src/main/java/com/dfsek/terra/addons/generation/tree/TreeGenerationAddon.java @@ -31,7 +31,7 @@ public class TreeGenerationAddon extends TerraAddon implements EventListener { } public void onBiomeLoad(ConfigurationLoadEvent event) { - if(SeededTerraBiome.class.isAssignableFrom(event.getType().getTypeClass())) { + if(event.is(SeededTerraBiome.class)) { event.getLoadedObject(SeededTerraBiome.class).getContext().put(event.load(new BiomeTreeTemplate()).get()); } } diff --git a/common/api/src/main/java/com/dfsek/terra/api/config/ConfigType.java b/common/api/src/main/java/com/dfsek/terra/api/config/ConfigType.java index 49e60ba6e..6bfea99d7 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/config/ConfigType.java +++ b/common/api/src/main/java/com/dfsek/terra/api/config/ConfigType.java @@ -2,6 +2,7 @@ package com.dfsek.terra.api.config; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.registry.OpenRegistry; +import com.dfsek.terra.api.util.TypeToken; import java.util.function.Supplier; @@ -10,7 +11,7 @@ public interface ConfigType { ConfigFactory getFactory(); - Class getTypeClass(); + TypeToken getTypeClass(); Supplier> registrySupplier(); } diff --git a/common/api/src/main/java/com/dfsek/terra/api/event/events/config/ConfigurationLoadEvent.java b/common/api/src/main/java/com/dfsek/terra/api/event/events/config/ConfigurationLoadEvent.java index 49dcdbf83..f00c570a5 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/event/events/config/ConfigurationLoadEvent.java +++ b/common/api/src/main/java/com/dfsek/terra/api/event/events/config/ConfigurationLoadEvent.java @@ -5,6 +5,7 @@ import com.dfsek.tectonic.config.ConfigTemplate; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigType; import com.dfsek.terra.api.event.events.PackEvent; +import com.dfsek.terra.api.util.ReflectionUtil; import java.util.function.Consumer; @@ -49,13 +50,13 @@ public class ConfigurationLoadEvent implements PackEvent { } public boolean is(Class clazz) { - return clazz.isAssignableFrom(type.getTypeClass()); + return clazz.isAssignableFrom(type.getTypeClass().getRawType()); } @SuppressWarnings("unchecked") public T getLoadedObject(Class clazz) { - if(!clazz.isAssignableFrom(type.getTypeClass())) - throw new ClassCastException("Cannot assign object from loader of type " + type.getTypeClass().getCanonicalName() + " to class " + clazz.getCanonicalName()); + if(!clazz.isAssignableFrom(type.getTypeClass().getRawType())) + throw new ClassCastException("Cannot assign object from loader of type " + ReflectionUtil.typeToString(type.getTypeClass().getType()) + " to class " + clazz.getCanonicalName()); return (T) loaded; } diff --git a/common/api/src/main/java/com/dfsek/terra/api/event/events/config/type/ConfigTypeLoadEvent.java b/common/api/src/main/java/com/dfsek/terra/api/event/events/config/type/ConfigTypeLoadEvent.java index a23e90a9c..cbd36ec92 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/event/events/config/type/ConfigTypeLoadEvent.java +++ b/common/api/src/main/java/com/dfsek/terra/api/event/events/config/type/ConfigTypeLoadEvent.java @@ -4,6 +4,7 @@ import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigType; import com.dfsek.terra.api.event.events.PackEvent; import com.dfsek.terra.api.registry.CheckedRegistry; +import com.dfsek.terra.api.util.ReflectionUtil; public abstract class ConfigTypeLoadEvent implements PackEvent { private final ConfigType type; @@ -23,13 +24,13 @@ public abstract class ConfigTypeLoadEvent implements PackEvent { } public boolean is(Class clazz) { - return clazz.isAssignableFrom(type.getTypeClass()); + return clazz.isAssignableFrom(type.getTypeClass().getRawType()); } @SuppressWarnings("unchecked") public CheckedRegistry getRegistry(Class clazz) { - if(!clazz.isAssignableFrom(type.getTypeClass())) - throw new ClassCastException("Cannot assign object from loader of type " + type.getTypeClass().getCanonicalName() + " to class " + clazz.getCanonicalName()); + if(!clazz.isAssignableFrom(type.getTypeClass().getRawType())) + throw new ClassCastException("Cannot assign object from loader of type " + ReflectionUtil.typeToString(type.getTypeClass().getType()) + " to class " + clazz.getCanonicalName()); return (CheckedRegistry) registry; } } 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 9429827b6..abb71df02 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,12 +194,12 @@ public class ConfigPackImpl implements ConfigPack { private ConfigTypeRegistry createRegistry() { return new ConfigTypeRegistry(main, (id, configType) -> { OpenRegistry openRegistry = configType.registrySupplier().get(); - if(registryMap.containsKey(configType.getTypeClass())) { // Someone already registered something; we need to copy things to the new registry. - registryMap.get(configType.getTypeClass()).getLeft().forEach(((OpenRegistry) openRegistry)::register); + if(registryMap.containsKey(configType.getTypeClass().getType())) { // Someone already registered something; we need to copy things to the new registry. + registryMap.get(configType.getTypeClass().getType()).getLeft().forEach(((OpenRegistry) openRegistry)::register); } - selfLoader.registerLoader(configType.getTypeClass(), openRegistry); - abstractConfigLoader.registerLoader(configType.getTypeClass(), openRegistry); - registryMap.put(configType.getTypeClass(), ImmutablePair.of(openRegistry, new CheckedRegistryImpl<>(openRegistry))); + selfLoader.registerLoader(configType.getTypeClass().getType(), openRegistry); + abstractConfigLoader.registerLoader(configType.getTypeClass().getType(), openRegistry); + registryMap.put(configType.getTypeClass().getType(), ImmutablePair.of(openRegistry, new CheckedRegistryImpl<>(openRegistry))); }); } diff --git a/common/implementation/src/main/java/com/dfsek/terra/registry/config/ConfigTypeRegistry.java b/common/implementation/src/main/java/com/dfsek/terra/registry/config/ConfigTypeRegistry.java index eb48c2639..d2936bb25 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/registry/config/ConfigTypeRegistry.java +++ b/common/implementation/src/main/java/com/dfsek/terra/registry/config/ConfigTypeRegistry.java @@ -2,6 +2,7 @@ package com.dfsek.terra.registry.config; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.config.ConfigType; +import com.dfsek.terra.api.util.ReflectionUtil; import com.dfsek.terra.registry.OpenRegistryImpl; import java.util.LinkedHashMap; @@ -21,7 +22,7 @@ public class ConfigTypeRegistry extends OpenRegistryImpl> { @Override public boolean register(String identifier, Entry> value) { callback.accept(identifier, value.getValue()); - main.getDebugLogger().info("Registered config registry with ID " + identifier + " to class " + value.getValue().getTypeClass().getCanonicalName()); + main.getDebugLogger().info("Registered config registry with ID " + identifier + " to type " + ReflectionUtil.typeToString(value.getValue().getTypeClass().getType())); return super.register(identifier, value); } }