package jas.spawner.modern.modification;
import jas.common.JASLog;
import jas.common.JustAnotherSpawner;
import jas.common.global.ImportedSpawnList;
import jas.spawner.modern.spawner.biome.group.BiomeGroupRegistry;
import jas.spawner.modern.spawner.biome.group.BiomeGroupRegistry.BiomeGroup;
import jas.spawner.modern.spawner.biome.structure.StructureHandlerRegistry;
import jas.spawner.modern.spawner.creature.entry.BiomeSpawnListRegistry;
import jas.spawner.modern.spawner.creature.entry.SpawnListEntry;
import jas.spawner.modern.spawner.creature.entry.SpawnListEntryBuilder;
import jas.spawner.modern.spawner.creature.handler.LivingGroupRegistry;
import jas.spawner.modern.spawner.creature.handler.LivingHandler;
import jas.spawner.modern.spawner.creature.handler.LivingHandlerRegistry;
import jas.spawner.modern.spawner.creature.handler.LivingGroupRegistry.LivingGroup;
import jas.spawner.modern.spawner.creature.type.CreatureTypeRegistry;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Set;
import net.minecraft.entity.EntityLiving;
import org.apache.logging.log4j.Level;
import com.google.common.base.Optional;
public class ModAddBiomeGroup extends BaseModification {
public final String groupName;
public final Optional<String> configName;
public final ArrayList<String> contents;
public ModAddBiomeGroup(String groupName, ArrayList<String> contents) {
this(groupName, null, contents);
}
public ModAddBiomeGroup(String groupName, String configName, ArrayList<String> contents) {
this.groupName = groupName;
this.configName = configName != null ? Optional.of(configName) : Optional.<String> absent();
this.contents = contents;
}
@Override
public void applyModification(BiomeGroupRegistry registry) {
if (configName.isPresent()) {
registry.addBiomeGroup(groupName, configName.get(), contents);
} else {
registry.addBiomeGroup(groupName, contents);
}
}
@Override
public void applyModification(BiomeSpawnListRegistry registry) {
LivingHandlerRegistry livingHandlerRegistry = registry.livingHandlerRegistry;
BiomeGroupRegistry biomeGroupRegistry = registry.biomeGroupRegistry;
LivingGroupRegistry livingGroupRegistry = registry.livingGroupRegistry;
ImportedSpawnList importedSpawnList = JustAnotherSpawner.importedSpawnList();
/* For all LivingGroups (that are not CreatureType NONE) */
Collection<LivingHandler> livingHandlers = livingHandlerRegistry.getLivingHandlers();
for (LivingHandler handler : livingHandlers) {
if (handler.creatureTypeID.equalsIgnoreCase(CreatureTypeRegistry.NONE)) {
continue;
}
BiomeGroup group = biomeGroupRegistry.getBiomeGroup(groupName);
SpawnListEntryBuilder spawnListEntry = findVanillaSpawnListEntry(group, handler, importedSpawnList,
biomeGroupRegistry, livingGroupRegistry);
registry.addSpawnListEntry(spawnListEntry);
}
}
private SpawnListEntryBuilder findVanillaSpawnListEntry(BiomeGroup group, LivingHandler livingHandler,
ImportedSpawnList importedSpawnList, BiomeGroupRegistry biomeGroupRegistry,
LivingGroupRegistry livingGroupRegistry) {
for (String pckgNames : group.getBiomeNames()) {
for (Integer biomeID : biomeGroupRegistry.pckgNameToBiomeID().get(pckgNames)) {
Collection<net.minecraft.world.biome.BiomeGenBase.SpawnListEntry> spawnListEntries = importedSpawnList
.getSpawnableCreatureList(biomeID);
for (String jasName : livingHandler.namedJASSpawnables) {
Class<? extends EntityLiving> livingClass = livingGroupRegistry.JASNametoEntityClass.get(jasName);
for (net.minecraft.world.biome.BiomeGenBase.SpawnListEntry spawnListEntry : spawnListEntries) {
if (spawnListEntry.entityClass.equals(livingClass)) {
return new SpawnListEntryBuilder(livingHandler.livingID, group.groupID)
.setWeight(spawnListEntry.itemWeight).setMinChunkPack(spawnListEntry.minGroupCount)
.setMaxChunkPack(spawnListEntry.maxGroupCount);
}
}
}
}
}
return new SpawnListEntryBuilder(livingHandler.livingID, group.groupID);
}
}