4jcraft/Minecraft.World/Network/Packets/GameCommandPacket.cpp
2026-03-13 17:06:56 -05:00

56 lines
1.5 KiB
C++

#include "../../Platform/stdafx.h"
#include "../../IO/Streams/InputOutputStream.h"
#include "PacketListener.h"
#include "../../Util/BasicTypeContainers.h"
#include "GameCommandPacket.h"
GameCommandPacket::GameCommandPacket() { length = 0; }
GameCommandPacket::GameCommandPacket(EGameCommand command, byteArray data) {
this->command = command;
this->data = data;
length = 0;
if (data.data != NULL) {
length = data.length;
if (length > Short::MAX_VALUE) {
app.DebugPrintf("Payload may not be larger than 32K\n");
#ifndef _CONTENT_PACKAGE
__debugbreak();
#endif
// throw new IllegalArgumentException("Payload may not be larger
// than 32k");
}
}
}
GameCommandPacket::~GameCommandPacket() { delete[] data.data; }
void GameCommandPacket::read(DataInputStream* dis) {
command = (EGameCommand)dis->readInt();
length = dis->readShort();
if (length > 0 && length < Short::MAX_VALUE) {
if (data.data != NULL) {
delete[] data.data;
}
data = byteArray(length);
dis->readFully(data);
}
}
void GameCommandPacket::write(DataOutputStream* dos) {
dos->writeInt(command);
dos->writeShort((short)length);
if (data.data != NULL) {
dos->write(data);
}
}
void GameCommandPacket::handle(PacketListener* listener) {
listener->handleGameCommand(shared_from_this());
}
int GameCommandPacket::getEstimatedSize() { return 2 + 2 + length; }