58 lines
1.6 KiB
Rust
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,
|
|
})
|
|
}
|
|
}
|