@Override public Chunk provideChunk( int x, int z ) { long lx = ( long ) x; long lz = ( long ) z; short[] id = new short[ 16 * 256 * 16 ]; byte[] meta = new byte[ 16 * 256 * 16 ]; generateBase( id, meta ); addCaves( x, z, id, meta ); Chunk chunk = makeChunk( x, z, id, meta ); chunk.generateSkylightMap(); return chunk; } private Chunk makeChunk( int x, int z, short[] id, byte[] meta ) { Chunk chunk = new Chunk( world, x, z ); ExtendedBlockStorage[] storage = chunk.getBlockStorageArray(); int height = id.length / ( 16 * 16 ); for ( int ix = 0; ix < 16; ++ix ) { for ( int iz = 0; iz < 16; ++iz ) { for ( int iy = 0; iy < height; ++iy ) { int index = 0; index |= ix << 12; index |= iz << 8; index |= iy; int storageIndex = iy >> 4; if( storage[ storageIndex ] == null ) { storage[ storageIndex ] = new ExtendedBlockStorage( storageIndex << 4, false ); } storage[ storageIndex ].setExtBlockID( ix, iy & 0xf, iz, id[ index ] ); storage[ storageIndex ].setExtBlockMetadata( ix, iy & 0xf, iz, meta[ index ] ); } } } return chunk; }