package jas.spawner.refactor; import jas.common.JustAnotherSpawner; import jas.common.global.ImportedSpawnList; import jas.spawner.refactor.biome.BiomeAttributes; import jas.spawner.refactor.biome.BiomeDictionaryGroups; import jas.spawner.refactor.biome.BiomeGroupBuilder; import jas.spawner.refactor.biome.BiomeGroupBuilder.BiomeGroup; import jas.spawner.refactor.biome.BiomeGroups; import jas.spawner.refactor.biome.BiomeMappings; import jas.spawner.refactor.configsloader.BiomeSettingsLoader; import jas.spawner.refactor.configsloader.ConfigLoader; import jas.spawner.refactor.configsloader.ConfigLoader.LoadedFile; import jas.spawner.refactor.configsloader.LivingSettingsLoader; import jas.spawner.refactor.despawn.DespawnRules; import jas.spawner.refactor.entities.LivingAttributes; import jas.spawner.refactor.entities.LivingGroupBuilder; import jas.spawner.refactor.entities.LivingGroupBuilder.LivingGroup; import jas.spawner.refactor.entities.LivingMappings; import jas.spawner.refactor.structure.StructureHandlers; import java.io.File; import java.util.ArrayList; import java.util.Collection; import net.minecraft.world.World; /** * Contains all WorldSpecific spawn settings. Multiple instances may exist per world; there is a default implementation * for all dimensions but each dimension is capable of having its own override */ public class SpawnSettings { private LivingTypes livingTypes; private DespawnRules despawnRules; private BiomeSettings biomeSettings; private LivingSettings livingSettings; private StructureHandlers structureHandlers; private BiomeSpawnLists biomeGroupRegistry; public static class BiomeSettings { private BiomeMappings biomeMappings; private BiomeDictionaryGroups dictionaryGroups; private BiomeAttributes biomeAttributes; private BiomeGroups biomeGroups; private BiomeSettings(ConfigLoader loader) { this.biomeMappings = new BiomeMappings(loader); this.dictionaryGroups = new BiomeDictionaryGroups(biomeMappings); this.biomeAttributes = new BiomeAttributes(loader, biomeMappings, dictionaryGroups); this.biomeGroups = new BiomeGroups(loader, biomeMappings, dictionaryGroups, biomeAttributes); } public void saveToConfig(ConfigLoader loader) { Collection<BiomeGroupBuilder> attributeGroupsBuilders = new ArrayList<BiomeGroupBuilder>(); for (BiomeGroup biomeGroup : biomeAttributes.iDToGroup().values()) { attributeGroupsBuilders.add(new BiomeGroupBuilder(biomeGroup)); } Collection<BiomeGroupBuilder> biomeGroupBuilders = new ArrayList<BiomeGroupBuilder>(); for (BiomeGroup biomeGroup : this.biomeGroups.iDToGroup().values()) { biomeGroupBuilders.add(new BiomeGroupBuilder(biomeGroup)); } loader.biomeGroupLoader = new LoadedFile(new BiomeSettingsLoader(biomeMappings.keyToMapping(), attributeGroupsBuilders, biomeGroupBuilders)); } public BiomeMappings biomeMappings() { return biomeMappings; } public BiomeDictionaryGroups dictionaryGroups() { return dictionaryGroups; } public BiomeAttributes biomeAttributes() { return biomeAttributes; } public BiomeGroups biomeGroups() { return biomeGroups; } } public static class LivingSettings { private LivingMappings livingMappings; private LivingAttributes livingAttributes; private LivingHandlers livingHandlers; private LivingSettings(ConfigLoader loader, ImportedSpawnList importedSpawnList) { this.livingMappings = new LivingMappings(loader); this.livingAttributes = new LivingAttributes(loader, livingMappings); this.livingHandlers = new LivingHandlers(loader, livingMappings, livingAttributes); } public void saveToConfig(WorldProperties worldProperties, ConfigLoader loader) { Collection<LivingGroupBuilder> livingGroupBuilders = new ArrayList<LivingGroupBuilder>(); for (LivingGroup livingGroup : livingAttributes.iDToGroup().values()) { livingGroupBuilders.add(new LivingGroupBuilder(livingGroup)); } loader.livingGroupLoader = new LoadedFile(new LivingSettingsLoader(livingMappings.keyToMapping(), livingGroupBuilders)); livingHandlers.saveToConfig(worldProperties, loader, livingMappings, livingAttributes); } public LivingMappings livingMappings() { return livingMappings; } public LivingAttributes livingAttributes() { return livingAttributes; } public LivingHandlers livingHandlers() { return livingHandlers; } } public SpawnSettings(World world, WorldProperties worldProperties, File settingsDirectory) { loadFromConfig(world, worldProperties, settingsDirectory); } public void loadFromConfig(World world, WorldProperties worldProperties, File settingsDirectory) { ConfigLoader loader = new ConfigLoader(settingsDirectory, worldProperties); this.livingTypes = new LivingTypes(loader); this.despawnRules = new DespawnRules(loader, livingSettings, JustAnotherSpawner.importedSpawnList()); this.biomeSettings = new BiomeSettings(loader); this.livingSettings = new LivingSettings(loader, JustAnotherSpawner.importedSpawnList()); this.structureHandlers = new StructureHandlers(world, loader, livingSettings); this.biomeGroupRegistry = new BiomeSpawnLists(world, loader, worldProperties, livingSettings, biomeSettings, livingTypes, JustAnotherSpawner.importedSpawnList()); } public void saveToConfig(World world, WorldProperties worldProperties, File settingsDirectory) { ConfigLoader loader = new ConfigLoader(settingsDirectory, worldProperties); this.livingTypes.saveToConfig(loader); this.despawnRules.saveToConfig(loader); this.biomeSettings.saveToConfig(loader); this.livingSettings.saveToConfig(worldProperties, loader); this.structureHandlers.saveToConfig(worldProperties, loader); this.biomeGroupRegistry.saveToConfig(worldProperties, loader); } public LivingTypes livingTypes() { return livingTypes; } public DespawnRules despawnRules() { return despawnRules; } public BiomeMappings biomeMappings() { return biomeSettings.biomeMappings; } public BiomeDictionaryGroups dictionaryGroups() { return biomeSettings.dictionaryGroups; } public BiomeAttributes biomeAttributes() { return biomeSettings.biomeAttributes; } public BiomeGroups biomeGroups() { return biomeSettings.biomeGroups; } public LivingMappings livingMappings() { return livingSettings.livingMappings; } public LivingAttributes livingAttributes() { return livingSettings.livingAttributes; } public LivingHandlers livingHandlers() { return livingSettings.livingHandlers; } public StructureHandlers structureHandlers() { return structureHandlers; } public BiomeSpawnLists biomeGroupRegistry() { return biomeGroupRegistry; } public BiomeSettings biomeSettings() { return biomeSettings; } public LivingSettings livingSettings() { return livingSettings; } }