package net.minecraft.world.chunk.storage;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.world.biome.WorldChunkManager;
import net.minecraft.world.chunk.NibbleArray;
public class ChunkLoader
{
public static AnvilConverterData load(NBTTagCompound par0NBTTagCompound)
{
int i = par0NBTTagCompound.getInteger("xPos");
int j = par0NBTTagCompound.getInteger("zPos");
AnvilConverterData anvilconverterdata = new AnvilConverterData(i, j);
anvilconverterdata.blocks = par0NBTTagCompound.getByteArray("Blocks");
anvilconverterdata.data = new NibbleArrayReader(par0NBTTagCompound.getByteArray("Data"), 7);
anvilconverterdata.skyLight = new NibbleArrayReader(par0NBTTagCompound.getByteArray("SkyLight"), 7);
anvilconverterdata.blockLight = new NibbleArrayReader(par0NBTTagCompound.getByteArray("BlockLight"), 7);
anvilconverterdata.heightmap = par0NBTTagCompound.getByteArray("HeightMap");
anvilconverterdata.terrainPopulated = par0NBTTagCompound.getBoolean("TerrainPopulated");
anvilconverterdata.entities = par0NBTTagCompound.getTagList("Entities");
anvilconverterdata.tileEntities = par0NBTTagCompound.getTagList("TileEntities");
anvilconverterdata.tileTicks = par0NBTTagCompound.getTagList("TileTicks");
try
{
anvilconverterdata.lastUpdated = par0NBTTagCompound.getLong("LastUpdate");
}
catch (ClassCastException classcastexception)
{
anvilconverterdata.lastUpdated = (long)par0NBTTagCompound.getInteger("LastUpdate");
}
return anvilconverterdata;
}
public static void convertToAnvilFormat(AnvilConverterData par0AnvilConverterData, NBTTagCompound par1NBTTagCompound, WorldChunkManager par2WorldChunkManager)
{
par1NBTTagCompound.setInteger("xPos", par0AnvilConverterData.x);
par1NBTTagCompound.setInteger("zPos", par0AnvilConverterData.z);
par1NBTTagCompound.setLong("LastUpdate", par0AnvilConverterData.lastUpdated);
int[] aint = new int[par0AnvilConverterData.heightmap.length];
for (int i = 0; i < par0AnvilConverterData.heightmap.length; ++i)
{
aint[i] = par0AnvilConverterData.heightmap[i];
}
par1NBTTagCompound.setIntArray("HeightMap", aint);
par1NBTTagCompound.setBoolean("TerrainPopulated", par0AnvilConverterData.terrainPopulated);
NBTTagList nbttaglist = new NBTTagList("Sections");
int j;
for (int k = 0; k < 8; ++k)
{
boolean flag = true;
for (j = 0; j < 16 && flag; ++j)
{
int l = 0;
while (l < 16 && flag)
{
int i1 = 0;
while (true)
{
if (i1 < 16)
{
int j1 = j << 11 | i1 << 7 | l + (k << 4);
byte b0 = par0AnvilConverterData.blocks[j1];
if (b0 == 0)
{
++i1;
continue;
}
flag = false;
}
++l;
break;
}
}
}
if (!flag)
{
byte[] abyte = new byte[4096];
NibbleArray nibblearray = new NibbleArray(abyte.length, 4);
NibbleArray nibblearray1 = new NibbleArray(abyte.length, 4);
NibbleArray nibblearray2 = new NibbleArray(abyte.length, 4);
for (int k1 = 0; k1 < 16; ++k1)
{
for (int l1 = 0; l1 < 16; ++l1)
{
for (int i2 = 0; i2 < 16; ++i2)
{
int j2 = k1 << 11 | i2 << 7 | l1 + (k << 4);
byte b1 = par0AnvilConverterData.blocks[j2];
abyte[l1 << 8 | i2 << 4 | k1] = (byte)(b1 & 255);
nibblearray.set(k1, l1, i2, par0AnvilConverterData.data.get(k1, l1 + (k << 4), i2));
nibblearray1.set(k1, l1, i2, par0AnvilConverterData.skyLight.get(k1, l1 + (k << 4), i2));
nibblearray2.set(k1, l1, i2, par0AnvilConverterData.blockLight.get(k1, l1 + (k << 4), i2));
}
}
}
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
nbttagcompound1.setByte("Y", (byte)(k & 255));
nbttagcompound1.setByteArray("Blocks", abyte);
nbttagcompound1.setByteArray("Data", nibblearray.data);
nbttagcompound1.setByteArray("SkyLight", nibblearray1.data);
nbttagcompound1.setByteArray("BlockLight", nibblearray2.data);
nbttaglist.appendTag(nbttagcompound1);
}
}
par1NBTTagCompound.setTag("Sections", nbttaglist);
byte[] abyte1 = new byte[256];
for (int k2 = 0; k2 < 16; ++k2)
{
for (j = 0; j < 16; ++j)
{
abyte1[j << 4 | k2] = (byte)(par2WorldChunkManager.getBiomeGenAt(par0AnvilConverterData.x << 4 | k2, par0AnvilConverterData.z << 4 | j).biomeID & 255);
}
}
par1NBTTagCompound.setByteArray("Biomes", abyte1);
par1NBTTagCompound.setTag("Entities", par0AnvilConverterData.entities);
par1NBTTagCompound.setTag("TileEntities", par0AnvilConverterData.tileEntities);
if (par0AnvilConverterData.tileTicks != null)
{
par1NBTTagCompound.setTag("TileTicks", par0AnvilConverterData.tileTicks);
}
}
}