package jas.common.global; import jas.common.JASLog; import jas.common.helper.FileUtilities; import jas.common.helper.GsonHelper; import jas.spawner.modern.DefaultProps; import jas.spawner.modern.spawner.biome.group.BiomeHelper; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.TreeMap; import net.minecraft.entity.EnumCreatureType; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.biome.BiomeGenBase.SpawnListEntry; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; import com.google.common.collect.Table; import com.google.common.collect.TreeBasedTable; import com.google.gson.Gson; /** * Used to Temporarily Store Vanilla Spawn List Information before Clearin it * * Information is stored so that JAS can read defaults Vanilla Information is cleared so that it does not spawn anything */ public class ImportedSpawnList { private SpawnList[] spawnLists = new SpawnList[BiomeGenBase.getBiomeGenArray().length]; private static class SpawnList { public Multimap<EnumCreatureType, SpawnListEntry> spawnLists = ArrayListMultimap.create(); } @SuppressWarnings("unchecked") public ImportedSpawnList(BiomeBlacklist blacklist, boolean clearVanilla) { JASLog.log().info("Importing ".concat(clearVanilla ? "and clearing " : "").concat("vanilla spawn lists.")); for (int i = 0; i < BiomeGenBase.getBiomeGenArray().length; i++) { BiomeGenBase biome = BiomeGenBase.getBiomeGenArray()[i]; if (biome == null) { continue; } spawnLists[i] = new SpawnList(); for (EnumCreatureType type : EnumCreatureType.values()) { if (biome.getSpawnableList(type) != null) { spawnLists[i].spawnLists.get(type).addAll(biome.getSpawnableList(type)); if (clearVanilla && !blacklist.isBlacklisted(biome)) { biome.getSpawnableList(type).clear(); } } } } } public Collection<SpawnListEntry> getSpawnableCreatureList(BiomeGenBase biome, EnumCreatureType creatureType) { if (spawnLists[biome.biomeID] != null) { return spawnLists[biome.biomeID].spawnLists.get(creatureType); } else { return Collections.emptyList(); } } public Collection<SpawnListEntry> getSpawnableCreatureList(int biomeID, EnumCreatureType creatureType) { if (spawnLists[biomeID] != null) { return spawnLists[biomeID].spawnLists.get(creatureType); } else { return Collections.emptyList(); } } public Collection<SpawnListEntry> getSpawnableCreatureList(BiomeGenBase biome) { if (spawnLists[biome.biomeID] != null) { return spawnLists[biome.biomeID].spawnLists.values(); } else { return Collections.emptyList(); } } public Collection<SpawnListEntry> getSpawnableCreatureList(int biomeID) { if (spawnLists[biomeID] != null) { return spawnLists[biomeID].spawnLists.values(); } else { return Collections.emptyList(); } } public void exportImportedSpawnlistToFile(File configDirectory) { TreeMap<String, TreeMap<String, Collection<String>>> importedSpawnLists = new TreeMap<String, TreeMap<String, Collection<String>>>(); for (int i = 0; i < spawnLists.length; i++) { SpawnList spawnList = spawnLists[i]; if (spawnList != null) { TreeMap<String, Collection<String>> typeTpEntry = importedSpawnLists.get(BiomeHelper .getPackageName(BiomeGenBase.getBiomeGenArray()[i])); if (typeTpEntry == null) { typeTpEntry = new TreeMap<String, Collection<String>>(); importedSpawnLists.put(BiomeHelper.getPackageName(BiomeGenBase.getBiomeGenArray()[i]), typeTpEntry); } for (EnumCreatureType creatureType : spawnList.spawnLists.keySet()) { Collection<String> entries = typeTpEntry.get(creatureType.toString()); if (entries == null) { entries = new ArrayList<String>(); typeTpEntry.put(creatureType.toString(), entries); } for (SpawnListEntry spawnEntry : spawnList.spawnLists.get(creatureType)) { String value = spawnEntry.entityClass.getName() + ": [" + spawnEntry.itemWeight + ", " + spawnEntry.minGroupCount + "->" + spawnEntry.maxGroupCount + "]"; entries.add(value); } } } } Gson gson = GsonHelper.createGson(true); File importedSettingsFile = new File(configDirectory, DefaultProps.MODDIR + "ImportedSpawnlists.cfg"); GsonHelper.writeToGson(FileUtilities.createWriter(importedSettingsFile, true), importedSpawnLists, gson); } }