diff --git a/common/src/main/java/com/dfsek/terra/commands/biome/arg/BiomeArgumentParser.java b/common/src/main/java/com/dfsek/terra/commands/biome/arg/BiomeArgumentParser.java index 251036d39..7931b30be 100644 --- a/common/src/main/java/com/dfsek/terra/commands/biome/arg/BiomeArgumentParser.java +++ b/common/src/main/java/com/dfsek/terra/commands/biome/arg/BiomeArgumentParser.java @@ -14,6 +14,6 @@ public class BiomeArgumentParser implements ArgumentParser { @Override public TerraBiome parse(CommandSender sender, String arg) { Player player = (Player) sender; - return main.getWorld(player.getWorld()).getConfig().getBiomeRegistry().get(arg); + return main.getWorld(player.getWorld()).getConfig().getRegistry(TerraBiome.class).get(arg); } } diff --git a/common/src/main/java/com/dfsek/terra/commands/biome/tab/BiomeTabCompleter.java b/common/src/main/java/com/dfsek/terra/commands/biome/tab/BiomeTabCompleter.java index f2461c532..4476e3613 100644 --- a/common/src/main/java/com/dfsek/terra/commands/biome/tab/BiomeTabCompleter.java +++ b/common/src/main/java/com/dfsek/terra/commands/biome/tab/BiomeTabCompleter.java @@ -17,6 +17,6 @@ public class BiomeTabCompleter implements TabCompleter { @Override public List complete(CommandSender sender) { Player player = (Player) sender; - return main.getWorld(player.getWorld()).getConfig().getBiomeRegistry().entries().stream().map(TerraBiome::getID).collect(Collectors.toList()); + return main.getWorld(player.getWorld()).getConfig().getRegistry(TerraBiome.class).entries().stream().map(TerraBiome::getID).collect(Collectors.toList()); } } diff --git a/common/src/main/java/com/dfsek/terra/commands/structure/argument/StructureArgumentParser.java b/common/src/main/java/com/dfsek/terra/commands/structure/argument/StructureArgumentParser.java index dce50ac65..cf8b3378f 100644 --- a/common/src/main/java/com/dfsek/terra/commands/structure/argument/StructureArgumentParser.java +++ b/common/src/main/java/com/dfsek/terra/commands/structure/argument/StructureArgumentParser.java @@ -13,6 +13,6 @@ public class StructureArgumentParser implements ArgumentParser { @Override public TerraStructure parse(CommandSender sender, String arg) { - return main.getWorld(((Player) sender).getWorld()).getConfig().getStructureRegistry().get(arg); + return main.getWorld(((Player) sender).getWorld()).getConfig().getRegistry(TerraStructure.class).get(arg); } } diff --git a/common/src/main/java/com/dfsek/terra/commands/structure/completer/StructureCompleter.java b/common/src/main/java/com/dfsek/terra/commands/structure/completer/StructureCompleter.java index a2b5b1dad..cebfa20ab 100644 --- a/common/src/main/java/com/dfsek/terra/commands/structure/completer/StructureCompleter.java +++ b/common/src/main/java/com/dfsek/terra/commands/structure/completer/StructureCompleter.java @@ -5,6 +5,7 @@ import com.dfsek.terra.api.command.tab.TabCompleter; import com.dfsek.terra.api.injection.annotations.Inject; import com.dfsek.terra.api.platform.CommandSender; import com.dfsek.terra.api.platform.entity.Player; +import com.dfsek.terra.world.population.items.TerraStructure; import java.util.ArrayList; import java.util.List; @@ -16,6 +17,6 @@ public class StructureCompleter implements TabCompleter { @Override public List complete(CommandSender sender) { Player player = (Player) sender; - return new ArrayList<>(main.getWorld(player.getWorld()).getConfig().getStructureRegistry().keys()); + return new ArrayList<>(main.getWorld(player.getWorld()).getConfig().getRegistry(TerraStructure.class).keys()); } } diff --git a/common/src/main/java/com/dfsek/terra/config/pack/ConfigPack.java b/common/src/main/java/com/dfsek/terra/config/pack/ConfigPack.java index 3de4eeb20..d9d1e2be9 100644 --- a/common/src/main/java/com/dfsek/terra/config/pack/ConfigPack.java +++ b/common/src/main/java/com/dfsek/terra/config/pack/ConfigPack.java @@ -276,10 +276,6 @@ public class ConfigPack implements LoaderRegistrar { return new CheckedRegistry<>(scriptRegistry); } - public CheckedRegistry getLootRegistry() { - return new CheckedRegistry<>(lootRegistry); - } - public WorldConfig toWorldConfig(TerraWorld world) { return new WorldConfig(world, this, main); diff --git a/common/src/main/java/com/dfsek/terra/config/pack/WorldConfig.java b/common/src/main/java/com/dfsek/terra/config/pack/WorldConfig.java index 40fbe711c..a9fddf712 100644 --- a/common/src/main/java/com/dfsek/terra/config/pack/WorldConfig.java +++ b/common/src/main/java/com/dfsek/terra/config/pack/WorldConfig.java @@ -1,63 +1,54 @@ package com.dfsek.terra.config.pack; import com.dfsek.terra.api.TerraPlugin; -import com.dfsek.terra.api.platform.world.Tree; import com.dfsek.terra.api.registry.LockedRegistry; -import com.dfsek.terra.api.structures.loot.LootTable; import com.dfsek.terra.api.structures.script.StructureScript; import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.api.world.biome.provider.BiomeProvider; -import com.dfsek.terra.api.world.flora.Flora; -import com.dfsek.terra.api.world.palette.Palette; import com.dfsek.terra.carving.UserDefinedCarver; import com.dfsek.terra.config.builder.BiomeBuilder; import com.dfsek.terra.registry.OpenRegistry; import com.dfsek.terra.world.TerraWorld; import com.dfsek.terra.world.generation.math.SamplerCache; import com.dfsek.terra.world.population.items.TerraStructure; -import com.dfsek.terra.world.population.items.ores.Ore; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Set; public class WorldConfig { private final LockedRegistry scriptRegistry; - private final LockedRegistry biomeRegistry; private final SamplerCache samplerCache; - private final LockedRegistry carverRegistry; - private final LockedRegistry treeRegistry; - private final LockedRegistry floraRegistry; - private final LockedRegistry lootRegistry; - private final LockedRegistry oreRegistry; - private final LockedRegistry paletteRegistry; - private final LockedRegistry structureRegistry; private final BiomeProvider provider; private final TerraWorld world; private final ConfigPack pack; + private final Map, LockedRegistry> registryMap = new HashMap<>(); + public WorldConfig(TerraWorld world, ConfigPack pack, TerraPlugin main) { this.world = world; this.pack = pack; this.samplerCache = new SamplerCache(main, world); + + pack.getConfigTypeRegistry().forEach(configType -> registryMap.put(configType.getTypeClass(), new LockedRegistry<>(pack.getRegistry(configType.getTypeClass())))); + this.scriptRegistry = new LockedRegistry<>(pack.getScriptRegistry()); OpenRegistry biomeOpenRegistry = new OpenRegistry<>(); pack.getRegistry(BiomeBuilder.class).forEach((id, biome) -> biomeOpenRegistry.add(id, biome.apply(world.getWorld().getSeed()))); - - this.biomeRegistry = new LockedRegistry<>(biomeOpenRegistry); - this.carverRegistry = new LockedRegistry<>(pack.getRegistry(UserDefinedCarver.class)); - this.treeRegistry = new LockedRegistry<>(pack.getRegistry(Tree.class)); - this.floraRegistry = new LockedRegistry<>(pack.getRegistry(Flora.class)); - this.lootRegistry = new LockedRegistry<>(pack.getLootRegistry()); - this.oreRegistry = new LockedRegistry<>(pack.getRegistry(Ore.class)); - this.paletteRegistry = new LockedRegistry<>(pack.getRegistry(Palette.class)); - this.structureRegistry = new LockedRegistry<>(pack.getRegistry(TerraStructure.class)); + registryMap.put(TerraBiome.class, new LockedRegistry<>(biomeOpenRegistry)); this.provider = pack.getBiomeProviderBuilder().build(world.getWorld().getSeed()); } + @SuppressWarnings("unchecked") + public LockedRegistry getRegistry(Class clazz) { + return (LockedRegistry) registryMap.get(clazz); + } + public TerraWorld getWorld() { return world; } @@ -67,51 +58,19 @@ public class WorldConfig { } public Set getCarvers() { - return new HashSet<>(carverRegistry.entries()); + return new HashSet<>(getRegistry(UserDefinedCarver.class).entries()); } public LockedRegistry getScriptRegistry() { return scriptRegistry; } - public LockedRegistry getBiomeRegistry() { - return biomeRegistry; - } - - public LockedRegistry getTreeRegistry() { - return treeRegistry; - } - - public LockedRegistry getCarverRegistry() { - return carverRegistry; - } - - public LockedRegistry getFloraRegistry() { - return floraRegistry; - } - - public LockedRegistry getLootRegistry() { - return lootRegistry; - } - - public LockedRegistry getOreRegistry() { - return oreRegistry; - } - - public LockedRegistry getPaletteRegistry() { - return paletteRegistry; - } - - public LockedRegistry getStructureRegistry() { - return structureRegistry; - } - public BiomeProvider getProvider() { return provider; } public Set getStructures() { - return new HashSet<>(structureRegistry.entries()); + return new HashSet<>(getRegistry(TerraStructure.class).entries()); } public ConfigPackTemplate getTemplate() { diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/CommonListener.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/CommonListener.java index 5c6d31183..9e2a65407 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/CommonListener.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/CommonListener.java @@ -52,7 +52,7 @@ public class CommonListener implements Listener { Block block = e.getLocation().getBlock(); BlockData data = block.getBlockData(); block.setType(Material.AIR); - Tree tree = c.getTreeRegistry().get(TREE_TYPE_STRING_TRANSFORMER.translate(e.getSpecies())); + Tree tree = c.getRegistry(Tree.class).get(TREE_TYPE_STRING_TRANSFORMER.translate(e.getSpecies())); org.bukkit.Location location = e.getLocation(); if(!tree.plant(new Location(bukkit, location.getX(), location.getY(), location.getZ()), new FastRandom())) block.setBlockData(data); } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/PaperListener.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/PaperListener.java index 3945451f4..aebdd017d 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/PaperListener.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/PaperListener.java @@ -23,7 +23,7 @@ public class PaperListener implements Listener { String name = "minecraft:" + e.getType().getName(); main.getDebugLogger().info("Overriding structure location for \"" + name + "\""); TerraWorld tw = main.getWorld(BukkitAdapter.adapt(e.getWorld())); - TerraStructure config = tw.getConfig().getStructureRegistry().get(tw.getConfig().getTemplate().getLocatable().get(name)); + TerraStructure config = tw.getConfig().getRegistry(TerraStructure.class).get(tw.getConfig().getTemplate().getLocatable().get(name)); if(config != null) { AsyncStructureFinder finder = new AsyncStructureFinder(tw.getBiomeProvider(), config, BukkitAdapter.adapt(e.getOrigin()), 0, 500, location -> { if(location != null) diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/SpigotListener.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/SpigotListener.java index fe4681e61..0260bf215 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/SpigotListener.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/SpigotListener.java @@ -37,7 +37,7 @@ public class SpigotListener implements Listener { if(!TerraWorld.isTerraWorld(BukkitAdapter.adapt(e.getEntity().getWorld()))) return; TerraWorld tw = main.getWorld(BukkitAdapter.adapt(e.getEntity().getWorld())); EnderSignal signal = (EnderSignal) entity; - TerraStructure config = tw.getConfig().getStructureRegistry().get(tw.getConfig().getTemplate().getLocatable().get("STRONGHOLD")); + TerraStructure config = tw.getConfig().getRegistry(TerraStructure.class).get(tw.getConfig().getTemplate().getLocatable().get("STRONGHOLD")); if(config != null) { main.getDebugLogger().info("Overriding Ender Signal..."); AsyncStructureFinder finder = new AsyncStructureFinder(tw.getBiomeProvider(), config, BukkitAdapter.adapt(e.getLocation()), 0, 500, location -> {