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 }