diff options
Diffstat (limited to 'Minecraft.World/RespawnPacket.cpp')
| -rw-r--r-- | Minecraft.World/RespawnPacket.cpp | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/Minecraft.World/RespawnPacket.cpp b/Minecraft.World/RespawnPacket.cpp new file mode 100644 index 00000000..5c04bbeb --- /dev/null +++ b/Minecraft.World/RespawnPacket.cpp @@ -0,0 +1,97 @@ +#include "stdafx.h" +#include <iostream> +#include "InputOutputStream.h" +#include "PacketListener.h" +#include "RespawnPacket.h" +#include "LevelType.h" + +RespawnPacket::RespawnPacket() +{ + this->dimension = 0; + this->difficulty = 1; + this->mapSeed = 0; + this->mapHeight = 0; + this->playerGameType = NULL; + this->m_newSeaLevel = false; + m_pLevelType = NULL; + m_newEntityId = 0; + m_xzSize = LEVEL_MAX_WIDTH; + m_hellScale = HELL_LEVEL_MAX_SCALE; +} + +RespawnPacket::RespawnPacket(char dimension, __int64 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; + app.DebugPrintf("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(); + wstring typeName = readUtf(dis, 16); + m_pLevelType = LevelType::getLevelType(typeName); + if (m_pLevelType == NULL) + { + 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 + app.DebugPrintf("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 == NULL) + { + writeUtf(L"", 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 != NULL) + { + length = (int)m_pLevelType->getGeneratorName().length(); + } + return 13+length; +} |
