diff -r 6daed187642a minecraft/net/minecraft/src/Chunk.java --- a/minecraft/net/minecraft/src/Chunk.java Sat Oct 01 20:56:53 2011 +0200 +++ b/minecraft/net/minecraft/src/Chunk.java Sat Oct 01 21:00:11 2011 +0200 @@ -39,10 +39,25 @@ Arrays.fill(field_35845_c, -999); } - + + public void ReUseChunk(World world, int i, int j) + { + isTerrainPopulated = false; + isModified = false; + hasEntities = false; + lastSaveTime = 0L; + worldObj = world; + xPosition = i; + zPosition = j; + } + public Chunk(World world, byte abyte0[], int i, int j) { this(world, i, j); + if (abyte0 == null) + { + abyte0 = new byte[32768]; + } blocks = abyte0; world.getClass(); data = new NibbleArray(abyte0.length, 7); @@ -51,7 +66,28 @@ world.getClass(); blocklightMap = new NibbleArray(abyte0.length, 7); } - + + public void ReUseChunk(World world, byte abyte0[], int i, int j) + { + ReUseChunk(world, i, j); + if (abyte0 == null) + { + abyte0 = new byte[32768]; + } + + if (blocks==null) + { + blocks = abyte0; + data = new NibbleArray(abyte0.length, 7); + skylightMap = new NibbleArray(abyte0.length, 7); + blocklightMap = new NibbleArray(abyte0.length, 7); + } + else + { + blocks = abyte0; + } + } + public boolean isAtLocation(int i, int j) { return i == xPosition && j == zPosition; @@ -686,6 +722,8 @@ { worldObj.unloadEntities(entities[i]); } + + FreeChunkList.instance.Chunklist.push(this); } @@ -916,8 +954,8 @@ public NibbleArray blocklightMap; public byte heightMap[]; public int lowestBlockHeight; - public final int xPosition; - public final int zPosition; + public int xPosition; + public int zPosition; public Map chunkTileEntityMap; public List entities[]; public boolean isTerrainPopulated; diff -r 6daed187642a minecraft/net/minecraft/src/ChunkProviderClient.java --- a/minecraft/net/minecraft/src/ChunkProviderClient.java Sat Oct 01 20:56:53 2011 +0200 +++ b/minecraft/net/minecraft/src/ChunkProviderClient.java Sat Oct 01 21:00:11 2011 +0200 @@ -48,8 +48,7 @@ public Chunk loadChunk(int i, int j) { worldObj.getClass(); - byte abyte0[] = new byte[256 * 128]; - Chunk chunk = new Chunk(worldObj, abyte0, i, j); + Chunk chunk = FreeChunkList.instance.GetFreeChunk(worldObj, null, i, j); Arrays.fill(chunk.skylightMap.data, (byte)-1); chunkMapping.func_35577_a(ChunkCoordIntPair.chunkXZ2Int(i, j), chunk); chunk.isChunkLoaded = true; @@ -89,7 +88,7 @@ public String makeString() { - return (new StringBuilder()).append("MultiplayerChunkCache: ").append(chunkMapping.func_35576_a()).toString(); + return (new StringBuilder()).append("MultiplayerChunkCache: ").append(chunkMapping.func_35576_a()).append(" Drop: ").append(FreeChunkList.instance.Chunklist.size()).toString(); } private Chunk blankChunk;