package net.minecraft.world.gen;
import com.google.common.collect.Lists;
import java.util.Iterator;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EnumCreatureType;
import net.minecraft.init.Blocks;
import net.minecraft.util.BlockPos;
import net.minecraft.util.IProgressUpdate;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.chunk.ChunkPrimer;
import net.minecraft.world.chunk.IChunkProvider;
public class ChunkProviderDebug implements IChunkProvider
{
private static final List field_177464_a = Lists.newArrayList();
private static final int field_177462_b;
private final World field_177463_c;
private static final String __OBFID = "CL_00002002";
public ChunkProviderDebug(World worldIn)
{
this.field_177463_c = worldIn;
}
/**
* Will return back a chunk, if it doesn't exist and its not a MP client it will generates all the blocks for the
* specified chunk from the map seed and chunk seed
*/
public Chunk provideChunk(int p_73154_1_, int p_73154_2_)
{
ChunkPrimer var3 = new ChunkPrimer();
int var7;
for (int var4 = 0; var4 < 16; ++var4)
{
for (int var5 = 0; var5 < 16; ++var5)
{
int var6 = p_73154_1_ * 16 + var4;
var7 = p_73154_2_ * 16 + var5;
var3.setBlockState(var4, 60, var5, Blocks.barrier.getDefaultState());
IBlockState var8 = func_177461_b(var6, var7);
if (var8 != null)
{
var3.setBlockState(var4, 70, var5, var8);
}
}
}
Chunk var9 = new Chunk(this.field_177463_c, var3, p_73154_1_, p_73154_2_);
var9.generateSkylightMap();
BiomeGenBase[] var10 = this.field_177463_c.getWorldChunkManager().loadBlockGeneratorData((BiomeGenBase[])null, p_73154_1_ * 16, p_73154_2_ * 16, 16, 16);
byte[] var11 = var9.getBiomeArray();
for (var7 = 0; var7 < var11.length; ++var7)
{
var11[var7] = (byte)var10[var7].biomeID;
}
var9.generateSkylightMap();
return var9;
}
public static IBlockState func_177461_b(int p_177461_0_, int p_177461_1_)
{
IBlockState var2 = null;
if (p_177461_0_ > 0 && p_177461_1_ > 0 && p_177461_0_ % 2 != 0 && p_177461_1_ % 2 != 0)
{
p_177461_0_ /= 2;
p_177461_1_ /= 2;
if (p_177461_0_ <= field_177462_b && p_177461_1_ <= field_177462_b)
{
int var3 = MathHelper.abs_int(p_177461_0_ * field_177462_b + p_177461_1_);
if (var3 < field_177464_a.size())
{
var2 = (IBlockState)field_177464_a.get(var3);
}
}
}
return var2;
}
/**
* Checks to see if a chunk exists at x, y
*/
public boolean chunkExists(int p_73149_1_, int p_73149_2_)
{
return true;
}
/**
* Populates chunk with ores etc etc
*/
public void populate(IChunkProvider p_73153_1_, int p_73153_2_, int p_73153_3_) {}
public boolean func_177460_a(IChunkProvider p_177460_1_, Chunk p_177460_2_, int p_177460_3_, int p_177460_4_)
{
return false;
}
/**
* Two modes of operation: if passed true, save all Chunks in one go. If passed false, save up to two chunks.
* Return true if all chunks have been saved.
*/
public boolean saveChunks(boolean p_73151_1_, IProgressUpdate p_73151_2_)
{
return true;
}
/**
* Save extra data not associated with any Chunk. Not saved during autosave, only during world unload. Currently
* unimplemented.
*/
public void saveExtraData() {}
/**
* Unloads chunks that are marked to be unloaded. This is not guaranteed to unload every such chunk.
*/
public boolean unloadQueuedChunks()
{
return false;
}
/**
* Returns if the IChunkProvider supports saving.
*/
public boolean canSave()
{
return true;
}
/**
* Converts the instance data to a readable string.
*/
public String makeString()
{
return "DebugLevelSource";
}
public List func_177458_a(EnumCreatureType p_177458_1_, BlockPos p_177458_2_)
{
BiomeGenBase var3 = this.field_177463_c.getBiomeGenForCoords(p_177458_2_);
return var3.getSpawnableList(p_177458_1_);
}
public BlockPos func_180513_a(World worldIn, String p_180513_2_, BlockPos p_180513_3_)
{
return null;
}
public int getLoadedChunkCount()
{
return 0;
}
public void func_180514_a(Chunk p_180514_1_, int p_180514_2_, int p_180514_3_) {}
public Chunk func_177459_a(BlockPos p_177459_1_)
{
return this.provideChunk(p_177459_1_.getX() >> 4, p_177459_1_.getZ() >> 4);
}
static
{
Iterator var0 = Block.blockRegistry.iterator();
while (var0.hasNext())
{
Block var1 = (Block)var0.next();
field_177464_a.addAll(var1.getBlockState().getValidStates());
}
field_177462_b = MathHelper.ceiling_float_int(MathHelper.sqrt_float((float)field_177464_a.size()));
}
}