]> git.lizzy.rs Git - mt_net.git/blob - src/to_clt.rs
Add multiplier to ToSrv yaw and pitch
[mt_net.git] / src / to_clt.rs
1 use super::*;
2
3 #[mt_derive(to = "clt")]
4 pub struct Color {
5     pub a: u8,
6     pub r: u8,
7     pub g: u8,
8     pub b: u8,
9 }
10
11 #[mt_derive(to = "clt", repr = "u8")]
12 pub enum ModChanSig {
13     JoinOk = 0,
14     JoinFail,
15     LeaveOk,
16     LeaveFail,
17     NotRegistered,
18     SetState,
19 }
20
21 #[mt_derive(to = "clt", repr = "u32", enumset)]
22 pub enum AuthMethod {
23     LegacyPasswd,
24     Srp,
25     FirstSrp,
26 }
27
28 #[mt_derive(to = "clt", repr = "u64", enumset)]
29 pub enum CsmRestrictionFlag {
30     NoCsms,
31     NoChatMsgs,
32     NoItemDefs,
33     NoNodeDefs,
34     LimitMapRange,
35     NoPlayerList,
36 }
37
38 #[mt_derive(to = "clt", repr = "u8")]
39 pub enum ChatMsgType {
40     Raw = 0,
41     Normal,
42     Announce,
43     System,
44 }
45
46 #[mt_derive(to = "clt", repr = "u8")]
47 pub enum PlayerListUpdateType {
48     Init = 0,
49     Add,
50     Remove,
51 }
52
53 mod hud;
54 mod inv;
55 mod kick;
56 mod map;
57 mod media;
58 mod obj;
59 mod sky;
60
61 pub use hud::*;
62 pub use inv::*;
63 pub use kick::*;
64 pub use map::*;
65 pub use media::*;
66 pub use obj::*;
67 pub use sky::*;
68
69 #[mt_derive(to = "clt", repr = "u16", tag = "type", content = "data")]
70 pub enum ToCltPkt {
71     Hello {
72         serialize_version: u8,
73         #[mt(const_before = "0u16")] // compression
74         proto_version: u16,
75         auth_methods: EnumSet<AuthMethod>,
76         username: String,
77     } = 2,
78     AcceptAuth {
79         #[mt(multiplier = "BS")]
80         #[mt(map_ser = "|x| Ok(x + Vector3::new(0.0, 0.5, 0.0) * BS)")]
81         #[mt(map_des = "|x: Point3<f32>| Ok(x - Vector3::new(0.0, 0.5, 0.0) * BS)")]
82         player_pos: Point3<f32>,
83         map_seed: u64,
84         send_interval: f32,
85         sudo_auth_methods: EnumSet<AuthMethod>,
86     } = 3,
87     AcceptSudoMode {
88         #[mt(const_after = "[0u8; 15]")]
89         sudo_auth_methods: EnumSet<AuthMethod>,
90     } = 4,
91     DenySudoMode = 5,
92     Kick(KickReason) = 10,
93     BlockData {
94         pos: Point3<i16>,
95         #[mt(zstd)]
96         block: Box<MapBlock>,
97     } = 32,
98     AddNode {
99         pos: Point3<i16>,
100         param0: u16,
101         param1: u8,
102         param2: u8,
103         keep_meta: bool,
104     } = 33,
105     RemoveNode {
106         pos: [i16; 3],
107     } = 34,
108     Inv {
109         #[mt(len = "()")]
110         inv: String,
111     } = 39,
112     TimeOfDay {
113         time: u16,
114         speed: f32,
115     } = 41,
116     CsmRestrictionFlags {
117         flags: EnumSet<CsmRestrictionFlag>,
118         map_range: u32,
119     } = 42,
120     AddPlayerVelocity {
121         #[mt(multiplier = "BS")]
122         vel: Vector3<f32>,
123     } = 43,
124     MediaPush {
125         raw_hash: String,
126         filename: String,
127         callback_token: u32,
128         should_cache: bool,
129     } = 44,
130     ChatMsg {
131         #[mt(const_before = "1u8")]
132         msg_type: ChatMsgType,
133         #[mt(len = "Utf16")]
134         sender: String,
135         #[mt(len = "Utf16")]
136         text: String,
137         timestamp: i64, // unix time
138     } = 47,
139     ObjRemoveAdd {
140         remove: Vec<u16>,
141         add: Vec<ObjAdd>,
142     } = 49,
143     ObjMsgs {
144         #[mt(len = "()")]
145         msgs: Vec<ObjIdMsg>,
146     } = 50,
147     Hp {
148         hp: u16,
149         #[mt(default)]
150         damage_effect: bool,
151     } = 51,
152     MovePlayer {
153         #[mt(multiplier = "BS")]
154         pos: Point3<f32>,
155         pitch: Deg<f32>,
156         yaw: Deg<f32>,
157     } = 52,
158     LegacyKick {
159         #[mt(len = "Utf16")]
160         reason: String,
161     } = 53,
162     Fov {
163         fov: Deg<f32>,
164         multiplier: bool,
165         transition_time: f32,
166     } = 54,
167     DeathScreen {
168         point_cam: bool,
169         #[mt(multiplier = "BS")]
170         point_at: Point3<f32>,
171     } = 55,
172     Media {
173         n: u16,
174         i: u16,
175         #[mt(len = "(u32, (DefCfg, u32))")]
176         files: HashMap<String, Vec<u8>>, // name -> payload
177     } = 56,
178     #[mt(size = "u32", zlib)]
179     NodeDefs(#[mt(const_before = "1u8")] NodeDefs) = 58,
180     AnnounceMedia {
181         files: HashMap<String, String>, // name -> base64 sha1 hash
182         url: String,
183     } = 60,
184     #[mt(size = "u32", zlib)]
185     ItemDefs {
186         #[mt(const_before = "0u8")] // version
187         defs: Vec<ItemDef>,
188         aliases: HashMap<String, String>,
189     } = 61,
190     PlaySound {
191         id: u32,
192         name: String,
193         gain: f32,
194         source: SoundSource,
195         #[mt(multiplier = "BS")]
196         pos: Point3<f32>,
197         src_obj_id: u16,
198         #[serde(rename = "loop")]
199         sound_loop: bool,
200         fade: f32,
201         pitch: f32,
202         ephermeral: bool,
203     } = 63,
204     StopSound {
205         id: u32,
206     } = 64,
207     Privs {
208         privs: HashSet<String>,
209     } = 65,
210     InvFormspec {
211         #[mt(len = "u32")]
212         formspec: String,
213     } = 66,
214     DetachedInv {
215         name: String,
216         keep: bool,
217         len: u16,
218         #[mt(len = "()")]
219         inv: String,
220     } = 67,
221     ShowFormspec {
222         #[mt(len = "u32")]
223         formspec: String,
224         formname: String,
225     } = 68,
226     Movement {
227         default_accel: f32,
228         air_accel: f32,
229         fast_accel: f32,
230         walk_speed: f32,
231         crouch_speed: f32,
232         fast_speed: f32,
233         climb_speed: f32,
234         jump_speed: f32,
235         fluidity: f32,
236         smoothing: f32,
237         sink: f32,
238         gravity: f32,
239     } = 69,
240     SpawnParticle {
241         pos: Point3<f32>,
242         vel: Vector3<f32>,
243         acc: Vector3<f32>,
244         expiration_time: f32,
245         size: f32,
246         collide: bool,
247         #[mt(len = "u32")]
248         texture: String,
249         vertical: bool,
250         collision_rm: bool,
251         anim_params: TileAnim,
252         glow: u8,
253         obj_collision: bool,
254         node_param0: u16,
255         node_param2: u8,
256         node_tile: u8,
257     } = 70,
258     // TODO: support new particlespawner definitions (with tweening)
259     AddParticleSpawner {
260         amount: u16,
261         duration: f32,
262         pos: RangeInclusive<Point3<f32>>,
263         vel: RangeInclusive<Vector3<f32>>,
264         acc: RangeInclusive<Vector3<f32>>,
265         expiration_time: RangeInclusive<f32>,
266         size: RangeInclusive<f32>,
267         collide: bool,
268         #[mt(len = "u32")]
269         texture: String,
270         id: u32,
271         vertical: bool,
272         collision_rm: bool,
273         attached_obj_id: u16,
274         anim_params: TileAnim,
275         glow: u8,
276         obj_collision: bool,
277         node_param0: u16,
278         node_param2: u8,
279         node_tile: u8,
280     } = 71,
281     AddHud {
282         id: u32,
283         hud: HudElement,
284     } = 73,
285     RemoveHud {
286         id: u32,
287     } = 74,
288     ChangeHud {
289         id: u32,
290         change: HudChange,
291     } = 75,
292     HudFlags {
293         flags: EnumSet<HudFlag>,
294         mask: EnumSet<HudFlag>,
295     } = 76,
296     HotbarParam(HotbarParam) = 77,
297     Breath {
298         breath: u16,
299     } = 78,
300     SkyParams(SkyParams) = 79,
301     OverrideDayNightRatio {
302         #[serde(rename = "override")]
303         ratio_override: bool,
304         ratio: u16,
305     } = 80,
306     LocalPlayerAnim {
307         idle: RangeInclusive<i32>,
308         walk: RangeInclusive<i32>,
309         dig: RangeInclusive<i32>,
310         walk_dig: RangeInclusive<i32>,
311         speed: f32,
312     } = 81,
313     EyeOffset {
314         #[mt(multiplier = "BS")]
315         first: Vector3<f32>,
316         #[mt(multiplier = "BS")]
317         third: Vector3<f32>,
318     } = 82,
319     RemoveParticleSpawner {
320         id: u32,
321     } = 83,
322     CloudParams(CloudParams) = 84,
323     FadeSound {
324         id: u32,
325         step: f32,
326         gain: f32,
327     } = 85,
328     UpdatePlayerList {
329         update_type: PlayerListUpdateType,
330         players: HashSet<String>,
331     } = 86,
332     ModChanMsg {
333         channel: String,
334         sender: String,
335         msg: String,
336     } = 87,
337     ModChanSig {
338         signal: ModChanSig,
339         channel: String,
340     } = 88,
341     NodeMetasChanged {
342         #[mt(size = "u32", zlib)]
343         #[mt(len = "NodeMetasLen")]
344         changed: HashMap<Vector3<i16>, NodeMeta>,
345     } = 89,
346     SunParams(SunParams) = 90,
347     MoonParams(MoonParams) = 91,
348     StarParams(StarParams) = 92,
349     SrpBytesSaltB {
350         salt: Vec<u8>,
351         b: Vec<u8>,
352     } = 96,
353     FormspecPrepend {
354         prepend: String,
355     } = 97,
356     MinimapModes(MinimapModesPkt) = 98,
357 }
358
359 impl PktInfo for ToCltPkt {
360     fn pkt_info(&self) -> (u8, bool) {
361         use ToCltPkt::*;
362
363         match self {
364             BlockData { .. } | Media { .. } => (2, true),
365             AddHud { .. }
366             | ChangeHud { .. }
367             | RemoveHud { .. }
368             | HudFlags { .. }
369             | HotbarParam(_) => (1, true),
370             _ => (0, true),
371         }
372     }
373 }