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

75 lines
2.1 KiB
C++

#include "../../Platform/stdafx.h"
#include "../../Util/BasicTypeContainers.h"
#include "../../IO/Streams/InputOutputStream.h"
#include "../../Headers/net.minecraft.network.packet.h"
#include "LevelSoundPacket.h"
const float LevelSoundPacket::PITCH_ACCURACY = Byte::MAX_VALUE / 2.0f;
const float LevelSoundPacket::LOCATION_ACCURACY = 8.0f;
LevelSoundPacket::LevelSoundPacket() {
sound = 0;
x = 0;
y = Integer::MAX_VALUE;
z = 0;
volume = 0.0f;
pitch = 0;
}
LevelSoundPacket::LevelSoundPacket(int sound, double x, double y, double z,
float volume, float pitch) {
this->sound = sound;
this->x = (int)(x * LOCATION_ACCURACY);
this->y = (int)(y * LOCATION_ACCURACY);
this->z = (int)(z * LOCATION_ACCURACY);
this->volume = volume;
// 4J-PB - Let's make the pitch a float so it doesn't get mangled and make
// the noteblock people unhappy
// this->pitch = (int) (pitch * PITCH_ACCURACY);
this->pitch = pitch;
// if (this->pitch < 0) this->pitch = 0;
// if (this->pitch > 255) this->pitch = 255;
}
void LevelSoundPacket::read(DataInputStream* dis) {
sound = dis->readInt();
x = dis->readInt();
y = dis->readInt();
z = dis->readInt();
volume = dis->readFloat();
// pitch = dis->readUnsignedByte();
pitch = dis->readFloat();
}
void LevelSoundPacket::write(DataOutputStream* dos) {
dos->writeInt(sound);
dos->writeInt(x);
dos->writeInt(y);
dos->writeInt(z);
dos->writeFloat(volume);
// dos->writeByte(pitch);
dos->writeFloat(pitch);
}
int LevelSoundPacket::getSound() { return sound; }
double LevelSoundPacket::getX() { return x / LOCATION_ACCURACY; }
double LevelSoundPacket::getY() { return y / LOCATION_ACCURACY; }
double LevelSoundPacket::getZ() { return z / LOCATION_ACCURACY; }
float LevelSoundPacket::getVolume() { return volume; }
float LevelSoundPacket::getPitch() {
// return pitch / PITCH_ACCURACY;
return pitch;
}
void LevelSoundPacket::handle(PacketListener* listener) {
listener->handleSoundEvent(shared_from_this());
}
int LevelSoundPacket::getEstimatedSize() { return 4 * 6; }