diff --git a/src/main.rs b/src/main.rs index 77d3ba5..01ecb89 100644 --- a/src/main.rs +++ b/src/main.rs @@ -178,7 +178,7 @@ struct Opt { /// Protocol version to use in the autodetection ping #[structopt(short = "p", long = "default-protocol-version")] - default_protocol_version: Option, + default_protocol_version: Option, } cfg_if! { @@ -260,6 +260,8 @@ pub fn main() { let textures = renderer.get_textures(); let dpi_factor = window.get_current_monitor().get_hidpi_factor(); + let default_protocol_version = protocol::versions::protocol_name_to_protocol_version( + opt.default_protocol_version.unwrap_or("".to_string())); let mut game = Game { server: server::Server::dummy_server(resource_manager.clone()), focused: false, @@ -277,7 +279,7 @@ pub fn main() { last_mouse_xrel: 0.0, last_mouse_yrel: 0.0, is_fullscreen: false, - default_protocol_version: opt.default_protocol_version.unwrap_or(protocol::SUPPORTED_PROTOCOLS[0]), + default_protocol_version, }; game.renderer.camera.pos = cgmath::Point3::new(0.5, 13.2, 0.5); diff --git a/src/protocol/versions.rs b/src/protocol/versions.rs index dbc569a..2131f21 100644 --- a/src/protocol/versions.rs +++ b/src/protocol/versions.rs @@ -13,49 +13,50 @@ mod v15w39c; mod v1_8_9; mod v1_7_10; -pub fn translate_internal_packet_id_for_version(version: i32, state: State, dir: Direction, id: i32, to_internal: bool) -> i32 { - match version { - // https://wiki.vg/Protocol_History - // https://wiki.vg/Protocol_version_numbers#Versions_after_the_Netty_rewrite +// https://wiki.vg/Protocol_History +// https://wiki.vg/Protocol_version_numbers#Versions_after_the_Netty_rewrite - 477 => v1_14::translate_internal_packet_id(state, dir, id, to_internal), - - // 19w02a - 452 => v19w02a::translate_internal_packet_id(state, dir, id, to_internal), - - // 18w50a - 451 => v18w50a::translate_internal_packet_id(state, dir, id, to_internal), - - // 1.13.2 - 404 => v1_13_2::translate_internal_packet_id(state, dir, id, to_internal), - - // 1.12.2 - 340 => v1_12_2::translate_internal_packet_id(state, dir, id, to_internal), - - // 1.11.2 - 316 => v1_11_2::translate_internal_packet_id(state, dir, id, to_internal), - - // 1.11 - 315 => v1_11_2::translate_internal_packet_id(state, dir, id, to_internal), - - // 1.10.2 - 210 => v1_10_2::translate_internal_packet_id(state, dir, id, to_internal), - - // 1.9.2 - 109 => v1_9_2::translate_internal_packet_id(state, dir, id, to_internal), - - // 1.9 - 107 => v1_9::translate_internal_packet_id(state, dir, id, to_internal), - - // 15w39a/b/c - 74 => v15w39c::translate_internal_packet_id(state, dir, id, to_internal), - - // 1.8.9 - 1.8 - 47 => v1_8_9::translate_internal_packet_id(state, dir, id, to_internal), - - // 1.7.10 - 1.7.6 - 5 => v1_7_10::translate_internal_packet_id(state, dir, id, to_internal), - - _ => panic!("unsupported protocol version"), +pub fn protocol_name_to_protocol_version(s: String) -> i32 { + match s.as_ref() { + "" => SUPPORTED_PROTOCOLS[0], + "1.14" => 477, + "19w02a" => 452, + "18w50a" => 451, + "1.13.2" => 404, + "1.12.2" => 340, + "1.11.2" => 316, + "1.11" => 315, + "1.10.2" => 210, + "1.9.2" => 109, + "1.9" => 107, + "15w39c" => 74, + "1.8.9" => 47, + "1.7.10" => 5, + _ => { + if let Ok(n) = s.parse::() { + n + } else { + panic!("Unrecognized protocol name: {}", s) + } + } + } +} + +pub fn translate_internal_packet_id_for_version(version: i32, state: State, dir: Direction, id: i32, to_internal: bool) -> i32 { + match version { + 477 => v1_14::translate_internal_packet_id(state, dir, id, to_internal), + 452 => v19w02a::translate_internal_packet_id(state, dir, id, to_internal), + 451 => v18w50a::translate_internal_packet_id(state, dir, id, to_internal), + 404 => v1_13_2::translate_internal_packet_id(state, dir, id, to_internal), + 340 => v1_12_2::translate_internal_packet_id(state, dir, id, to_internal), + 316 => v1_11_2::translate_internal_packet_id(state, dir, id, to_internal), + 315 => v1_11_2::translate_internal_packet_id(state, dir, id, to_internal), + 210 => v1_10_2::translate_internal_packet_id(state, dir, id, to_internal), + 109 => v1_9_2::translate_internal_packet_id(state, dir, id, to_internal), + 107 => v1_9::translate_internal_packet_id(state, dir, id, to_internal), + 74 => v15w39c::translate_internal_packet_id(state, dir, id, to_internal), + 47 => v1_8_9::translate_internal_packet_id(state, dir, id, to_internal), + 5 => v1_7_10::translate_internal_packet_id(state, dir, id, to_internal), + _ => panic!("unsupported protocol version: {}", version), } }