azalea_protocol/packets/
common.rs

1use 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}