azalea_protocol/packets/
common.rs1use azalea_buf::AzBuf;
2use azalea_core::{
3 data_registry::ResolvableDataRegistry,
4 game_type::{GameMode, OptionalGameType},
5 position::GlobalPos,
6 registry_holder::{DimensionTypeElement, RegistryHolder},
7 resource_location::ResourceLocation,
8};
9use tracing::error;
10
11#[derive(Clone, Debug, AzBuf)]
12pub struct CommonPlayerSpawnInfo {
13 pub dimension_type: azalea_registry::DimensionType,
14 pub dimension: ResourceLocation,
15 pub seed: i64,
16 pub game_type: GameMode,
17 pub previous_game_type: OptionalGameType,
18 pub is_debug: bool,
19 pub is_flat: bool,
20 pub last_death_location: Option<GlobalPos>,
21 #[var]
22 pub portal_cooldown: u32,
23 #[var]
24 pub sea_level: i32,
25}
26impl CommonPlayerSpawnInfo {
27 pub fn dimension_type(
28 &self,
29 registry_holder: &RegistryHolder,
30 ) -> Option<(ResourceLocation, DimensionTypeElement)> {
31 let dimension_res = self
32 .dimension_type
33 .resolve_and_deserialize::<DimensionTypeElement>(registry_holder);
34 let Some(dimension_res) = dimension_res else {
35 error!("Couldn't resolve dimension_type {:?}", self.dimension_type);
36 return None;
37 };
38 let (dimension_type, dimension_data) = match dimension_res {
39 Ok(d) => d,
40 Err(err) => {
41 error!(
42 "Couldn't deserialize dimension_type {:?}: {err:?}",
43 self.dimension_type
44 );
45 return None;
46 }
47 };
48
49 Some((dimension_type, dimension_data))
50 }
51}