feat(bedrock) add & send title packet

This commit is contained in:
Alexander Medvedev 2026-05-04 19:21:31 +02:00
parent 5616f02751
commit bb0941bfeb
3 changed files with 82 additions and 7 deletions

View File

@ -20,6 +20,7 @@ pub mod set_actor_data;
pub mod set_actor_motion;
pub mod set_player_gamemode;
pub mod set_time;
pub mod set_title;
pub mod start_game;
pub mod update_abilities;
pub mod update_artributes;

View File

@ -0,0 +1,37 @@
use crate::{codec::var_int::VarInt, serial::PacketWrite};
use pumpkin_macros::packet;
#[derive(PacketWrite)]
#[packet(88)]
pub struct CSetTitle {
pub action_type: VarInt,
pub text: String,
pub fade_in_duration: VarInt,
pub remain_duration: VarInt,
pub fade_out_duration: VarInt,
pub xuid: String,
pub platform_online_id: String,
pub filtered_message: String,
}
impl CSetTitle {
#[must_use]
pub fn new(
action_type: i32,
text: String,
fade_in_duration: i32,
remain_duration: i32,
fade_out_duration: i32,
) -> Self {
Self {
action_type: VarInt(action_type),
text,
fade_in_duration: VarInt(fade_in_duration),
remain_duration: VarInt(remain_duration),
fade_out_duration: VarInt(fade_out_duration),
xuid: String::new(),
platform_online_id: String::new(),
filtered_message: String::new(),
}
}
}

View File

@ -1542,17 +1542,54 @@ impl Player {
}
pub async fn show_title(&self, text: &TextComponent, mode: &TitleMode) {
match mode {
TitleMode::Title => self.client.enqueue_packet(&CTitleText::new(text)).await,
TitleMode::SubTitle => self.client.enqueue_packet(&CSubtitle::new(text)).await,
TitleMode::ActionBar => self.client.enqueue_packet(&CActionBar::new(text)).await,
match &self.client {
ClientPlatform::Java(client) => match mode {
TitleMode::Title => client.enqueue_packet(&CTitleText::new(text)).await,
TitleMode::SubTitle => client.enqueue_packet(&CSubtitle::new(text)).await,
TitleMode::ActionBar => client.enqueue_packet(&CActionBar::new(text)).await,
},
ClientPlatform::Bedrock(client) => {
let action_type = match mode {
TitleMode::Title => 2,
TitleMode::SubTitle => 3,
TitleMode::ActionBar => 4,
};
client
.send_game_packet(
&pumpkin_protocol::bedrock::client::set_title::CSetTitle::new(
action_type,
text.clone().get_text(),
0,
0,
0,
),
)
.await;
}
}
}
pub async fn send_title_animation(&self, fade_in: i32, stay: i32, fade_out: i32) {
self.client
.enqueue_packet(&CTitleAnimation::new(fade_in, stay, fade_out))
.await;
match &self.client {
ClientPlatform::Java(client) => {
client
.enqueue_packet(&CTitleAnimation::new(fade_in, stay, fade_out))
.await;
}
ClientPlatform::Bedrock(client) => {
client
.send_game_packet(
&pumpkin_protocol::bedrock::client::set_title::CSetTitle::new(
5,
String::new(),
fade_in,
stay,
fade_out,
),
)
.await;
}
}
}
pub async fn spawn_particle(