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 { 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, }) } }