Skip to content

Commit 2585f40

Browse files
committed
Add from_message FML|HS parsing in plugin_messages::FmlHs
1 parent f99218d commit 2585f40

File tree

2 files changed

+37
-24
lines changed

2 files changed

+37
-24
lines changed

src/server/mod.rs

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -684,29 +684,8 @@ impl Server {
684684
// TODO: "REGISTER" =>
685685
// TODO: "UNREGISTER" =>
686686
"FML|HS" => {
687-
// https://wiki.vg/Minecraft_Forge_Handshake
688-
let discriminator = data[0];
689-
690-
match discriminator {
691-
0 => {
692-
// ServerHello
693-
let fml_protocol_version = data[1];
694-
let dimension = if fml_protocol_version > 1 {
695-
use byteorder::{BigEndian, ReadBytesExt};
696-
let dimension = (&data[2..2 + 4]).read_u32::<BigEndian>().unwrap();
697-
Some(dimension)
698-
} else {
699-
None
700-
};
701-
702-
println!("FML|HS ServerHello: fml_protocol_version={}, dimension={:?}", fml_protocol_version, dimension);
703-
704-
// TODO: send reply
705-
},
706-
_ => {
707-
println!("Unhandled FML|HS packet: discriminator={}", discriminator);
708-
}
709-
}
687+
let msg = plugin_messages::FmlHs::from_message(&data);
688+
println!("FML|HS msg={:?}", msg);
710689
}
711690
_ => ()
712691
}

src/server/plugin_messages.rs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ use crate::protocol::Serializable;
55
use crate::protocol::packet::play::serverbound::PluginMessageServerbound;
66
use crate::protocol::packet::play::serverbound::PluginMessageServerbound_i16;
77

8+
#[derive(Debug)]
89
pub enum FmlHs<'a> {
910
ServerHello {
1011
fml_protocol_version: i8,
11-
override_dimension: i32,
12+
override_dimension: Option<i32>,
1213
},
1314
ClientHello {
1415
fml_protocol_version: i8,
@@ -29,6 +30,39 @@ pub enum FmlHs<'a> {
2930
HandshakeReset,
3031
}
3132

33+
impl<'a> FmlHs<'a> {
34+
pub fn from_message(data: &[u8]) -> FmlHs<'a> {
35+
// https://wiki.vg/Minecraft_Forge_Handshake
36+
let discriminator = data[0];
37+
38+
match discriminator {
39+
0 => {
40+
// ServerHello
41+
let fml_protocol_version = data[1] as i8;
42+
let override_dimension = if fml_protocol_version > 1 {
43+
use byteorder::{BigEndian, ReadBytesExt};
44+
let dimension = (&data[2..2 + 4]).read_i32::<BigEndian>().unwrap();
45+
Some(dimension)
46+
} else {
47+
None
48+
};
49+
50+
println!("FML|HS ServerHello: fml_protocol_version={}, override_dimension={:?}", fml_protocol_version, override_dimension);
51+
52+
FmlHs::ServerHello {
53+
fml_protocol_version,
54+
override_dimension,
55+
}
56+
57+
// TODO: send reply
58+
},
59+
_ => {
60+
panic!("Unhandled FML|HS packet: discriminator={}", discriminator);
61+
}
62+
}
63+
}
64+
}
65+
3266
pub struct Brand {
3367
pub brand: String,
3468
}

0 commit comments

Comments
 (0)