azalea_protocol/packets/game/
c_set_objective.rs1use std::io::{Cursor, Write};
2
3use azalea_buf::{AzBuf, AzaleaRead, AzaleaWrite};
4use azalea_chat::{numbers::NumberFormat, FormattedText};
5use azalea_core::objectives::ObjectiveCriteria;
6use azalea_protocol_macros::ClientboundGamePacket;
7
8#[derive(Clone, Debug, AzBuf, ClientboundGamePacket)]
9pub struct ClientboundSetObjective {
10 pub objective_name: String,
11 pub method: Method,
12}
13
14#[derive(Clone, Copy, Debug, AzBuf)]
15pub enum MethodKind {
16 Add,
17 Remove,
18 Change,
19}
20
21#[derive(Clone, Debug)]
22pub enum Method {
23 Add {
24 display_name: FormattedText,
25 render_type: ObjectiveCriteria,
26 number_format: NumberFormat,
27 },
28 Remove,
29 Change {
30 display_name: FormattedText,
31 render_type: ObjectiveCriteria,
32 number_format: NumberFormat,
33 },
34}
35
36impl AzaleaRead for Method {
37 fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, azalea_buf::BufReadError> {
38 let kind = MethodKind::azalea_read(buf)?;
39 match kind {
40 MethodKind::Add => Ok(Method::Add {
41 display_name: FormattedText::azalea_read(buf)?,
42 render_type: ObjectiveCriteria::azalea_read(buf)?,
43 number_format: NumberFormat::azalea_read(buf)?,
44 }),
45 MethodKind::Remove => Ok(Method::Remove),
46 MethodKind::Change => Ok(Method::Change {
47 display_name: FormattedText::azalea_read(buf)?,
48 render_type: ObjectiveCriteria::azalea_read(buf)?,
49 number_format: NumberFormat::azalea_read(buf)?,
50 }),
51 }
52 }
53}
54
55impl AzaleaWrite for Method {
56 fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
57 match self {
58 Method::Add {
59 display_name,
60 render_type,
61 number_format,
62 } => {
63 MethodKind::Add.azalea_write(buf)?;
64 display_name.azalea_write(buf)?;
65 render_type.azalea_write(buf)?;
66 number_format.azalea_write(buf)?;
67 }
68 Method::Remove => MethodKind::Remove.azalea_write(buf)?,
69 Method::Change {
70 display_name,
71 render_type,
72 number_format,
73 } => {
74 MethodKind::Change.azalea_write(buf)?;
75 display_name.azalea_write(buf)?;
76 render_type.azalea_write(buf)?;
77 number_format.azalea_write(buf)?;
78 }
79 }
80 Ok(())
81 }
82}