public void SetPointLocal(int x, int y, int z, GridPoint gp, bool suppressRebuild = false) { _points[ArrayUtil.Convert3DTo1D(x, y, z, _length, _height)] = gp; if (!suppressRebuild) { MarkDataOutOfSync(false); List <Chunk> rebuildChunks = new List <Chunk>(1); rebuildChunks.Add(this); Chunk xNegative = XNegative; Chunk xPositive = XPositive; Chunk yNegative = YNegative; Chunk yPositive = YPositive; Chunk zNegative = ZNegative; Chunk zPositive = ZPositive; Chunk xNegativezNegative = _world.ChunkManager[ChunkSpaceX - 1, ChunkSpaceY, ChunkSpaceZ - 1]; Chunk xNegativeyNegative = _world.ChunkManager[ChunkSpaceX - 1, ChunkSpaceY - 1, ChunkSpaceZ]; Chunk yNegativezNegative = _world.ChunkManager[ChunkSpaceX, ChunkSpaceY - 1, ChunkSpaceZ - 1]; bool minx = false; bool miny = false; bool minz = false; if ((x == 0 || x == 1) && xNegative != null) { rebuildChunks.Add(xNegative); minx = true; } if (x == _width - 1 && xPositive != null) { rebuildChunks.Add(xPositive); } if ((y == 0 || y == 1) && yNegative != null) { rebuildChunks.Add(yNegative); miny = true; } if (y == _height - 1 && yPositive != null) { rebuildChunks.Add(yPositive); } if ((z == 0 || z == 1) && zNegative != null) { rebuildChunks.Add(zNegative); minz = true; } if (z == _length - 1 && zPositive != null) { rebuildChunks.Add(zPositive); } if (minx && minz && xNegativezNegative != null) { rebuildChunks.Add(xNegativezNegative); } if (minx && miny && xNegativeyNegative != null) { rebuildChunks.Add(xNegativeyNegative); } if (miny && minz && yNegativezNegative != null) { rebuildChunks.Add(yNegativezNegative); } _world.ChunkManager.EnqueueChunkForBuild(rebuildChunks.ToArray()); } }