Pumpkin/pumpkin-protocol/src/java/server/play/client_information.rs
2026-07-25 16:48:20 +02:00

58 lines
1.6 KiB
Rust

use crate::{
ServerPacket,
ser::{NetworkReadExt, NetworkReadSliceExt, ReadingError},
};
use pumpkin_data::packet::serverbound::PLAY_CLIENT_INFORMATION;
use pumpkin_macros::java_packet;
use pumpkin_util::version::JavaMinecraftVersion;
use crate::VarInt;
#[java_packet(PLAY_CLIENT_INFORMATION)]
pub struct SClientInformationPlay<'a> {
pub locale: &'a str, // 16
pub view_distance: i8,
pub chat_mode: VarInt, // VarInt
pub chat_colors: bool,
pub skin_parts: u8,
pub main_hand: VarInt,
pub text_filtering: bool,
pub server_listing: bool,
}
impl<'a> ServerPacket<'a> for SClientInformationPlay<'a> {
fn read(bytebuf: &mut &'a [u8], version: &JavaMinecraftVersion) -> Result<Self, ReadingError> {
let locale = bytebuf.get_str_borrowed()?;
let view_distance = bytebuf.get_i8()?;
let chat_mode = bytebuf.get_var_int()?;
let chat_colors = bytebuf.get_bool()?;
let skin_parts = bytebuf.get_u8()?;
let main_hand = if version >= &JavaMinecraftVersion::V_1_9 {
bytebuf.get_var_int()?
} else {
VarInt(1)
};
let text_filtering = if version >= &JavaMinecraftVersion::V_1_17 {
bytebuf.get_bool()?
} else {
false
};
let server_listing = if version >= &JavaMinecraftVersion::V_1_18 {
bytebuf.get_bool()?
} else {
true
};
Ok(Self {
locale,
view_distance,
chat_mode,
chat_colors,
skin_parts,
main_hand,
text_filtering,
server_listing,
})
}
}