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 BiomeGroups implements ReversibleGroups { private ImmutableMap<String, BiomeGroup> iDToGroup; private ImmutableListMultimap<String, String> mappingToGroupID; public static String key = "G."; @Override public String key() { return key; } @Override public Map<String, BiomeGroup> iDToGroup() { return iDToGroup; } /** Reverse Look-up Map to Get All Attributes a Particular Biome is In */ @Override public ImmutableMultimap<String, String> mappingToID() { return mappingToGroupID; } public BiomeGroups(ConfigLoader loader, BiomeMappings biomeMappings, Groups dictionary, BiomeAttributes attributes) { loadFromConfig(loader, biomeMappings, dictionary, attributes); } private void loadFromConfig(ConfigLoader loader, BiomeMappings biomeMappings, Groups dictionary, BiomeAttributes attributes) { BiomeSettingsLoader savedStats = loader.biomeGroupLoader.saveObject; ImmutableMapGroupsBuilder<BiomeGroupBuilder> biomeGroups = new ImmutableMapGroupsBuilder<BiomeGroupBuilder>(key); if (savedStats.getConfigNameToAttributeGroups().isPresent()) { for (TreeMap<String, BiomeGroupBuilder> entries : savedStats.getConfigNameToAttributeGroups().get() .values()) { for (BiomeGroupBuilder biomeGroup : entries.values()) { if (!"".equals(biomeGroup.getGroupID())) { biomeGroups.addGroup(biomeGroup); } } } } /* Create new BiomeGroup for each new Mapping */ for (String newMapping : biomeMappings.newMappings()) { BiomeGroupBuilder builder = new BiomeGroupBuilder(newMapping); builder.setContents("Builder().A(" + newMapping + ")"); biomeGroups.addGroup(builder); } LocationContext context = new LocationContext(biomeMappings, dictionary, attributes); ListMultimap<String, String> packgNameToBGIDsBuilder = ArrayListMultimap.create(); ImmutableMapGroupsBuilder<BiomeGroup> biomeGroupBuilder = new ImmutableMapGroupsBuilder<BiomeGroup>(key); for (BiomeGroupBuilder biomeGroup : biomeGroups.iDToGroup().values()) { Group.Parser.parseGroupContents(biomeGroup, context); biomeGroupBuilder.addGroup(biomeGroup.build()); for (String pckgName : biomeGroup.results()) { packgNameToBGIDsBuilder.get(pckgName).add(biomeGroup.iD()); } } iDToGroup = biomeGroupBuilder.build(); mappingToGroupID = ImmutableListMultimap.<String, String> builder().putAll(packgNameToBGIDsBuilder).build(); } }