nurtex_protocol/types/
game_event.rs1use std::io::{self, Cursor, Write};
2
3use nurtex_codec::{Buffer, VarInt};
4
5#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
7pub enum GameEvent {
8 NoRespawnBlockAvailable,
9 BeginRaining,
10 EndRaining,
11 ChangeGameMode,
12 WinGame,
13 DemoEvent,
14 ArrowHitPlayer,
15 RainLevelChange,
16 ThunderLevelChange,
17 PlayPufferfishStingSound,
18 PlayElderGuardianMobAppearance,
19 EnableRespawnScreen,
20 LimitedCrafting,
21 StartWaitingForLevelChunks,
22}
23
24impl Buffer for GameEvent {
25 fn read_buf(buffer: &mut Cursor<&[u8]>) -> Option<Self> {
26 let id = u8::read_buf(buffer)?;
27
28 match id {
29 0 => Some(Self::NoRespawnBlockAvailable),
30 1 => Some(Self::BeginRaining),
31 2 => Some(Self::EndRaining),
32 3 => Some(Self::ChangeGameMode),
33 4 => Some(Self::WinGame),
34 5 => Some(Self::DemoEvent),
35 6 => Some(Self::ArrowHitPlayer),
36 7 => Some(Self::RainLevelChange),
37 8 => Some(Self::ThunderLevelChange),
38 9 => Some(Self::PlayPufferfishStingSound),
39 10 => Some(Self::PlayElderGuardianMobAppearance),
40 11 => Some(Self::EnableRespawnScreen),
41 12 => Some(Self::LimitedCrafting),
42 13 => Some(Self::StartWaitingForLevelChunks),
43 _ => None,
44 }
45 }
46
47 fn write_buf(&self, buffer: &mut impl Write) -> io::Result<()> {
48 let id = match self {
49 Self::NoRespawnBlockAvailable => 0,
50 Self::BeginRaining => 1,
51 Self::EndRaining => 2,
52 Self::ChangeGameMode => 3,
53 Self::WinGame => 4,
54 Self::DemoEvent => 5,
55 Self::ArrowHitPlayer => 6,
56 Self::RainLevelChange => 7,
57 Self::ThunderLevelChange => 8,
58 Self::PlayPufferfishStingSound => 9,
59 Self::PlayElderGuardianMobAppearance => 10,
60 Self::EnableRespawnScreen => 11,
61 Self::LimitedCrafting => 12,
62 Self::StartWaitingForLevelChunks => 13,
63 };
64
65 id.write_varint(buffer)?;
66
67 Ok(())
68 }
69}