diff options
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/Network.cpp | 6 | ||||
-rw-r--r-- | src/network/Packet.hpp | 54 | ||||
-rw-r--r-- | src/network/Stream.cpp | 41 |
3 files changed, 75 insertions, 26 deletions
diff --git a/src/network/Network.cpp b/src/network/Network.cpp index 59c4e00..68df158 100644 --- a/src/network/Network.cpp +++ b/src/network/Network.cpp @@ -210,6 +210,12 @@ std::shared_ptr<Packet> Network::ParsePacketPlay(PacketNamePlayCB id) { break; case EntityEffect: break; + case UnlockRecipes: + break; + case SelectAdvancementTab: + break; + case Advancements: + break; } return nullptr; } diff --git a/src/network/Packet.hpp b/src/network/Packet.hpp index 9249a34..3cf4d26 100644 --- a/src/network/Packet.hpp +++ b/src/network/Packet.hpp @@ -237,7 +237,7 @@ struct PacketJoinGame : Packet { struct PacketDisconnectPlay : Packet { void ToStream(StreamOutput *stream) override { - + stream->WriteString(Reason); //TODO: Implement chat-wrapper } void FromStream(StreamInput *stream) override { @@ -253,7 +253,7 @@ struct PacketDisconnectPlay : Packet { struct PacketSpawnPosition : Packet { void ToStream(StreamOutput *stream) override { - + stream->WritePosition(Location); } void FromStream(StreamInput *stream) override { @@ -303,7 +303,13 @@ struct PacketKeepAliveSB : Packet { struct PacketPlayerPositionAndLookCB : Packet { void ToStream(StreamOutput *stream) override { - + stream->WriteDouble(X); + stream->WriteDouble(Y); + stream->WriteDouble(Z); + stream->WriteFloat(Yaw); + stream->WriteFloat(Pitch); + stream->WriteUByte(Flags); + stream->WriteVarInt(TeleportId); } void FromStream(StreamInput *stream) override { @@ -376,7 +382,12 @@ struct PacketPlayerPositionAndLookSB : Packet { } void FromStream(StreamInput *stream) override { - + X = stream->ReadDouble(); + FeetY = stream->ReadDouble(); + Z = stream->ReadDouble(); + Yaw = stream->ReadFloat(); + Pitch = stream->ReadFloat(); + OnGround = stream->ReadBool(); } int GetPacketId() override { @@ -398,7 +409,14 @@ struct PacketPlayerPositionAndLookSB : Packet { struct PacketChunkData : Packet { void ToStream(StreamOutput *stream) override { - + stream->WriteInt(ChunkX); + stream->WriteInt(ChunkZ); + stream->WriteBool(GroundUpContinuous); + stream->WriteInt(PrimaryBitMask); + stream->WriteVarInt(Data.size()); + stream->WriteByteArray(Data); + stream->WriteVarInt(BlockEntities.size()); + LOG(FATAL) << "Serializing unimplemented packet"; } void FromStream(StreamInput *stream) override { @@ -406,9 +424,12 @@ struct PacketChunkData : Packet { ChunkZ = stream->ReadInt(); GroundUpContinuous = stream->ReadBool(); PrimaryBitMask = stream->ReadVarInt(); - Size = stream->ReadVarInt(); + int Size = stream->ReadVarInt(); Data = stream->ReadByteArray(Size); - NumberOfBlockEntities = stream->ReadVarInt(); + int NumberOfBlockEntities = stream->ReadVarInt(); //TODO: Need NBT + for (int i = 0; i < NumberOfBlockEntities; i++) { + //BlockEntities[i] = stream->ReadNbt(); + } } int GetPacketId() override { @@ -419,10 +440,10 @@ struct PacketChunkData : Packet { int ChunkZ; bool GroundUpContinuous; int PrimaryBitMask; - int Size; + //int Size; std::vector<unsigned char> Data; - int NumberOfBlockEntities; - //std::vector<NbtTag> BlockEntities; + //int NumberOfBlockEntities; + std::vector<int> BlockEntities; //TODO: Replace int with NbtTag and implement NbtTree }; struct PacketPlayerPosition : Packet { @@ -434,7 +455,10 @@ struct PacketPlayerPosition : Packet { } void FromStream(StreamInput *stream) override { - + X = stream->ReadDouble(); + FeetY = stream->ReadDouble(); + Z = stream->ReadDouble(); + OnGround = stream->ReadBool(); } int GetPacketId() override { @@ -457,7 +481,9 @@ struct PacketPlayerLook : Packet { } void FromStream(StreamInput *stream) override { - + Yaw = stream->ReadFloat(); + Pitch = stream->ReadFloat(); + OnGround = stream->ReadBool(); } int GetPacketId() override { @@ -473,7 +499,9 @@ struct PacketPlayerLook : Packet { struct PacketUpdateHealth : Packet { void ToStream(StreamOutput *stream) override { - + stream->WriteFloat(Health); + stream->WriteVarInt(Food); + stream->WriteFloat(FoodSaturation); } void FromStream(StreamInput *stream) override { diff --git a/src/network/Stream.cpp b/src/network/Stream.cpp index a0c6cb0..d492428 100644 --- a/src/network/Stream.cpp +++ b/src/network/Stream.cpp @@ -174,16 +174,18 @@ void StreamOutput::WriteBool(bool value) { } void StreamOutput::WriteByte(signed char value) { - + endswap(value); + WriteData((unsigned char *) &value, 1); } void StreamOutput::WriteUByte(unsigned char value) { endswap(value); - WriteData(&value,1); + WriteData(&value, 1); } void StreamOutput::WriteShort(short value) { - + endswap(value); + WriteData((unsigned char *) &value, 2); } void StreamOutput::WriteUShort(unsigned short value) { @@ -197,7 +199,8 @@ void StreamOutput::WriteInt(int value) { } void StreamOutput::WriteLong(long long value) { - + endswap(value); + WriteData((unsigned char *) &value, 8); } void StreamOutput::WriteFloat(float value) { @@ -216,7 +219,7 @@ void StreamOutput::WriteString(std::string value) { } void StreamOutput::WriteChat(std::string value) { - + WriteString(value); } void StreamOutput::WriteVarInt(int value) { @@ -235,35 +238,46 @@ void StreamOutput::WriteVarInt(int value) { } void StreamOutput::WriteVarLong(long long value) { - + unsigned char buff[10]; + size_t len = 0; + do { + unsigned char temp = (unsigned char) (value & 0b01111111); + value >>= 7; + if (value != 0) { + temp |= 0b10000000; + } + buff[len] = temp; + len++; + } while (value != 0); + WriteData(buff, len); } void StreamOutput::WriteEntityMetadata(std::vector<unsigned char> value) { - + LOG(FATAL) << "Used unimplemented WriteEntityMetadata: " << value.size(); } void StreamOutput::WriteSlot(std::vector<unsigned char> value) { - + LOG(FATAL) << "Used unimplemented WriteSlot " << value.size(); } void StreamOutput::WriteNbtTag(std::vector<unsigned char> value) { - + LOG(FATAL) << "Used unimplemented WriteNbtTag " << value.size(); } void StreamOutput::WritePosition(Vector value) { - + LOG(FATAL) << "Used unimplemented Position: " << value.GetX() << ", " << value.GetY() << " " << value.GetZ(); } void StreamOutput::WriteAngle(unsigned char value) { - + WriteUByte(value); } void StreamOutput::WriteUuid(std::vector<unsigned char> value) { - + WriteByteArray(value); } void StreamOutput::WriteByteArray(std::vector<unsigned char> value) { - + WriteData(value.data(), value.size()); } void StreamBuffer::ReadData(unsigned char *buffPtr, size_t buffLen) { @@ -306,6 +320,7 @@ std::vector<unsigned char> StreamBuffer::GetBuffer() { } void StreamCounter::WriteData(unsigned char *buffPtr, size_t buffLen) { + buffPtr++; size += buffLen; } |