use basalt_derive::{Decode, Encode, EncodedSize, packet};
use basalt_types::{NbtCompound, Position, Vec3f64};
#[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,
}
#[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;
#[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,
}
#[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>,
}
#[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,
}