aboutsummaryrefslogtreecommitdiff
path: root/azalea-protocol/src/packets/common.rs
diff options
context:
space:
mode:
Diffstat (limited to 'azalea-protocol/src/packets/common.rs')
-rw-r--r--azalea-protocol/src/packets/common.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/azalea-protocol/src/packets/common.rs b/azalea-protocol/src/packets/common.rs
index fc78cd7a..ab9c46b4 100644
--- a/azalea-protocol/src/packets/common.rs
+++ b/azalea-protocol/src/packets/common.rs
@@ -1,9 +1,12 @@
use azalea_buf::AzBuf;
use azalea_core::{
+ data_registry::ResolvableDataRegistry,
game_type::{GameMode, OptionalGameType},
position::GlobalPos,
+ registry_holder::{DimensionTypeElement, RegistryHolder},
resource_location::ResourceLocation,
};
+use tracing::error;
#[derive(Clone, Debug, AzBuf)]
pub struct CommonPlayerSpawnInfo {
@@ -20,3 +23,29 @@ pub struct CommonPlayerSpawnInfo {
#[var]
pub sea_level: i32,
}
+impl CommonPlayerSpawnInfo {
+ pub fn dimension_type(
+ &self,
+ registry_holder: &RegistryHolder,
+ ) -> Option<(ResourceLocation, DimensionTypeElement)> {
+ let dimension_res = self
+ .dimension_type
+ .resolve_and_deserialize::<DimensionTypeElement>(registry_holder);
+ let Some(dimension_res) = dimension_res else {
+ error!("Couldn't resolve dimension_type {:?}", self.dimension_type);
+ return None;
+ };
+ let (dimension_type, dimension_data) = match dimension_res {
+ Ok(d) => d,
+ Err(err) => {
+ error!(
+ "Couldn't deserialize dimension_type {:?}: {err:?}",
+ self.dimension_type
+ );
+ return None;
+ }
+ };
+
+ Some((dimension_type, dimension_data))
+ }
+}