valence_boss_bar/
components.rs1use std::borrow::Cow;
2
3use bevy_ecs::prelude::{Bundle, Component};
4use derive_more::{Deref, DerefMut};
5use valence_entity::EntityLayerId;
6use valence_server::protocol::packets::play::boss_bar_s2c::{
7 BossBarAction, BossBarColor, BossBarDivision, BossBarFlags,
8};
9use valence_server::{Text, UniqueId};
10
11#[derive(Bundle, Default)]
13pub struct BossBarBundle {
14 pub id: UniqueId,
15 pub title: BossBarTitle,
16 pub health: BossBarHealth,
17 pub style: BossBarStyle,
18 pub flags: BossBarFlags,
19 pub layer: EntityLayerId,
20}
21
22#[derive(Component, Clone, Default, Deref, DerefMut)]
24pub struct BossBarTitle(pub Text);
25
26impl ToPacketAction for BossBarTitle {
27 fn to_packet_action(&self) -> BossBarAction {
28 BossBarAction::UpdateTitle(Cow::Borrowed(&self.0))
29 }
30}
31
32#[derive(Component, Default, Deref, DerefMut)]
34pub struct BossBarHealth(pub f32);
35
36impl ToPacketAction for BossBarHealth {
37 fn to_packet_action(&self) -> BossBarAction {
38 BossBarAction::UpdateHealth(self.0)
39 }
40}
41
42#[derive(Component, Default)]
45pub struct BossBarStyle {
46 pub color: BossBarColor,
47 pub division: BossBarDivision,
48}
49
50impl ToPacketAction for BossBarStyle {
51 fn to_packet_action(&self) -> BossBarAction {
52 BossBarAction::UpdateStyle(self.color, self.division)
53 }
54}
55
56impl ToPacketAction for BossBarFlags {
57 fn to_packet_action(&self) -> BossBarAction {
58 BossBarAction::UpdateFlags(*self)
59 }
60}
61
62pub(crate) trait ToPacketAction {
64 fn to_packet_action(&self) -> BossBarAction;
65}