package net.minecraft.world.gen.structure;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.Map.Entry;
import net.minecraft.entity.monster.EntityGuardian;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.MathHelper;
import net.minecraft.world.ChunkCoordIntPair;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
public class StructureOceanMonument extends MapGenStructure
{
private int field_175800_f;
private int field_175801_g;
public static final List field_175802_d = Arrays.asList(new BiomeGenBase[] {BiomeGenBase.ocean, BiomeGenBase.deepOcean, BiomeGenBase.river, BiomeGenBase.frozenOcean, BiomeGenBase.frozenRiver});
private static final List field_175803_h = Lists.newArrayList();
private static final String __OBFID = "CL_00001996";
public StructureOceanMonument()
{
this.field_175800_f = 32;
this.field_175801_g = 5;
}
public StructureOceanMonument(Map p_i45608_1_)
{
this();
Iterator var2 = p_i45608_1_.entrySet().iterator();
while (var2.hasNext())
{
Entry var3 = (Entry)var2.next();
if (((String)var3.getKey()).equals("spacing"))
{
this.field_175800_f = MathHelper.parseIntWithDefaultAndMax((String)var3.getValue(), this.field_175800_f, 1);
}
else if (((String)var3.getKey()).equals("separation"))
{
this.field_175801_g = MathHelper.parseIntWithDefaultAndMax((String)var3.getValue(), this.field_175801_g, 1);
}
}
}
public String getStructureName()
{
return "Monument";
}
protected boolean canSpawnStructureAtCoords(int p_75047_1_, int p_75047_2_)
{
int var3 = p_75047_1_;
int var4 = p_75047_2_;
if (p_75047_1_ < 0)
{
p_75047_1_ -= this.field_175800_f - 1;
}
if (p_75047_2_ < 0)
{
p_75047_2_ -= this.field_175800_f - 1;
}
int var5 = p_75047_1_ / this.field_175800_f;
int var6 = p_75047_2_ / this.field_175800_f;
Random var7 = this.worldObj.setRandomSeed(var5, var6, 10387313);
var5 *= this.field_175800_f;
var6 *= this.field_175800_f;
var5 += (var7.nextInt(this.field_175800_f - this.field_175801_g) + var7.nextInt(this.field_175800_f - this.field_175801_g)) / 2;
var6 += (var7.nextInt(this.field_175800_f - this.field_175801_g) + var7.nextInt(this.field_175800_f - this.field_175801_g)) / 2;
if (var3 == var5 && var4 == var6)
{
if (this.worldObj.getWorldChunkManager().func_180300_a(new BlockPos(var3 * 16 + 8, 64, var4 * 16 + 8), (BiomeGenBase)null) != BiomeGenBase.deepOcean)
{
return false;
}
boolean var8 = this.worldObj.getWorldChunkManager().areBiomesViable(var3 * 16 + 8, var4 * 16 + 8, 29, field_175802_d);
if (var8)
{
return true;
}
}
return false;
}
protected StructureStart getStructureStart(int p_75049_1_, int p_75049_2_)
{
return new StructureOceanMonument.StartMonument(this.worldObj, this.rand, p_75049_1_, p_75049_2_);
}
public List func_175799_b()
{
return field_175803_h;
}
static
{
field_175803_h.add(new BiomeGenBase.SpawnListEntry(EntityGuardian.class, 1, 2, 4));
}
public static class StartMonument extends StructureStart
{
private Set field_175791_c = Sets.newHashSet();
private boolean field_175790_d;
private static final String __OBFID = "CL_00001995";
public StartMonument() {}
public StartMonument(World worldIn, Random p_i45607_2_, int p_i45607_3_, int p_i45607_4_)
{
super(p_i45607_3_, p_i45607_4_);
this.func_175789_b(worldIn, p_i45607_2_, p_i45607_3_, p_i45607_4_);
}
private void func_175789_b(World worldIn, Random p_175789_2_, int p_175789_3_, int p_175789_4_)
{
p_175789_2_.setSeed(worldIn.getSeed());
long var5 = p_175789_2_.nextLong();
long var7 = p_175789_2_.nextLong();
long var9 = (long)p_175789_3_ * var5;
long var11 = (long)p_175789_4_ * var7;
p_175789_2_.setSeed(var9 ^ var11 ^ worldIn.getSeed());
int var13 = p_175789_3_ * 16 + 8 - 29;
int var14 = p_175789_4_ * 16 + 8 - 29;
EnumFacing var15 = EnumFacing.Plane.HORIZONTAL.random(p_175789_2_);
this.components.add(new StructureOceanMonumentPieces.MonumentBuilding(p_175789_2_, var13, var14, var15));
this.updateBoundingBox();
this.field_175790_d = true;
}
public void generateStructure(World worldIn, Random p_75068_2_, StructureBoundingBox p_75068_3_)
{
if (!this.field_175790_d)
{
this.components.clear();
this.func_175789_b(worldIn, p_75068_2_, this.func_143019_e(), this.func_143018_f());
}
super.generateStructure(worldIn, p_75068_2_, p_75068_3_);
}
public boolean func_175788_a(ChunkCoordIntPair p_175788_1_)
{
return this.field_175791_c.contains(p_175788_1_) ? false : super.func_175788_a(p_175788_1_);
}
public void func_175787_b(ChunkCoordIntPair p_175787_1_)
{
super.func_175787_b(p_175787_1_);
this.field_175791_c.add(p_175787_1_);
}
public void func_143022_a(NBTTagCompound p_143022_1_)
{
super.func_143022_a(p_143022_1_);
NBTTagList var2 = new NBTTagList();
Iterator var3 = this.field_175791_c.iterator();
while (var3.hasNext())
{
ChunkCoordIntPair var4 = (ChunkCoordIntPair)var3.next();
NBTTagCompound var5 = new NBTTagCompound();
var5.setInteger("X", var4.chunkXPos);
var5.setInteger("Z", var4.chunkZPos);
var2.appendTag(var5);
}
p_143022_1_.setTag("Processed", var2);
}
public void func_143017_b(NBTTagCompound p_143017_1_)
{
super.func_143017_b(p_143017_1_);
if (p_143017_1_.hasKey("Processed", 9))
{
NBTTagList var2 = p_143017_1_.getTagList("Processed", 10);
for (int var3 = 0; var3 < var2.tagCount(); ++var3)
{
NBTTagCompound var4 = var2.getCompoundTagAt(var3);
this.field_175791_c.add(new ChunkCoordIntPair(var4.getInteger("X"), var4.getInteger("Z")));
}
}
}
}
}