3 #[mt_derive(to = "srv", repr = "u32", enumset)]
17 #[cfg(feature = "client")]
18 fn ser_cast_err() -> mt_ser::SerializeError {
19 mt_ser::SerializeError::Other("cast failed".into())
22 #[cfg(feature = "server")]
23 fn des_cast_err() -> mt_ser::DeserializeError {
24 mt_ser::DeserializeError::Other("cast failed".into())
27 #[mt_derive(to = "srv")]
28 pub struct PlayerPos {
29 #[mt(multiplier = "100.0 * BS")]
30 #[mt(map_ser = "|x| x.cast::<i32>().ok_or_else(ser_cast_err)")]
31 #[mt(map_des = "|x: Point3<i32>| x.cast::<f32>().ok_or_else(des_cast_err)")]
33 #[mt(multiplier = "100.0 * BS")]
34 #[mt(map_ser = "|x| x.cast::<i32>().ok_or_else(ser_cast_err)")]
35 #[mt(map_des = "|x: Vector3<i32>| x.cast::<f32>().ok_or_else(des_cast_err)")]
36 pub vel: Vector3<f32>,
37 #[mt(map_ser = "|x| Ok(x.0 as i32)", map_des = "|x: i32| Ok(Deg(x as f32))")]
39 #[mt(map_ser = "|x| Ok(x.0 as i32)", map_des = "|x: i32| Ok(Deg(x as f32))")]
41 pub keys: EnumSet<Key>,
42 #[mt(multiplier = "80.0")]
43 #[mt(map_ser = "|x| Ok(x.0 as u8)", map_des = "|x: u8| Ok(Rad(x as f32))")]
48 #[mt_derive(to = "srv", repr = "u8")]
49 pub enum Interaction {
58 #[mt_derive(to = "srv", repr = "u8", tag = "type")]
59 #[mt(const_before = "0u8")] // version
60 pub enum PointedThing {
71 #[mt_derive(to = "srv", repr = "u16", tag = "type", content = "data")]
75 serialize_version: u8,
76 #[mt(const_before = "1u16")] // supported compression
77 proto_version: RangeInclusive<u16>,
80 send_full_item_meta: bool,
95 PlayerPos(PlayerPos) = 35,
98 blocks: Vec<Point3<i16>>,
102 blocks: Vec<[i16; 3]>,
127 pointed: PointedThing,
136 #[mt(len = "(DefCfg, (DefCfg, u32))")]
137 fields: HashMap<String, String>,
141 #[mt(len = "(DefCfg, (DefCfg, u32))")]
142 fields: HashMap<String, String>,
145 filenames: Vec<String>,
170 impl PktInfo for ToSrvPkt {
171 fn pkt_info(&self) -> (u8, bool) {
175 Init { .. } => (1, false),
177 | RequestMedia { .. }
181 | SrpBytesM { .. } => (1, true),
182 PlayerPos { .. } => (0, false),
183 GotBlocks { .. } | HaveMedia { .. } | DeletedBlocks { .. } | RemovedSounds { .. } => {