package jas.spawner.refactor.biome;
import jas.common.JASLog;
import jas.spawner.modern.spawner.biome.group.BiomeHelper;
import jas.spawner.refactor.configsloader.BiomeSettingsLoader;
import jas.spawner.refactor.configsloader.ConfigLoader;
import jas.spawner.refactor.entities.Mappings;
import java.util.Collection;
import java.util.HashSet;
import net.minecraft.world.biome.BiomeGenBase;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.ImmutableBiMap;
public class BiomeMappings implements Mappings<String, String> {
private Collection<String> newMappings;
private ImmutableBiMap<String, String> PckgToJASName;
private ImmutableBiMap<String, String> JASNameToPckg;
public BiomeMappings(ConfigLoader loader) {
loadFromConfig(loader);
}
private void loadFromConfig(ConfigLoader loader) {
BiomeSettingsLoader biomeLoader = loader.biomeGroupLoader.saveObject;
newMappings = new HashSet<String>();
HashBiMap<String, String> biomeMappingToPckgBuilder = HashBiMap.create();
BiMap<String, String> biomePckgToMappingBuilder = biomeMappingToPckgBuilder.inverse();
biomePckgToMappingBuilder.putAll(biomeLoader.biomeMappings);
for (BiomeGenBase biome : BiomeGenBase.getBiomeGenArray()) {
if (biome == null) {
continue;
}
String packageName = BiomeHelper.getPackageName(biome);
// Only look for mapping if we already don't have a one for this Biome
if (!biomePckgToMappingBuilder.containsKey(packageName)) {
String uniqueMapping = getUniqueMapping(biome, biomeMappingToPckgBuilder);
biomePckgToMappingBuilder.put(packageName, uniqueMapping);
newMappings.add(uniqueMapping);
}
}
JASNameToPckg = ImmutableBiMap.<String, String> builder().putAll(biomeMappingToPckgBuilder).build();
PckgToJASName = JASNameToPckg.inverse();
}
private String getUniqueMapping(BiomeGenBase biome, BiMap<String, String> biomeMappingToPckgBuilder) {
String defaultMapping = biome.biomeName;
int attempts = 0;
while (defaultMapping == null || biomeMappingToPckgBuilder.containsKey(defaultMapping)) {
defaultMapping = BiomeHelper.getShortPackageName(biome);
if (attempts > 0) {
// For multiple tries, concat the number of the attempts
// to create a unique mapping... eventually ;)
defaultMapping = defaultMapping + "_" + attempts;
}
attempts++;
}
if (attempts > 0) {
JASLog.log().info("Duplicate mapping %s and was renamed to %s.", biome.biomeName, defaultMapping);
}
return defaultMapping;
}
@Override
public Collection<String> newMappings() {
return newMappings;
}
@Override
public BiMap<String, String> keyToMapping() {
return PckgToJASName;
}
@Override
public BiMap<String, String> mappingToKey() {
return JASNameToPckg;
}
}