azalea_protocol/packets/game/
c_set_objective.rs1use std::io::{self, Cursor, Write};
2
3use azalea_buf::AzBuf;
4use azalea_chat::{FormattedText, numbers::NumberFormat};
5use azalea_core::objectives::ObjectiveCriteria;
6use azalea_protocol_macros::ClientboundGamePacket;
7
8#[derive(AzBuf, ClientboundGamePacket, Clone, Debug, PartialEq)]
9pub struct ClientboundSetObjective {
10 pub objective_name: String,
11 pub method: Method,
12}
13
14#[derive(AzBuf, Clone, Copy, Debug, PartialEq)]
15pub enum MethodKind {
16 Add,
17 Remove,
18 Change,
19}
20
21#[derive(Clone, Debug, PartialEq)]
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 AzBuf 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 fn azalea_write(&self, buf: &mut impl Write) -> io::Result<()> {
54 match self {
55 Method::Add {
56 display_name,
57 render_type,
58 number_format,
59 } => {
60 MethodKind::Add.azalea_write(buf)?;
61 display_name.azalea_write(buf)?;
62 render_type.azalea_write(buf)?;
63 number_format.azalea_write(buf)?;
64 }
65 Method::Remove => MethodKind::Remove.azalea_write(buf)?,
66 Method::Change {
67 display_name,
68 render_type,
69 number_format,
70 } => {
71 MethodKind::Change.azalea_write(buf)?;
72 display_name.azalea_write(buf)?;
73 render_type.azalea_write(buf)?;
74 number_format.azalea_write(buf)?;
75 }
76 }
77 Ok(())
78 }
79}