package jas.spawner.refactor.biome; import jas.spawner.refactor.biome.BiomeGroupBuilder.BiomeGroup; import jas.spawner.refactor.configsloader.BiomeSettingsLoader; import jas.spawner.refactor.configsloader.ConfigLoader; import jas.spawner.refactor.entities.Group; import jas.spawner.refactor.entities.Group.Groups; import jas.spawner.refactor.entities.Group.Parser.LocationContext; import jas.spawner.refactor.entities.Group.ReversibleGroups; import jas.spawner.refactor.entities.ImmutableMapGroupsBuilder; import java.util.Map; import java.util.TreeMap; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ListMultimap; public class BiomeAttributes implements ReversibleGroups { private ImmutableMap<String, BiomeGroup> iDToGroup; private ImmutableListMultimap<String, String> mappingToGroupID; @Override public String key() { return "A."; } @Override public Map<String, BiomeGroup> iDToGroup() { return iDToGroup; } /** Reverse Look-up Map to Get All Attributes a Particular Biome is In */ public ImmutableMultimap<String, String> mappingToID() { return mappingToGroupID; } public BiomeAttributes(ConfigLoader loader, BiomeMappings biomeMappings, Groups dictionary) { loadFromConfig(loader, biomeMappings, dictionary); } private void loadFromConfig(ConfigLoader loader, BiomeMappings biomeMappings, Groups dictionary) { BiomeSettingsLoader savedStats = loader.biomeGroupLoader.saveObject; ImmutableMapGroupsBuilder<BiomeGroupBuilder> attributeGroups = new ImmutableMapGroupsBuilder<BiomeGroupBuilder>( "A|"); if (savedStats.getConfigNameToAttributeGroups().isPresent()) { for (TreeMap<String, BiomeGroupBuilder> entries : savedStats.getConfigNameToAttributeGroups().get() .values()) { for (BiomeGroupBuilder attributeGroup : entries.values()) { if (!"".equals(attributeGroup.getGroupID())) { attributeGroups.addGroup(attributeGroup); } } } } LocationContext context = new LocationContext(biomeMappings, dictionary); ListMultimap<String, String> packgNameToAttribIDsBuilder = ArrayListMultimap.create(); ImmutableMapGroupsBuilder<BiomeGroup> attributeBuilder = new ImmutableMapGroupsBuilder<BiomeGroup>("A|"); for (BiomeGroupBuilder biomeGroup : attributeGroups.iDToGroup().values()) { Group.Parser.parseGroupContents(biomeGroup, context); attributeBuilder.addGroup(biomeGroup.build()); for (String pckgName : biomeGroup.results()) { packgNameToAttribIDsBuilder.get(pckgName).add(biomeGroup.iD()); } } iDToGroup = attributeBuilder.build(); mappingToGroupID = ImmutableListMultimap.<String, String> builder().putAll(packgNameToAttribIDsBuilder).build(); } }