#include "minecraft/util/Log.h" #include "RespawnPacket.h" #include #include "app/linux/LinuxGame.h" #include "PacketListener.h" #include "java/InputOutputStream/DataInputStream.h" #include "java/InputOutputStream/DataOutputStream.h" #include "minecraft/world/level/LevelSettings.h" #include "minecraft/world/level/LevelType.h" #include "minecraft/world/level/chunk/ChunkSource.h" RespawnPacket::RespawnPacket() { this->dimension = 0; this->difficulty = 1; this->mapSeed = 0; this->mapHeight = 0; this->playerGameType = nullptr; this->m_newSeaLevel = false; m_pLevelType = nullptr; m_newEntityId = 0; m_xzSize = LEVEL_MAX_WIDTH; m_hellScale = HELL_LEVEL_MAX_SCALE; } RespawnPacket::RespawnPacket(char dimension, int64_t mapSeed, int mapHeight, GameType* playerGameType, char difficulty, LevelType* pLevelType, bool newSeaLevel, int newEntityId, int xzSize, int hellScale) { this->dimension = dimension; this->mapSeed = mapSeed; this->mapHeight = mapHeight; this->playerGameType = playerGameType; this->difficulty = difficulty; this->m_newSeaLevel = newSeaLevel; this->m_pLevelType = pLevelType; this->m_newEntityId = newEntityId; m_xzSize = xzSize; m_hellScale = hellScale; Log::info("RespawnPacket - Difficulty = %d\n", difficulty); } void RespawnPacket::handle(PacketListener* listener) { listener->handleRespawn(shared_from_this()); } void RespawnPacket::read(DataInputStream* dis) // throws IOException { dimension = dis->readByte(); playerGameType = GameType::byId(dis->readByte()); mapHeight = dis->readShort(); std::string typeName = readUtf(dis, 16); m_pLevelType = LevelType::getLevelType(typeName); if (m_pLevelType == nullptr) { m_pLevelType = LevelType::lvl_normal; } mapSeed = dis->readLong(); difficulty = dis->readByte(); m_newSeaLevel = dis->readBoolean(); m_newEntityId = dis->readShort(); #ifdef _LARGE_WORLDS m_xzSize = dis->readShort(); m_hellScale = dis->read(); #endif Log::info("RespawnPacket::read - Difficulty = %d\n", difficulty); } void RespawnPacket::write(DataOutputStream* dos) // throws IOException { dos->writeByte(dimension); dos->writeByte(playerGameType->getId()); dos->writeShort(mapHeight); if (m_pLevelType == nullptr) { writeUtf("", dos); } else { writeUtf(m_pLevelType->getGeneratorName(), dos); } dos->writeLong(mapSeed); dos->writeByte(difficulty); dos->writeBoolean(m_newSeaLevel); dos->writeShort(m_newEntityId); #ifdef _LARGE_WORLDS dos->writeShort(m_xzSize); dos->write(m_hellScale); #endif } int RespawnPacket::getEstimatedSize() { int length = 0; if (m_pLevelType != nullptr) { length = (int)m_pLevelType->getGeneratorName().length(); } return 13 + length; }