summaryrefslogtreecommitdiff
path: root/src/to_srv.rs
blob: 354bbb42673a3dec0f1a4c3499ae528f64e3f8ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
use crate::*;

#[mt_derive(to = "srv")]
pub struct PlayerPos {
    #[mt(const_u16 = 1)] // supported compression
    pub pos_100: [i32; 3],
    pub vel_100: [i32; 3],
    pub pitch_100: i32,
    pub yaw_100: i32,
    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")]
pub struct PointedThing; // TODO

#[mt_derive(to = "srv", repr = "u16", tag = "type", content = "data")]
pub enum ToSrvPkt {
    Nil = 0,
    Init {
        serialize_version: u8,
        #[mt(const_u16 = 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(size_u32)]
        pointed: PointedThing,
        pos: PlayerPos,
    } = 57,
    RemovedSounds {
        ids: Vec<i32>,
    } = 58,
    NodeMetaFields {
        pos: [i16; 3],
        formname: String,
        fields: HashMap<String, String>,
    } = 59,
    InvFields {
        formname: String,
        fields: HashMap<String, String>,
    } = 60,
    ReqMedia {
        filenames: Vec<String>,
    } = 64,
    CltReady {
        major: u8,
        minor: u8,
        patch: u8,
        reserved: u8,
        version: String,
        formspec: u16,
    } = 67,
    FirstSrp {
        salt: Vec<u8>,
        verifier: Vec<u8>,
        empty_passwd: bool,
    } = 80,
    SrpBytesA {
        a: Vec<u8>,
        no_sha1: bool,
    } = 81,
    SrpBytesM {
        m: Vec<u8>,
    } = 82,
    Disco = 0xffff,
}