Cuberite
A lightweight, fast and extensible game server for Minecraft
Packetizer.cpp
Go to the documentation of this file.
1 
2 // Packetizer.cpp
3 
4 // Implements the cPacketizer class representing a wrapper for sending a single packet over a protocol.
5 
6 #include "Globals.h"
7 #include "Packetizer.h"
8 #include "../UUID.h"
9 
10 
11 
12 
13 
15 // cPacketizer:
16 
18 {
19  m_Protocol.SendPacket(*this);
20 }
21 
22 
23 
24 
25 
26 void cPacketizer::WriteByteAngle(double a_Angle)
27 {
28  WriteBEInt8(static_cast<Int8>(255 * a_Angle / 360));
29 }
30 
31 
32 
33 
34 
35 void cPacketizer::WriteFPInt(double a_Value)
36 {
37  WriteBEInt32(static_cast<Int32>(a_Value * 32));
38 }
39 
40 
41 
42 
43 
44 void cPacketizer::WriteUUID(const cUUID & a_UUID)
45 {
46  for (auto val : a_UUID.ToRaw())
47  {
49  }
50 }
51 
52 
53 
54 
55 
57 {
58  switch (a_PacketType)
59  {
60  case cProtocol::pktAttachEntity: return "pktAttachEntity";
61  case cProtocol::pktBlockAction: return "pktBlockAction";
62  case cProtocol::pktBlockBreakAnim: return "pktBlockBreakAnim";
63  case cProtocol::pktBlockChange: return "pktBlockChange";
64  case cProtocol::pktBlockChanges: return "pktBlockChanges";
65  case cProtocol::pktCameraSetTo: return "pktCameraSetTo";
66  case cProtocol::pktChatRaw: return "pktChatRaw";
67  case cProtocol::pktCollectEntity: return "pktCollectEntity";
68  case cProtocol::pktDestroyEntity: return "pktDestroyEntity";
69  case cProtocol::pktDifficulty: return "pktDifficulty";
70  case cProtocol::pktDisconnectDuringLogin: return "pktDisconnectDuringLogin";
71  case cProtocol::pktDisconnectDuringGame: return "pktDisconnectDuringGame";
72  case cProtocol::pktDisplayObjective: return "pktDisplayObjective";
73  case cProtocol::pktEditSign: return "pktEditSign";
74  case cProtocol::pktEncryptionRequest: return "pktEncryptionRequest";
75  case cProtocol::pktEntityAnimation: return "pktEntityAnimation";
76  case cProtocol::pktEntityEffect: return "pktEntityEffect";
77  case cProtocol::pktEntityEquipment: return "pktEntityEquipment";
78  case cProtocol::pktEntityHeadLook: return "pktEntityHeadLook";
79  case cProtocol::pktEntityLook: return "pktEntityLook";
80  case cProtocol::pktEntityMeta: return "pktEntityMeta";
81  case cProtocol::pktEntityProperties: return "pktEntityProperties";
82  case cProtocol::pktEntityRelMove: return "pktEntityRelMove";
83  case cProtocol::pktEntityRelMoveLook: return "pktEntityRelMoveLook";
84  case cProtocol::pktEntityStatus: return "pktEntityStatus";
85  case cProtocol::pktEntityVelocity: return "pktEntityVelocity";
86  case cProtocol::pktExperience: return "pktExperience";
87  case cProtocol::pktExplosion: return "pktExplosion";
88  case cProtocol::pktGameMode: return "pktGameMode";
89  case cProtocol::pktHeldItemChange: return "pktHeldItemChange";
90  case cProtocol::pktInventorySlot: return "pktInventorySlot";
91  case cProtocol::pktJoinGame: return "pktJoinGame";
92  case cProtocol::pktKeepAlive: return "pktKeepAlive";
93  case cProtocol::pktLeashEntity: return "pktLeashEntity";
94  case cProtocol::pktLoginSuccess: return "pktLoginSuccess";
95  case cProtocol::pktMapData: return "pktMapData";
96  case cProtocol::pktParticleEffect: return "pktParticleEffect";
97  case cProtocol::pktPingResponse: return "pktPingResponse";
98  case cProtocol::pktPlayerAbilities: return "pktPlayerAbilities";
99  case cProtocol::pktPlayerList: return "pktPlayerList";
100  case cProtocol::pktPlayerMaxSpeed: return "pktPlayerMaxSpeed";
101  case cProtocol::pktPlayerMoveLook: return "pktPlayerMoveLook";
102  case cProtocol::pktPluginMessage: return "pktPluginMessage";
103  case cProtocol::pktRemoveEntityEffect: return "pktRemoveEntityEffect";
104  case cProtocol::pktRespawn: return "pktRespawn";
105  case cProtocol::pktScoreboardObjective: return "pktScoreboardObjective";
106  case cProtocol::pktSpawnObject: return "pktSpawnObject";
107  case cProtocol::pktSoundEffect: return "pktSoundEffect";
108  case cProtocol::pktSoundParticleEffect: return "pktSoundParticleEffect";
109  case cProtocol::pktSpawnExperienceOrb: return "pktSpawnExperienceOrb";
110  case cProtocol::pktSpawnGlobalEntity: return "pktSpawnGlobalEntity";
111  case cProtocol::pktSpawnMob: return "pktSpawnMob";
112  case cProtocol::pktSpawnOtherPlayer: return "pktSpawnOtherPlayer";
113  case cProtocol::pktSpawnPainting: return "pktSpawnPainting";
114  case cProtocol::pktSpawnPosition: return "pktSpawnPosition";
115  case cProtocol::pktStartCompression: return "pktStartCompression";
116  case cProtocol::pktStatistics: return "pktStatistics";
117  case cProtocol::pktStatusResponse: return "pktStatusResponse";
118  case cProtocol::pktTabCompletionResults: return "pktTabCompletionResults";
119  case cProtocol::pktTeleportEntity: return "pktTeleportEntity";
120  case cProtocol::pktTimeUpdate: return "pktTimeUpdate";
121  case cProtocol::pktTitle: return "pktTitle";
122  case cProtocol::pktUnloadChunk: return "pktUnloadChunk";
123  case cProtocol::pktUpdateBlockEntity: return "pktUpdateBlockEntity";
124  case cProtocol::pktUpdateHealth: return "pktUpdateHealth";
125  case cProtocol::pktUpdateScore: return "pktUpdateScore";
126  case cProtocol::pktUpdateSign: return "pktUpdateSign";
127  case cProtocol::pktUseBed: return "pktUseBed";
128  case cProtocol::pktWeather: return "pktWeather";
129  case cProtocol::pktWindowItems: return "pktWindowItems";
130  case cProtocol::pktWindowClose: return "pktWindowClose";
131  case cProtocol::pktWindowOpen: return "pktWindowOpen";
132  case cProtocol::pktWindowProperty: return "pktWindowProperty";
133  }
134  return Printf("Unknown packet type: 0x%02x", a_PacketType);
135 }
136 
137 
138 
139 
void WriteBEInt8(Int8 a_Value)
Definition: Packetizer.h:56
void WriteFPInt(double a_Value)
Writes the double value as a 27:5 fixed-point integer.
Definition: Packetizer.cpp:35
#define VERIFY(x)
Definition: Globals.h:339
void WriteUUID(const cUUID &a_UUID)
Writes the specified UUID as a 128-bit BigEndian integer.
Definition: Packetizer.cpp:44
static AString PacketTypeToStr(cProtocol::ePacketType a_PacketType)
Returns the human-readable representation of the packet type.
Definition: Packetizer.cpp:56
cProtocol & m_Protocol
The protocol instance in which the packet is being constructed.
Definition: Packetizer.h:151
void WriteBEInt32(Int32 a_Value)
Definition: Packetizer.h:74
~cPacketizer()
Sends the packet via the contained protocol&#39;s SendPacket() function.
Definition: Packetizer.cpp:17
Definition: UUID.h:10
cByteBuffer & m_Out
The protocol&#39;s buffer for the constructed packet data.
Definition: Packetizer.h:154
void WriteByteAngle(double a_Angle)
Writes the specified angle using a single byte.
Definition: Packetizer.cpp:26
AString & Printf(AString &str, const char *format, fmt::ArgList args)
Output the formatted text into the string.
Definition: StringUtils.cpp:55
bool WriteBEUInt8(UInt8 a_Value)
Definition: ByteBuffer.cpp:530
std::string AString
Definition: StringUtils.h:13
virtual void SendPacket(cPacketizer &a_Packet)=0
Sends a single packet contained within the cPacketizer class.
ePacketType
Logical types of outgoing packets.
Definition: Protocol.h:68
std::array< Byte, 16 > ToRaw() const
Converts UUID to raw memory representation, respecting UUID variant.
Definition: UUID.cpp:214