package jas.spawner.refactor.biome; import jas.spawner.modern.spawner.biome.group.BiomeHelper; import jas.spawner.refactor.biome.BiomeGroupBuilder.BiomeGroup; 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.ImmutableMapGroupsBuilder; import java.util.Map; import net.minecraft.world.biome.BiomeGenBase; import net.minecraftforge.common.BiomeDictionary; import net.minecraftforge.common.BiomeDictionary.Type; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ListMultimap; public class BiomeDictionaryGroups implements Groups { private ImmutableMap<String, BiomeGroup> iDToGroup; private ImmutableListMultimap<String, String> mappingToGroupID; @Override public String key() { return "D."; } @Override public Map<String, BiomeGroup> iDToGroup() { return iDToGroup; } public BiomeDictionaryGroups(BiomeMappings biomeMappings) { loadFromConfig(biomeMappings); } private void loadFromConfig(BiomeMappings biomeMappings) { ImmutableMapGroupsBuilder<BiomeGroupBuilder> attributeGroups = new ImmutableMapGroupsBuilder<BiomeGroupBuilder>( "D|"); /* Define Group for each BiomeDictionary Type */ for (Type type : BiomeDictionary.Type.values()) { BiomeGroupBuilder attributeGroup = new BiomeGroupBuilder(type.toString()); StringBuilder expressionBuilder = new StringBuilder(); BiomeGenBase[] types = BiomeDictionary.getBiomesForType(type); if (types.length != 0) { expressionBuilder.append("Builder()."); for (int i = 0; i < types.length; i++) { BiomeGenBase biome = types[i]; expressionBuilder.append("A('") .append(biomeMappings.keyToMapping().get(BiomeHelper.getPackageName(biome))).append("')"); } } attributeGroup.setContents(expressionBuilder.toString()); attributeGroups.addGroup(attributeGroup); } ListMultimap<String, String> mappingToGroupIDBuilder = ArrayListMultimap.create(); LocationContext context = new LocationContext(biomeMappings); ImmutableMapGroupsBuilder<BiomeGroup> attributeBuilder = new ImmutableMapGroupsBuilder<BiomeGroup>("D|"); for (BiomeGroupBuilder dictionaryGroup : attributeGroups.iDToGroup().values()) { Group.Parser.parseGroupContents(dictionaryGroup, context); attributeBuilder.addGroup(dictionaryGroup.build()); for (String mapping : dictionaryGroup.results()) { mappingToGroupIDBuilder.get(mapping).add(dictionaryGroup.iD()); } } iDToGroup = attributeBuilder.build(); mappingToGroupID = ImmutableListMultimap.<String, String> builder().putAll(mappingToGroupIDBuilder).build(); } }