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

49 lines
1.4 KiB
C++

#include "../../Platform/stdafx.h"
#include <iostream>
#include "../../IO/Streams/InputOutputStream.h"
#include "../../Headers/net.minecraft.world.entity.h"
#include "PacketListener.h"
#include "TextureAndGeometryChangePacket.h"
TextureAndGeometryChangePacket::TextureAndGeometryChangePacket() {
id = -1;
path = L"";
dwSkinID = 0;
}
TextureAndGeometryChangePacket::TextureAndGeometryChangePacket(
std::shared_ptr<Entity> e, const std::wstring& path) {
id = e->entityId;
this->path = path;
std::wstring skinValue = path.substr(7, path.size());
skinValue = skinValue.substr(0, skinValue.find_first_of(L'.'));
std::wstringstream ss;
ss << std::dec << skinValue.c_str();
ss >> dwSkinID;
dwSkinID = MAKE_SKIN_BITMASK(true, dwSkinID);
}
void TextureAndGeometryChangePacket::read(
DataInputStream* dis) // throws IOException
{
id = dis->readInt();
dwSkinID = static_cast<std::uint32_t>(dis->readInt());
path = dis->readUTF();
}
void TextureAndGeometryChangePacket::write(
DataOutputStream* dos) // throws IOException
{
dos->writeInt(id);
dos->writeInt(static_cast<int>(dwSkinID));
dos->writeUTF(path);
}
void TextureAndGeometryChangePacket::handle(PacketListener* listener) {
listener->handleTextureAndGeometryChange(shared_from_this());
}
int TextureAndGeometryChangePacket::getEstimatedSize() {
return 8 + (int)path.size();
}