valence_protocol/packets/play/
boss_bar_s2c.rs

1use std::borrow::Cow;
2
3use bevy_ecs::prelude::Component;
4use bitfield_struct::bitfield;
5use uuid::Uuid;
6use valence_text::Text;
7
8use crate::{Decode, Encode, Packet};
9
10#[derive(Clone, Debug, Encode, Decode, Packet)]
11pub struct BossBarS2c<'a> {
12    pub id: Uuid,
13    pub action: BossBarAction<'a>,
14}
15
16#[derive(Clone, PartialEq, Debug, Encode, Decode)]
17pub enum BossBarAction<'a> {
18    Add {
19        title: Cow<'a, Text>,
20        health: f32,
21        color: BossBarColor,
22        division: BossBarDivision,
23        flags: BossBarFlags,
24    },
25    Remove,
26    UpdateHealth(f32),
27    UpdateTitle(Cow<'a, Text>),
28    UpdateStyle(BossBarColor, BossBarDivision),
29    UpdateFlags(BossBarFlags),
30}
31
32/// The color of a boss bar.
33#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, Default)]
34pub enum BossBarColor {
35    #[default]
36    Pink,
37    Blue,
38    Red,
39    Green,
40    Yellow,
41    Purple,
42    White,
43}
44
45/// The division of a boss bar.
46#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, Default)]
47pub enum BossBarDivision {
48    #[default]
49    NoDivision,
50    SixNotches,
51    TenNotches,
52    TwelveNotches,
53    TwentyNotches,
54}
55
56/// The flags of a boss bar (darken sky, dragon bar, create fog).
57#[bitfield(u8)]
58#[derive(PartialEq, Eq, Encode, Decode, Component)]
59pub struct BossBarFlags {
60    pub darken_sky: bool,
61    pub dragon_bar: bool,
62    pub create_fog: bool,
63    #[bits(5)]
64    _pad: u8,
65}