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::{RegistryHolder, dimension_type::DimensionKindElement},
7};
8use azalea_registry::{data::DimensionKind, identifier::Identifier};
9use tracing::error;
10
11#[derive(Clone, Debug, AzBuf, PartialEq)]
12pub struct CommonPlayerSpawnInfo {
13    pub dimension_type: DimensionKind,
14    pub dimension: Identifier,
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<'a>(
28        &self,
29        registry_holder: &'a RegistryHolder,
30    ) -> Option<(&'a Identifier, &'a DimensionKindElement)> {
31        let dimension_res = self.dimension_type.resolve(registry_holder);
32        let Some((dimension_type, dimension_data)) = dimension_res else {
33            error!("Couldn't resolve dimension_type {:?}", self.dimension_type);
34            return None;
35        };
36
37        Some((dimension_type, dimension_data))
38    }
39}