BiomesOPlenty/src/minecraft/biomesoplenty/worldgen/structure/BOPMapGenVillage.java

96 lines
2.9 KiB
Java
Raw Normal View History

2013-05-03 13:00:44 +00:00
package biomesoplenty.worldgen.structure;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
2013-05-03 13:00:44 +00:00
import net.minecraft.util.MathHelper;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.gen.structure.MapGenStructure;
import net.minecraft.world.gen.structure.MapGenVillage;
import net.minecraft.world.gen.structure.StructureStart;
import biomesoplenty.configuration.BOPConfiguration;
2013-05-03 13:00:44 +00:00
public class BOPMapGenVillage extends MapGenStructure
{
/** A list of all the biomes villages can spawn in. */
public static List villageSpawnBiomes = Arrays.asList(new BiomeGenBase[] {BiomeGenBase.plains, BiomeGenBase.desert});
/** World terrain type, 0 for normal, 1 for flat map */
private int terrainType;
private int maxDistance;
private int minDistance;
public BOPMapGenVillage()
{
this.terrainType = 0;
this.maxDistance = BOPConfiguration.villageDistance;
this.minDistance = BOPConfiguration.villageDistance / 4;
villageSpawnBiomes = MapGenVillage.villageSpawnBiomes;
}
public BOPMapGenVillage(Map par1Map)
{
this();
Iterator iterator = par1Map.entrySet().iterator();
while (iterator.hasNext())
{
Entry entry = (Entry)iterator.next();
if (((String)entry.getKey()).equals("size"))
{
this.terrainType = MathHelper.parseIntWithDefaultAndMax((String)entry.getValue(), this.terrainType, 0);
}
else if (((String)entry.getKey()).equals("distance"))
{
this.maxDistance = MathHelper.parseIntWithDefaultAndMax((String)entry.getValue(), this.maxDistance, this.minDistance + 1);
}
}
}
protected boolean canSpawnStructureAtCoords(int par1, int par2)
{
int k = par1;
int l = par2;
if (par1 < 0)
{
par1 -= this.maxDistance - 1;
}
if (par2 < 0)
{
par2 -= this.maxDistance - 1;
}
int i1 = par1 / this.maxDistance;
int j1 = par2 / this.maxDistance;
Random random = this.worldObj.setRandomSeed(i1, j1, 10387312);
i1 *= this.maxDistance;
j1 *= this.maxDistance;
i1 += random.nextInt(this.maxDistance - this.minDistance);
j1 += random.nextInt(this.maxDistance - this.minDistance);
if (k == i1 && l == j1)
{
boolean flag = this.worldObj.getWorldChunkManager().areBiomesViable(k * 16 + 8, l * 16 + 8, 0, villageSpawnBiomes);
if (flag)
{
return true;
}
}
return false;
}
protected StructureStart getStructureStart(int par1, int par2)
{
return new BOPStructureVillageStart(this.worldObj, this.rand, par1, par2, this.terrainType);
}
}