basalt-mc-protocol 0.2.1

Minecraft packet definitions and version-aware packet registry
Documentation
//! Play state — world packets.
//!
//! Auto-generated by `cargo xt codegen` from minecraft-data.
//! Do not edit manually — changes will be overwritten.

use basalt_derive::{Decode, Encode, EncodedSize, packet};
use basalt_types::{NbtCompound, Position, Vec3f64};

// -- Serverbound packets --

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x27)]
pub struct ServerboundPlayBlockDig {
    #[field(varint)]
    pub status: i32,
    pub location: Position,
    pub face: i8,
    #[field(varint)]
    pub sequence: i32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x3c)]
pub struct ServerboundPlayBlockPlace {
    #[field(varint)]
    pub hand: i32,
    pub location: Position,
    #[field(varint)]
    pub direction: i32,
    pub cursor_x: f32,
    pub cursor_y: f32,
    pub cursor_z: f32,
    pub inside_block: bool,
    pub world_border_hit: bool,
    #[field(varint)]
    pub sequence: i32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x09)]
pub struct ServerboundPlayChunkBatchReceived {
    pub chunks_per_tick: f32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x19)]
pub struct ServerboundPlayGenerateStructure {
    pub location: Position,
    #[field(varint)]
    pub levels: i32,
    pub keep_jigsaws: bool,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x01)]
pub struct ServerboundPlayQueryBlockNbt {
    #[field(varint)]
    pub transaction_id: i32,
    pub location: Position,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x39)]
pub struct ServerboundPlayUpdateSign {
    pub location: Position,
    pub is_front_text: bool,
    pub text1: String,
    pub text2: String,
    pub text3: String,
    pub text4: String,
}

// -- Clientbound packets --

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x05)]
pub struct ClientboundPlayAcknowledgePlayerDigging {
    #[field(varint)]
    pub sequence_id: i32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x08)]
pub struct ClientboundPlayBlockAction {
    pub location: Position,
    pub byte1: u8,
    pub byte2: u8,
    #[field(varint)]
    pub block_id: i32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x09)]
pub struct ClientboundPlayBlockChange {
    pub location: Position,
    #[field(varint)]
    pub r#type: i32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x0c)]
pub struct ClientboundPlayChunkBatchFinished {
    #[field(varint)]
    pub batch_size: i32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x0d)]
pub struct ClientboundPlayChunkBatchStart;

/// Inline data structure used by [`ClientboundPlayChunkBiomes`].
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayChunkBiomesBiomes {
    pub position: i64,
    #[field(length = "varint")]
    pub data: Vec<u8>,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x0e)]
pub struct ClientboundPlayChunkBiomes {
    #[field(length = "varint")]
    pub biomes: Vec<ClientboundPlayChunkBiomesBiomes>,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x21)]
pub struct ClientboundPlayExplosion {
    pub x: f64,
    pub y: f64,
    pub z: f64,
    #[field(optional)]
    pub player_knockback: Option<Vec3f64>,
    pub explosion_particle: crate::packets::play::types::Particle,
    #[field(rest)]
    pub sound: Vec<u8>,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x26)]
pub struct ClientboundPlayInitializeWorldBorder {
    pub x: f64,
    pub z: f64,
    pub old_diameter: f64,
    pub new_diameter: f64,
    #[field(varint)]
    pub speed: i32,
    #[field(varint)]
    pub portal_teleport_boundary: i32,
    #[field(varint)]
    pub warning_blocks: i32,
    #[field(varint)]
    pub warning_time: i32,
}

/// Inline data structure used by [`ClientboundPlayMap`].
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayMapIcons {
    #[field(varint)]
    pub r#type: i32,
    pub x: i8,
    pub z: i8,
    pub direction: u8,
    #[field(optional)]
    pub display_name: Option<NbtCompound>,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x2d)]
pub struct ClientboundPlayMap {
    #[field(varint)]
    pub item_damage: i32,
    pub scale: i8,
    pub locked: bool,
    #[field(optional)]
    pub icons: Option<Vec<u8>>,
    pub columns: u8,
    pub rows: Vec<u8>,
    pub x: Vec<u8>,
    pub y: Vec<u8>,
    pub data: Vec<u8>,
}

