From a0b8bbebfb8d84e7a28032ec66e5c5fe4a0b9cec Mon Sep 17 00:00:00 2001 From: Alexander Medvedev Date: Sun, 8 Mar 2026 21:42:57 +0100 Subject: [PATCH] Port bedrock to 1.26 still some bugs :c --- .../src/bedrock/client/start_game.rs | 31 ++++++++++++++--- pumpkin-protocol/src/bedrock/server/text.rs | 33 +------------------ pumpkin-world/src/lib.rs | 4 +-- pumpkin/src/world/mod.rs | 13 +++++--- 4 files changed, 38 insertions(+), 43 deletions(-) diff --git a/pumpkin-protocol/src/bedrock/client/start_game.rs b/pumpkin-protocol/src/bedrock/client/start_game.rs index 83164b8d5..c793bd844 100644 --- a/pumpkin-protocol/src/bedrock/client/start_game.rs +++ b/pumpkin-protocol/src/bedrock/client/start_game.rs @@ -55,6 +55,33 @@ pub struct CStartGame { pub enable_clientside_generation: bool, pub blocknetwork_ids_are_hashed: bool, pub server_auth_sounds: bool, + + // 2 Optionals is what we need Mojang :cap: + pub server_join_information: Option, + pub telemetry: ServerTelemetryData, +} + +#[derive(PacketWrite)] +pub struct ServerJoinInformation { + gathering_info: Option, +} + +#[derive(PacketWrite)] +pub struct GatheringJoinInfo { + experience_id: String, + experience_name: String, + experience_world_id: String, + experience_world_name: String, + creator_id: String, + store_id: String, +} + +#[derive(PacketWrite)] +pub struct ServerTelemetryData { + pub server_id: String, + pub scenario_id: String, + pub world_id: String, + pub owner_id: String, } #[derive(PacketWrite)] @@ -120,10 +147,6 @@ pub struct LevelSettings { pub override_force_experimental_gameplay_has_value: bool, pub chat_restriction_level: i8, pub disable_player_interactions: bool, - pub server_id: String, - pub world_id: String, - pub scenario_id: String, - pub owner_id: String, } #[derive(Default, PacketWrite)] diff --git a/pumpkin-protocol/src/bedrock/server/text.rs b/pumpkin-protocol/src/bedrock/server/text.rs index ccafc0436..a1c1ce3a7 100644 --- a/pumpkin-protocol/src/bedrock/server/text.rs +++ b/pumpkin-protocol/src/bedrock/server/text.rs @@ -55,22 +55,6 @@ impl SText { } } - const fn get_dummy_strings(category: u8) -> &'static [&'static str] { - match category { - 0 => &[ - "raw", - "tip", - "systemMessage", - "textObjectWhisper", - "textObjectAnnouncement", - "textObject", - ], - 1 => &["chat", "whisper", "announcement"], - 2 => &["translate", "popup", "jukeboxPopup"], - _ => &[], - } - } - const fn get_category(&self) -> u8 { match self.r#type { TextPacketType::Raw @@ -91,18 +75,7 @@ impl PacketRead for SText { fn read(reader: &mut R) -> Result { let needs_translation = bool::read(reader)?; - let category = u8::read(reader)?; - - let expected_dummies = Self::get_dummy_strings(category); - for &expected in expected_dummies { - let actual = String::read(reader)?; - if actual != expected { - return Err(Error::new( - ErrorKind::InvalidData, - format!("Dummy string mismatch: expected {expected}, got {actual}"), - )); - } - } + let _category = u8::read(reader)?; let r#type = TextPacketType::read(reader)?; @@ -160,10 +133,6 @@ impl PacketWrite for SText { let category = self.get_category(); category.write(writer)?; - for &dummy in Self::get_dummy_strings(category) { - dummy.to_string().write(writer)?; - } - self.r#type.write(writer)?; match self.r#type { diff --git a/pumpkin-world/src/lib.rs b/pumpkin-world/src/lib.rs index c1bd4cfc0..7868e0c50 100644 --- a/pumpkin-world/src/lib.rs +++ b/pumpkin-world/src/lib.rs @@ -26,8 +26,8 @@ pub type BlockStateId = u16; pub const CURRENT_MC_VERSION: &str = "1.21.11"; -pub const CURRENT_BEDROCK_MC_VERSION: &str = "1.21.132"; -pub const CURRENT_BEDROCK_MC_PROTOCOL: u32 = 898; +pub const CURRENT_BEDROCK_MC_VERSION: &str = "1.26"; +pub const CURRENT_BEDROCK_MC_PROTOCOL: u32 = 924; #[macro_export] macro_rules! global_path { diff --git a/pumpkin/src/world/mod.rs b/pumpkin/src/world/mod.rs index 1230b7a87..0fa483aff 100644 --- a/pumpkin/src/world/mod.rs +++ b/pumpkin/src/world/mod.rs @@ -62,7 +62,7 @@ use pumpkin_protocol::bedrock::client::set_actor_data::{ CSetActorData, EntityMetadata, MetadataValue, PropertySyncData, entity_data_flag, entity_data_key, }; -use pumpkin_protocol::bedrock::client::start_game::CStartGame; +use pumpkin_protocol::bedrock::client::start_game::{CStartGame, ServerTelemetryData}; use pumpkin_protocol::bedrock::frame_set::FrameSet; use pumpkin_protocol::java::client::play::CPlayerSpawnPosition; use pumpkin_protocol::java::client::play::{CSetEntityMetadata, Metadata}; @@ -1385,10 +1385,6 @@ impl World { override_force_experimental_gameplay_has_value: false, chat_restriction_level: 0, disable_player_interactions: false, - server_id: String::new(), - world_id: String::new(), - scenario_id: String::new(), - owner_id: String::new(), }; drop(level_info); drop(weather); @@ -1430,6 +1426,13 @@ impl World { enable_clientside_generation: false, blocknetwork_ids_are_hashed: false, server_auth_sounds: false, + server_join_information: None, + telemetry: ServerTelemetryData { + server_id: String::new(), + scenario_id: String::new(), + world_id: String::new(), + owner_id: String::new(), + }, }) .await; chunker::update_position(&player).await;