Pumpkin/pumpkin-protocol/src/client/play/c_boss_event.rs
2024-12-30 13:10:02 +01:00

61 lines
1.9 KiB
Rust

use crate::bytebuf::ByteBufMut;
use crate::client::play::bossevent_action::BosseventAction;
use crate::{ClientPacket, VarInt};
use bytes::BufMut;
use pumpkin_macros::client_packet;
#[client_packet("play:boss_event")]
pub struct CBossEvent<'a> {
pub uuid: &'a uuid::Uuid,
pub action: BosseventAction,
}
impl<'a> CBossEvent<'a> {
pub fn new(uuid: &'a uuid::Uuid, action: BosseventAction) -> Self {
Self { uuid, action }
}
}
impl ClientPacket for CBossEvent<'_> {
fn write(&self, bytebuf: &mut impl BufMut) {
bytebuf.put_uuid(self.uuid);
let action = &self.action;
match action {
BosseventAction::Add {
title,
health,
color,
division,
flags,
} => {
bytebuf.put_var_int(&VarInt::from(0u8));
bytebuf.put_slice(&title.encode());
bytebuf.put_f32(*health);
bytebuf.put_var_int(color);
bytebuf.put_var_int(division);
bytebuf.put_u8(*flags);
}
BosseventAction::Remove => {
bytebuf.put_var_int(&VarInt::from(1u8));
}
BosseventAction::UpdateHealth(health) => {
bytebuf.put_var_int(&VarInt::from(2u8));
bytebuf.put_f32(*health);
}
BosseventAction::UpdateTile(title) => {
bytebuf.put_var_int(&VarInt::from(3u8));
bytebuf.put_slice(&title.encode());
}
BosseventAction::UpdateStyle { color, dividers } => {
bytebuf.put_var_int(&VarInt::from(4u8));
bytebuf.put_var_int(color);
bytebuf.put_var_int(dividers);
}
BosseventAction::UpdateFlags(flags) => {
bytebuf.put_var_int(&VarInt::from(5u8));
bytebuf.put_u8(*flags);
}
}
}
}