use basalt_derive::{Decode, Encode, EncodedSize, packet};
use basalt_types::{NbtCompound, Position, Uuid, Vec2f};
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub enum ServerboundPlayAdvancementTabAction {
#[variant(id = 0)]
Variant0 { tab_id: String },
#[variant(id = 1)]
#[default]
Variant1,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x30)]
pub struct ServerboundPlayAdvancementTab {
pub action: ServerboundPlayAdvancementTabAction,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x0e)]
pub struct ServerboundPlayConfigurationAcknowledged;
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x14)]
pub struct ServerboundPlayCustomPayload {
pub channel: String,
#[field(rest)]
pub data: Vec<u8>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x15)]
pub struct ServerboundPlayDebugSampleSubscription {
#[field(varint)]
pub r#type: i32,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x2d)]
pub struct ServerboundPlayDisplayedRecipe {
#[field(varint)]
pub recipe_id: i32,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x16)]
pub struct ServerboundPlayEditBook {
#[field(varint)]
pub hand: i32,
#[field(length = "varint")]
pub pages: Vec<String>,
#[field(optional)]
pub title: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x1a)]
pub struct ServerboundPlayKeepAlive {
pub keep_alive_id: i64,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x24)]
pub struct ServerboundPlayPingRequest {
pub id: i64,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x2b)]
pub struct ServerboundPlayPong {
pub id: i32,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x2c)]
pub struct ServerboundPlayRecipeBook {
#[field(varint)]
pub book_id: i32,
pub book_open: bool,
pub filter_active: bool,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x2f)]
pub struct ServerboundPlayResourcePackReceive {
pub uuid: Uuid,
#[field(varint)]
pub result: i32,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x0b)]
pub struct ServerboundPlayTickEnd;
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x34)]
pub struct ServerboundPlayUpdateCommandBlock {
pub location: Position,
pub command: String,
#[field(varint)]
pub mode: i32,
pub flags: u8,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x35)]
pub struct ServerboundPlayUpdateCommandBlockMinecart {
#[field(varint)]
pub entity_id: i32,
pub command: String,
pub track_output: bool,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x37)]
pub struct ServerboundPlayUpdateJigsawBlock {
pub location: Position,
pub name: String,
pub target: String,
pub pool: String,
pub final_state: String,
pub joint_type: String,
#[field(varint)]
pub selection_priority: i32,
#[field(varint)]
pub placement_priority: i32,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x38)]
pub struct ServerboundPlayUpdateStructureBlock {
pub location: Position,
#[field(varint)]
pub action: i32,
#[field(varint)]
pub mode: i32,
pub name: String,
pub offset_x: i8,
pub offset_y: i8,
pub offset_z: i8,
pub size_x: i8,
pub size_y: i8,
pub size_z: i8,
#[field(varint)]
pub mirror: i32,
#[field(varint)]
pub rotation: i32,
pub metadata: String,
pub integrity: f32,
#[field(varint)]
pub seed: i32,
pub flags: u8,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x3d)]
pub struct ServerboundPlayUseItem {
#[field(varint)]
pub hand: i32,
#[field(varint)]
pub sequence: i32,
pub rotation: Vec2f,
}
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayAdvancementsAdvancementmappingValue {
#[field(optional)]
pub parent_id: Option<String>,
#[field(optional)]
pub display_data: Option<Vec<u8>>,
#[field(length = "varint")]
pub requirements: Vec<Vec<u8>>,
pub sends_telemtry_data: bool,
}
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayAdvancementsAdvancementmapping {
pub key: String,
pub value: ClientboundPlayAdvancementsAdvancementmappingValue,
}
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayAdvancementsProgressmappingValue {
pub criterion_identifier: String,
#[field(optional)]
pub criterion_progress: Option<i64>,
}
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayAdvancementsProgressmapping {
pub key: String,
#[field(length = "varint")]
pub value: Vec<ClientboundPlayAdvancementsProgressmappingValue>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x7b)]
pub struct ClientboundPlayAdvancements {
pub reset: bool,
#[field(length = "varint")]
pub advancement_mapping: Vec<ClientboundPlayAdvancementsAdvancementmapping>,
#[field(length = "varint")]
pub identifiers: Vec<String>,
#[field(length = "varint")]
pub progress_mapping: Vec<ClientboundPlayAdvancementsProgressmapping>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x19)]
pub struct ClientboundPlayCustomPayload {
pub channel: String,
#[field(rest)]
pub data: Vec<u8>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x1b)]
pub struct ClientboundPlayDebugSample {
#[field(length = "varint")]
pub sample: Vec<i64>,
#[field(varint)]
pub r#type: i32,
}
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayDeclareRecipesRecipes {
pub name: String,
#[field(length = "varint", element = "varint")]
pub items: Vec<i32>,
}
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayDeclareRecipesStonecutterrecipes {
pub input: Vec<u8>,
pub slot_display: crate::packets::play::types::SlotDisplay,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x7e)]
pub struct ClientboundPlayDeclareRecipes {
#[field(length = "varint")]
pub recipes: Vec<ClientboundPlayDeclareRecipesRecipes>,
#[field(length = "varint")]
pub stone_cutter_recipes: Vec<ClientboundPlayDeclareRecipesStonecutterrecipes>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x27)]
pub struct ClientboundPlayKeepAlive {
pub keep_alive_id: i64,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x1d)]
pub struct ClientboundPlayKickDisconnect {
pub reason: NbtCompound,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x37)]
pub struct ClientboundPlayPing {
pub id: i32,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x38)]
pub struct ClientboundPlayPingResponse {
pub id: i64,
}
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayRecipeBookAddEntriesRecipe {
#[field(varint)]
pub display_id: i32,
pub display: crate::packets::play::types::RecipeDisplay,
#[field(varint)]
pub group: i32,
#[field(varint)]
pub category: i32,
#[field(optional)]
pub crafting_requirements: Option<Vec<u8>>,
}
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayRecipeBookAddEntries {
pub recipe: ClientboundPlayRecipeBookAddEntriesRecipe,
pub flags: u8,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x44)]
pub struct ClientboundPlayRecipeBookAdd {
#[field(length = "varint")]
pub entries: Vec<ClientboundPlayRecipeBookAddEntries>,
pub replace: bool,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x45)]
pub struct ClientboundPlayRecipeBookRemove {
#[field(length = "varint", element = "varint")]
pub recipe_ids: Vec<i32>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x46)]
pub struct ClientboundPlayRecipeBookSettings {
pub crafting_gui_open: bool,
pub crafting_filtering_craftable: bool,
pub smelting_gui_open: bool,
pub smelting_filtering_craftable: bool,
pub blast_gui_open: bool,
pub blast_filtering_craftable: bool,
pub smoker_gui_open: bool,
pub smoker_filtering_craftable: bool,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x4f)]
pub struct ClientboundPlaySelectAdvancementTab {
#[field(optional)]
pub id: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x50)]
pub struct ClientboundPlayServerData {
pub motd: NbtCompound,
#[field(optional)]
pub icon_bytes: Option<Vec<u8>>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x78)]
pub struct ClientboundPlaySetTickingState {
pub tick_rate: f32,
pub is_frozen: bool,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x6f)]
pub struct ClientboundPlaySoundEffect {
pub sound: Vec<u8>,
#[field(varint)]
pub sound_category: i32,
pub x: i32,
pub y: i32,
pub z: i32,
pub volume: f32,
pub pitch: f32,
pub seed: i64,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x70)]
pub struct ClientboundPlayStartConfiguration;
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayStatisticsEntries {
#[field(varint)]
pub category_id: i32,
#[field(varint)]
pub statistic_id: i32,
#[field(varint)]
pub value: i32,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x04)]
pub struct ClientboundPlayStatistics {
#[field(length = "varint")]
pub entries: Vec<ClientboundPlayStatisticsEntries>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x79)]
pub struct ClientboundPlayStepTick {
#[field(varint)]
pub tick_steps: i32,
}
#[derive(Debug, Clone, PartialEq, Encode, Decode, EncodedSize)]
pub enum ClientboundPlayStopSoundFlags {
#[variant(id = 1)]
Variant1 {
#[field(varint)]
source: i32,
},
#[variant(id = 2)]
Variant2 { sound: String },
#[variant(id = 3)]
Variant3 {
#[field(varint)]
source: i32,
sound: String,
},
}
impl Default for ClientboundPlayStopSoundFlags {
fn default() -> Self {
Self::Variant1 {
source: Default::default(),
}
}
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x71)]
pub struct ClientboundPlayStopSound {
pub flags: ClientboundPlayStopSoundFlags,
}
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayTagsTagsTags {
pub tag_name: String,
#[field(length = "varint", element = "varint")]
pub entries: Vec<i32>,
}
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayTagsTags {
pub tag_type: String,
#[field(length = "varint")]
pub tags: Vec<ClientboundPlayTagsTagsTags>,
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x7f)]
pub struct ClientboundPlayTags {
#[field(length = "varint")]
pub tags: Vec<ClientboundPlayTagsTags>,
}