001 package net.minecraft.world.chunk.storage;
002
003 import net.minecraft.nbt.NBTTagCompound;
004 import net.minecraft.nbt.NBTTagList;
005 import net.minecraft.world.biome.WorldChunkManager;
006 import net.minecraft.world.chunk.NibbleArray;
007
008 public class ChunkLoader
009 {
010 public static AnvilConverterData load(NBTTagCompound par0NBTTagCompound)
011 {
012 int var1 = par0NBTTagCompound.getInteger("xPos");
013 int var2 = par0NBTTagCompound.getInteger("zPos");
014 AnvilConverterData var3 = new AnvilConverterData(var1, var2);
015 var3.blocks = par0NBTTagCompound.getByteArray("Blocks");
016 var3.data = new NibbleArrayReader(par0NBTTagCompound.getByteArray("Data"), 7);
017 var3.skyLight = new NibbleArrayReader(par0NBTTagCompound.getByteArray("SkyLight"), 7);
018 var3.blockLight = new NibbleArrayReader(par0NBTTagCompound.getByteArray("BlockLight"), 7);
019 var3.heightmap = par0NBTTagCompound.getByteArray("HeightMap");
020 var3.terrainPopulated = par0NBTTagCompound.getBoolean("TerrainPopulated");
021 var3.entities = par0NBTTagCompound.getTagList("Entities");
022 var3.tileEntities = par0NBTTagCompound.getTagList("TileEntities");
023 var3.tileTicks = par0NBTTagCompound.getTagList("TileTicks");
024
025 try
026 {
027 var3.lastUpdated = par0NBTTagCompound.getLong("LastUpdate");
028 }
029 catch (ClassCastException var5)
030 {
031 var3.lastUpdated = (long)par0NBTTagCompound.getInteger("LastUpdate");
032 }
033
034 return var3;
035 }
036
037 public static void convertToAnvilFormat(AnvilConverterData par0AnvilConverterData, NBTTagCompound par1NBTTagCompound, WorldChunkManager par2WorldChunkManager)
038 {
039 par1NBTTagCompound.setInteger("xPos", par0AnvilConverterData.x);
040 par1NBTTagCompound.setInteger("zPos", par0AnvilConverterData.z);
041 par1NBTTagCompound.setLong("LastUpdate", par0AnvilConverterData.lastUpdated);
042 int[] var3 = new int[par0AnvilConverterData.heightmap.length];
043
044 for (int var4 = 0; var4 < par0AnvilConverterData.heightmap.length; ++var4)
045 {
046 var3[var4] = par0AnvilConverterData.heightmap[var4];
047 }
048
049 par1NBTTagCompound.setIntArray("HeightMap", var3);
050 par1NBTTagCompound.setBoolean("TerrainPopulated", par0AnvilConverterData.terrainPopulated);
051 NBTTagList var16 = new NBTTagList("Sections");
052 int var7;
053
054 for (int var5 = 0; var5 < 8; ++var5)
055 {
056 boolean var6 = true;
057
058 for (var7 = 0; var7 < 16 && var6; ++var7)
059 {
060 int var8 = 0;
061
062 while (var8 < 16 && var6)
063 {
064 int var9 = 0;
065
066 while (true)
067 {
068 if (var9 < 16)
069 {
070 int var10 = var7 << 11 | var9 << 7 | var8 + (var5 << 4);
071 byte var11 = par0AnvilConverterData.blocks[var10];
072
073 if (var11 == 0)
074 {
075 ++var9;
076 continue;
077 }
078
079 var6 = false;
080 }
081
082 ++var8;
083 break;
084 }
085 }
086 }
087
088 if (!var6)
089 {
090 byte[] var19 = new byte[4096];
091 NibbleArray var20 = new NibbleArray(var19.length, 4);
092 NibbleArray var21 = new NibbleArray(var19.length, 4);
093 NibbleArray var23 = new NibbleArray(var19.length, 4);
094
095 for (int var22 = 0; var22 < 16; ++var22)
096 {
097 for (int var12 = 0; var12 < 16; ++var12)
098 {
099 for (int var13 = 0; var13 < 16; ++var13)
100 {
101 int var14 = var22 << 11 | var13 << 7 | var12 + (var5 << 4);
102 byte var15 = par0AnvilConverterData.blocks[var14];
103 var19[var12 << 8 | var13 << 4 | var22] = (byte)(var15 & 255);
104 var20.set(var22, var12, var13, par0AnvilConverterData.data.get(var22, var12 + (var5 << 4), var13));
105 var21.set(var22, var12, var13, par0AnvilConverterData.skyLight.get(var22, var12 + (var5 << 4), var13));
106 var23.set(var22, var12, var13, par0AnvilConverterData.blockLight.get(var22, var12 + (var5 << 4), var13));
107 }
108 }
109 }
110
111 NBTTagCompound var24 = new NBTTagCompound();
112 var24.setByte("Y", (byte)(var5 & 255));
113 var24.setByteArray("Blocks", var19);
114 var24.setByteArray("Data", var20.data);
115 var24.setByteArray("SkyLight", var21.data);
116 var24.setByteArray("BlockLight", var23.data);
117 var16.appendTag(var24);
118 }
119 }
120
121 par1NBTTagCompound.setTag("Sections", var16);
122 byte[] var17 = new byte[256];
123
124 for (int var18 = 0; var18 < 16; ++var18)
125 {
126 for (var7 = 0; var7 < 16; ++var7)
127 {
128 var17[var7 << 4 | var18] = (byte)(par2WorldChunkManager.getBiomeGenAt(par0AnvilConverterData.x << 4 | var18, par0AnvilConverterData.z << 4 | var7).biomeID & 255);
129 }
130 }
131
132 par1NBTTagCompound.setByteArray("Biomes", var17);
133 par1NBTTagCompound.setTag("Entities", par0AnvilConverterData.entities);
134 par1NBTTagCompound.setTag("TileEntities", par0AnvilConverterData.tileEntities);
135
136 if (par0AnvilConverterData.tileTicks != null)
137 {
138 par1NBTTagCompound.setTag("TileTicks", par0AnvilConverterData.tileTicks);
139 }
140 }
141 }