Files
MinecraftConsoles/Minecraft.World/ExplodePacket.cpp
Loki Rautio 087b7e7abf Revert "Project modernization (#630)"
This code was not tested and breaks in Release builds, reverting to restore
functionality of the nightly. All in-game menus do not work and generating
a world crashes.

This reverts commit a9be52c41a.
2026-03-07 21:12:22 -06:00

127 lines
2.4 KiB
C++

#include "stdafx.h"
#include <iostream>
#include "InputOutputStream.h"
#include "net.minecraft.world.level.h"
#include "PacketListener.h"
#include "ExplodePacket.h"
ExplodePacket::ExplodePacket()
{
x = 0;
y = 0;
z = 0;
r = 0.0f;
m_bKnockbackOnly = false;
knockbackX = 0.0f;
knockbackY = 0.0f;
knockbackZ = 0.0f;
}
ExplodePacket::ExplodePacket(double x, double y, double z, float r, unordered_set<TilePos, TilePosKeyHash, TilePosKeyEq> *toBlow, Vec3 *knockback, bool knockBackOnly)
{
this->x = x;
this->y = y;
this->z = z;
this->r = r;
m_bKnockbackOnly = knockBackOnly;
if(toBlow != nullptr)
{
this->toBlow.assign(toBlow->begin(),toBlow->end());
}
if (knockback != nullptr)
{
knockbackX = (float) knockback->x;
knockbackY = (float) knockback->y;
knockbackZ = (float) knockback->z;
}
}
void ExplodePacket::read(DataInputStream *dis) //throws IOException
{
m_bKnockbackOnly = dis->readBoolean();
if(!m_bKnockbackOnly)
{
x = dis->readDouble();
y = dis->readDouble();
z = dis->readDouble();
r = dis->readFloat();
int count = dis->readInt();
int xp = (int)x;
int yp = (int)y;
int zp = (int)z;
for (int i=0; i<count; i++)
{
int xx = ((signed char)dis->readByte())+xp;
int yy = ((signed char)dis->readByte())+yp;
int zz = ((signed char)dis->readByte())+zp;
toBlow.push_back( TilePos(xx, yy, zz) );
}
}
knockbackX = dis->readFloat();
knockbackY = dis->readFloat();
knockbackZ = dis->readFloat();
}
void ExplodePacket::write(DataOutputStream *dos) //throws IOException
{
dos->writeBoolean(m_bKnockbackOnly);
if(!m_bKnockbackOnly)
{
dos->writeDouble(x);
dos->writeDouble(y);
dos->writeDouble(z);
dos->writeFloat(r);
dos->writeInt((int)toBlow.size());
int xp = (int)x;
int yp = (int)y;
int zp = (int)z;
for ( const TilePos& tp : toBlow )
{
int xx = tp.x-xp;
int yy = tp.y-yp;
int zz = tp.z-zp;
dos->writeByte(xx);
dos->writeByte(yy);
dos->writeByte(zz);
}
}
dos->writeFloat(knockbackX);
dos->writeFloat(knockbackY);
dos->writeFloat(knockbackZ);
}
void ExplodePacket::handle(PacketListener *listener)
{
listener->handleExplosion(shared_from_this());
}
int ExplodePacket::getEstimatedSize()
{
return 8*3+4+4+(int)toBlow.size()*3+12;
}
float ExplodePacket::getKnockbackX()
{
return knockbackX;
}
float ExplodePacket::getKnockbackY()
{
return knockbackY;
}
float ExplodePacket::getKnockbackZ()
{
return knockbackZ;
}