diff --git a/src/packets.c b/src/packets.c index 6a5c039..19d6dcb 100644 --- a/src/packets.c +++ b/src/packets.c @@ -308,15 +308,8 @@ int sc_chunkDataAndUpdateLight (int client_fd, int _x, int _z) { writeByte(client_fd, 8); // bits per entry writeVarInt(client_fd, 256); for (int j = 0; j < 256; j ++) writeVarInt(client_fd, block_palette[j]); - for (int j = 0; j < 4096; j += 8) { - for (int k = j + 7; k >= j; k --) { - writeByte(client_fd, getBlockAt( - k % 16 + x, - k / 256 + y, - k / 16 % 16 + z - )); - } - } + buildChunkSection(x, y, z); + send(client_fd, chunk_section, 4096, 0); // biome data writeByte(client_fd, 0); // bits per entry writeByte(client_fd, W_plains); // palette diff --git a/src/worldgen.c b/src/worldgen.c index b85cb68..a484b14 100644 --- a/src/worldgen.c +++ b/src/worldgen.c @@ -141,3 +141,22 @@ skip_tree: return B_air; } + +uint8_t chunk_section[4096]; + +void buildChunkSection (int cx, int cy, int cz) { + + for (int j = 0; j < 4096; j += 8) { + + int y = j / 256 + cy; + int z = j / 16 % 16 + cz; + + for (int offset = 7; offset >= 0; offset--) { + int k = j + offset; + int x = k % 16 + cx; + chunk_section[j + 7 - offset] = getBlockAt(x, y, z); + } + + } + +} diff --git a/src/worldgen.h b/src/worldgen.h index fe0e99d..648c678 100644 --- a/src/worldgen.h +++ b/src/worldgen.h @@ -9,4 +9,7 @@ uint32_t getChunkHash (short x, short z); int getHeightAt (int rx, int rz, int _x, int _z, uint32_t chunk_hash); uint8_t getBlockAt (int x, int y, int z); +extern uint8_t chunk_section[4096]; +void buildChunkSection (int x, int y, int z); + #endif