use super::*; #[mt_derive(to = "srv", repr = "u32", enumset)] pub enum Key { Forward, Backward, Left, Right, Jump, Special, Sneak, Dig, Place, Zoom, } #[mt_derive(to = "srv")] pub struct PlayerPos { pub pos_100: [i32; 3], pub vel_100: [i32; 3], pub pitch_100: i32, pub yaw_100: i32, pub keys: EnumSet, pub fov_80: u8, pub wanted_range: u8, } #[mt_derive(to = "srv", repr = "u8")] pub enum Interaction { Dig = 0, StopDigging, Dug, Place, Use, Activate, } #[mt_derive(to = "srv", repr = "u8", tag = "type")] #[mt(const8 = 0)] // version pub enum PointedThing { None = 0, Node { under: [i16; 3], above: [i16; 3] }, Obj { obj: u16 }, } #[mt_derive(to = "srv")] pub struct String32(#[mt(len32)] pub String); impl std::ops::Deref for String32 { type Target = String; fn deref(&self) -> &Self::Target { &self.0 } } impl std::ops::DerefMut for String32 { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.0 } } #[mt_derive(to = "srv", repr = "u16", tag = "type", content = "data")] pub enum ToSrvPkt { Nil = 0, Init { serialize_version: u8, #[mt(const16 = 1)] // supported compression min_proto_version: u16, max_proto_version: u16, player_name: String, #[mt(default)] send_full_item_meta: bool, } = 2, Init2 { lang: String, } = 17, JoinModChan { channel: String, } = 23, LeaveModChan { channel: String, } = 24, MsgModChan { channel: String, msg: String, } = 25, PlayerPos(PlayerPos) = 35, GotBlocks { #[mt(len8)] blocks: Vec<[i16; 3]>, } = 36, DeletedBlocks { #[mt(len8)] blocks: Vec<[i16; 3]>, } = 37, InvAction { #[mt(len0)] action: String, } = 49, ChatMsg { #[mt(utf16)] msg: String, } = 50, FallDmg { amount: u16, } = 53, SelectItem { select_item: u16, } = 55, Respawn = 56, Interact { action: Interaction, item_slot: u16, #[mt(size32)] pointed: PointedThing, pos: PlayerPos, } = 57, RemovedSounds { ids: Vec, } = 58, NodeMetaFields { pos: [i16; 3], formname: String, fields: HashMap, } = 59, InvFields { formname: String, fields: HashMap, } = 60, ReqMedia { filenames: Vec, } = 64, CltReady { major: u8, minor: u8, patch: u8, reserved: u8, version: String, formspec: u16, } = 67, FirstSrp { salt: Vec, verifier: Vec, empty_passwd: bool, } = 80, SrpBytesA { a: Vec, no_sha1: bool, } = 81, SrpBytesM { m: Vec, } = 82, Disco = 0xffff, }