/// Inline data structure used by [`ClientboundPlayMapChunk`].
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayMapChunkChunkblockentity {
    pub anon_0: u8,
    pub y: i16,
    #[field(varint)]
    pub r#type: i32,
    pub nbt_data: NbtCompound,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x28)]
pub struct ClientboundPlayMapChunk {
    pub x: i32,
    pub z: i32,
    pub heightmaps: NbtCompound,
    #[field(length = "varint")]
    pub chunk_data: Vec<u8>,
    #[field(length = "varint")]
    pub block_entities: Vec<ClientboundPlayMapChunkChunkblockentity>,
    #[field(length = "varint")]
    pub sky_light_mask: Vec<i64>,
    #[field(length = "varint")]
    pub block_light_mask: Vec<i64>,
    #[field(length = "varint")]
    pub empty_sky_light_mask: Vec<i64>,
    #[field(length = "varint")]
    pub empty_block_light_mask: Vec<i64>,
    #[field(length = "varint")]
    pub sky_light: Vec<Vec<u8>>,
    #[field(length = "varint")]
    pub block_light: Vec<Vec<u8>>,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x4e)]
pub struct ClientboundPlayMultiBlockChange {
    pub chunk_coordinates: u64,
    #[field(length = "varint", element = "varint")]
    pub records: Vec<i32>,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x75)]
pub struct ClientboundPlayNbtQueryResponse {
    #[field(varint)]
    pub transaction_id: i32,
    pub nbt: NbtCompound,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x5b)]
pub struct ClientboundPlaySpawnPosition {
    pub location: Position,
    pub angle: f32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x07)]
pub struct ClientboundPlayTileEntityData {
    pub location: Position,
    #[field(varint)]
    pub action: i32,
    pub nbt_data: NbtCompound,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x22)]
pub struct ClientboundPlayUnloadChunk {
    pub chunk_z: i32,
    pub chunk_x: i32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x2b)]
pub struct ClientboundPlayUpdateLight {
    #[field(varint)]
    pub chunk_x: i32,
    #[field(varint)]
    pub chunk_z: i32,
    #[field(length = "varint")]
    pub sky_light_mask: Vec<i64>,
    #[field(length = "varint")]
    pub block_light_mask: Vec<i64>,
    #[field(length = "varint")]
    pub empty_sky_light_mask: Vec<i64>,
    #[field(length = "varint")]
    pub empty_block_light_mask: Vec<i64>,
    #[field(length = "varint")]
    pub sky_light: Vec<Vec<u8>>,
    #[field(length = "varint")]
    pub block_light: Vec<Vec<u8>>,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x6b)]
pub struct ClientboundPlayUpdateTime {
    pub age: i64,
    pub time: i64,
    pub tick_day_time: bool,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x59)]
pub struct ClientboundPlayUpdateViewDistance {
    #[field(varint)]
    pub view_distance: i32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x58)]
pub struct ClientboundPlayUpdateViewPosition {
    #[field(varint)]
    pub chunk_x: i32,
    #[field(varint)]
    pub chunk_z: i32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x52)]
pub struct ClientboundPlayWorldBorderCenter {
    pub x: f64,
    pub z: f64,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x53)]
pub struct ClientboundPlayWorldBorderLerpSize {
    pub old_diameter: f64,
    pub new_diameter: f64,
    #[field(varint)]
    pub speed: i32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x54)]
pub struct ClientboundPlayWorldBorderSize {
    pub diameter: f64,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x55)]
pub struct ClientboundPlayWorldBorderWarningDelay {
    #[field(varint)]
    pub warning_time: i32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x56)]
pub struct ClientboundPlayWorldBorderWarningReach {
    #[field(varint)]
    pub warning_blocks: i32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x29)]
pub struct ClientboundPlayWorldEvent {
    pub effect_id: i32,
    pub location: Position,
    pub data: i32,
    pub global: bool,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x2a)]
pub struct ClientboundPlayWorldParticles {
    pub long_distance: bool,
    pub always_show: bool,
    pub x: f64,
    pub y: f64,
    pub z: f64,
    pub offset_x: f32,
    pub offset_y: f32,
    pub offset_z: f32,
    pub velocity_offset: f32,
    pub amount: i32,
    pub particle: crate::packets::play::types::Particle,
}