use basalt_derive::{Decode, Encode, EncodedSize, packet};
use basalt_types::{NbtCompound, Uuid};
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x05)]
pub struct ServerboundPlayChatCommand {
pub command: String,
}
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ServerboundPlayChatCommandSignedArgumentsignatures {
pub argument_name: String,
#[field(length = "varint")]
pub signature: Vec<u8>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x06)]
pub struct ServerboundPlayChatCommandSigned {
pub command: String,
pub timestamp: i64,
pub salt: i64,
#[field(length = "varint")]
pub argument_signatures: Vec<ServerboundPlayChatCommandSignedArgumentsignatures>,
#[field(varint)]
pub message_count: i32,
#[field(length = "varint")]
pub acknowledged: Vec<u8>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x07)]
pub struct ServerboundPlayChatMessage {
pub message: String,
pub timestamp: i64,
pub salt: i64,
#[field(optional)]
pub signature: Option<Vec<u8>>,
#[field(varint)]
pub offset: i32,
#[field(length = "varint")]
pub acknowledged: Vec<u8>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x08)]
pub struct ServerboundPlayChatSessionUpdate {
pub session_uuid: Uuid,
pub expire_time: i64,
#[field(length = "varint")]
pub public_key: Vec<u8>,
#[field(length = "varint")]
pub signature: Vec<u8>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x04)]
pub struct ServerboundPlayMessageAcknowledgement {
#[field(varint)]
pub count: i32,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x0d)]
pub struct ServerboundPlayTabComplete {
#[field(varint)]
pub transaction_id: i32,
pub text: String,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x51)]
pub struct ClientboundPlayActionBar {
pub text: NbtCompound,
}
#[derive(Debug, Clone, PartialEq, Encode, Decode, EncodedSize)]
pub enum ClientboundPlayBossBarAction {
#[variant(id = 0)]
Variant0 {
title: NbtCompound,
health: f32,
#[field(varint)]
color: i32,
#[field(varint)]
dividers: i32,
flags: u8,
},
#[variant(id = 2)]
Variant2 { health: f32 },
#[variant(id = 3)]
Variant3 { title: NbtCompound },
#[variant(id = 4)]
Variant4 {
#[field(varint)]
color: i32,
#[field(varint)]
dividers: i32,
},
#[variant(id = 5)]
Variant5 { flags: u8 },
}
impl Default for ClientboundPlayBossBarAction {
fn default() -> Self {
Self::Variant0 {
title: Default::default(),
health: Default::default(),
color: Default::default(),
dividers: Default::default(),
flags: Default::default(),
}
}
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x0a)]
pub struct ClientboundPlayBossBar {
pub entity_uuid: Uuid,
pub action: ClientboundPlayBossBarAction,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x18)]
pub struct ClientboundPlayChatSuggestions {
#[field(varint)]
pub action: i32,
#[field(length = "varint")]
pub entries: Vec<String>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x0f)]
pub struct ClientboundPlayClearTitles {
pub reset: bool,
}
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayDeclareCommandsCommandNode {
pub flags: u8,
#[field(length = "varint", element = "varint")]
pub children: Vec<i32>,
#[field(rest)]
pub remaining: Vec<u8>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x11)]
pub struct ClientboundPlayDeclareCommands {
#[field(length = "varint")]
pub nodes: Vec<ClientboundPlayDeclareCommandsCommandNode>,
#[field(varint)]
pub root_index: i32,
}
#[derive(Debug, Clone, PartialEq, Encode, Decode, EncodedSize)]
pub enum ClientboundPlayHideMessageId {
#[variant(id = 0)]
Variant0 {
#[field(length = "varint")]
signature: Vec<u8>,
},
}
impl Default for ClientboundPlayHideMessageId {
fn default() -> Self {
Self::Variant0 {
signature: Default::default(),
}
}
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x1c)]
pub struct ClientboundPlayHideMessage {
pub id: ClientboundPlayHideMessageId,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x74)]
pub struct ClientboundPlayPlayerlistHeader {
pub header: NbtCompound,
pub footer: NbtCompound,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x1e)]
pub struct ClientboundPlayProfilelessChat {
pub message: NbtCompound,
pub r#type: Vec<u8>,
pub name: NbtCompound,
#[field(optional)]
pub target: Option<NbtCompound>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x49)]
pub struct ClientboundPlayResetScore {
pub entity_name: String,
#[field(optional)]
pub objective_name: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x5c)]
pub struct ClientboundPlayScoreboardDisplayObjective {
#[field(varint)]
pub position: i32,
pub name: String,
}
#[derive(Debug, Clone, PartialEq, Encode, Decode, EncodedSize)]
pub enum ClientboundPlayScoreboardObjectiveAction {
#[variant(id = 0)]
Variant0 {
display_text: NbtCompound,
#[field(varint)]
r#type: i32,
#[field(optional)]
number_format: Option<Vec<u8>>,
styling: Vec<u8>,
},
#[variant(id = 2)]
Variant2 {
display_text: NbtCompound,
#[field(varint)]
r#type: i32,
#[field(optional)]
number_format: Option<Vec<u8>>,
styling: Vec<u8>,
},
}
impl Default for ClientboundPlayScoreboardObjectiveAction {
fn default() -> Self {
Self::Variant0 {
display_text: Default::default(),
r#type: Default::default(),
number_format: Default::default(),
styling: Default::default(),
}
}
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x64)]
pub struct ClientboundPlayScoreboardObjective {
pub name: String,
pub action: ClientboundPlayScoreboardObjectiveAction,
}
#[derive(Debug, Clone, PartialEq, Encode, Decode, EncodedSize)]
pub enum ClientboundPlayScoreboardScoreNumberFormat {
#[variant(id = 1)]
Variant1 { styling: NbtCompound },
#[variant(id = 2)]
Variant2 { styling: NbtCompound },
}
impl Default for ClientboundPlayScoreboardScoreNumberFormat {
fn default() -> Self {
Self::Variant1 {
styling: Default::default(),
}
}
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x68)]
pub struct ClientboundPlayScoreboardScore {
pub item_name: String,
pub score_name: String,
#[field(varint)]
pub value: i32,
#[field(optional)]
pub display_name: Option<NbtCompound>,
pub number_format: ClientboundPlayScoreboardScoreNumberFormat,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x6a)]
pub struct ClientboundPlaySetTitleSubtitle {
pub text: NbtCompound,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x6c)]
pub struct ClientboundPlaySetTitleText {
pub text: NbtCompound,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x6d)]
pub struct ClientboundPlaySetTitleTime {
pub fade_in: i32,
pub stay: i32,
pub fade_out: i32,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x73)]
pub struct ClientboundPlaySystemChat {
pub content: NbtCompound,
pub is_action_bar: bool,
}
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayTabCompleteMatches {
pub r#match: String,
#[field(optional)]
pub tooltip: Option<NbtCompound>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x10)]
pub struct ClientboundPlayTabComplete {
#[field(varint)]
pub transaction_id: i32,
#[field(varint)]
pub start: i32,
#[field(varint)]
pub length: i32,
#[field(length = "varint")]
pub matches: Vec<ClientboundPlayTabCompleteMatches>,
}
#[derive(Debug, Clone, PartialEq, Encode, Decode, EncodedSize)]
pub enum ClientboundPlayTeamsMode {
#[variant(id = 0)]
Variant0 {
name: NbtCompound,
friendly_fire: i8,
name_tag_visibility: String,
collision_rule: String,
#[field(varint)]
formatting: i32,
prefix: NbtCompound,
suffix: NbtCompound,
#[field(length = "varint")]
players: Vec<String>,
},
#[variant(id = 2)]
Variant2 {
name: NbtCompound,
friendly_fire: i8,
name_tag_visibility: String,
collision_rule: String,
#[field(varint)]
formatting: i32,
prefix: NbtCompound,
suffix: NbtCompound,
},
#[variant(id = 3)]
Variant3 {
#[field(length = "varint")]
players: Vec<String>,
},
#[variant(id = 4)]
Variant4 {
#[field(length = "varint")]
players: Vec<String>,
},
}
impl Default for ClientboundPlayTeamsMode {
fn default() -> Self {
Self::Variant0 {
name: Default::default(),
friendly_fire: Default::default(),
name_tag_visibility: Default::default(),
collision_rule: Default::default(),
formatting: Default::default(),
prefix: Default::default(),
suffix: Default::default(),
players: Default::default(),
}
}
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x67)]
pub struct ClientboundPlayTeams {
pub team: String,
pub mode: ClientboundPlayTeamsMode,
}