1
2
Fork 0
mirror of https://github.com/mat-1/azalea.git synced 2025-08-02 06:16:04 +00:00
azalea/azalea-protocol/src/packets/login/clientbound_custom_query_packet.rs
2021-12-16 23:33:06 -06:00

38 lines
1.2 KiB
Rust

use super::LoginPacket;
use crate::mc_buf::{Readable, Writable};
use azalea_core::resource_location::ResourceLocation;
use std::hash::Hash;
use tokio::io::BufReader;
#[derive(Hash, Clone, Debug)]
pub struct ClientboundCustomQueryPacket {
pub transaction_id: u32,
pub identifier: ResourceLocation,
pub data: Vec<u8>,
}
impl ClientboundCustomQueryPacket {
pub fn get(self) -> LoginPacket {
LoginPacket::ClientboundCustomQueryPacket(self)
}
pub fn write(&self, buf: &mut Vec<u8>) {
buf.write_varint(self.transaction_id as i32).unwrap();
buf.write_utf(self.identifier.to_string().as_str()).unwrap();
buf.write_bytes(&self.data).unwrap();
}
pub async fn read<T: tokio::io::AsyncRead + std::marker::Unpin + std::marker::Send>(
buf: &mut T,
) -> Result<LoginPacket, String> {
let transaction_id = buf.read_varint().await? as u32;
let identifier = ResourceLocation::new(&buf.read_utf().await?)?;
let data = buf.read_bytes(1048576).await?;
Ok(ClientboundCustomQueryPacket {
transaction_id,
identifier,
data,
}
.get())
}
}