/******************************************************************** Minecraft: Pocket Edition - Decompilation Project Copyright (C) 2023 iProgramInCpp The following code is licensed under the BSD 1 clause license. SPDX-License-Identifier: BSD-1-Clause ********************************************************************/ #include "../Packet.hpp" #include "world/level/levelgen/chunk/LevelChunk.hpp" void ChunkDataPacket::handle(const RakNet::RakNetGUID& guid, NetEventCallback* pCallback) { pCallback->handle(guid, this); } void ChunkDataPacket::write(RakNet::BitStream* bs) { bs->Write((unsigned char)PACKET_CHUNK_DATA); bs->Write(m_x); bs->Write(m_z); // Well, we first have to prepare the data. m_data.Reset(); for (int i = 0; i < 256; i++) { m_data.Write(m_pChunk->m_updateMap[i]); // if nothing was updated: if (!m_pChunk->m_updateMap[i]) continue; for (int y = 0; y < 8; y++) { if ((m_pChunk->m_updateMap[i] >> y) & 1) { int idx = ((i & 0xF) << 11) | ((i >> 4) << 7) + (y * 16); //write the tile data m_data.Write((const char*) &m_pChunk->m_pBlockData[idx], 16 * sizeof(TileID)); m_data.Write((const char*) &m_pChunk->m_tileData [idx >> 1], 8); } } } m_data.ResetReadPointer(); bs->Write(m_data); } void ChunkDataPacket::read(RakNet::BitStream* bs) { bs->Read(m_x); bs->Read(m_z); bs->Read(m_data); m_data.ResetReadPointer(); }