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