aboutsummaryrefslogtreecommitdiff
path: root/azalea-client/src/received_registries.rs
diff options
context:
space:
mode:
authormat <27899617+mat-1@users.noreply.github.com>2023-09-21 11:16:29 -0500
committerGitHub <noreply@github.com>2023-09-21 11:16:29 -0500
commit7b3e2e4bf793466a351510c7fbbd08234e93bb0e (patch)
tree7177a919de9982d9e3c7f36a76d2025696f465b6 /azalea-client/src/received_registries.rs
parent83cce236145cdab1872a472a70943b669a880965 (diff)
downloadazalea-drasl-7b3e2e4bf793466a351510c7fbbd08234e93bb0e.tar.xz
1.20.2 (#99)
* add configuration state * start updating to 23w31a * implement a bit more of 23w31a * chunk batching * start adding configuration state * ioasfhjgsd * almost works * configuration state mostly implemented * handle other packets in configuration state and fix keepalive * cleanup, fix warnings * 23w32a * fix some doctests * 23w33a * 23w35a * 1.20.2-pre2 * fix system conflicts * 1.20.2-pre4 * make tests compile * tests pass * 1.20.2-rc2 * 1.20.2 * Revert "1.20.2" This reverts commit dd152fd265332ead333c919e585ded6d609d7468. * didn't mean to commit that code --------- Co-authored-by: mat <git@matdoes.dev>
Diffstat (limited to 'azalea-client/src/received_registries.rs')
-rw-r--r--azalea-client/src/received_registries.rs33
1 files changed, 27 insertions, 6 deletions
diff --git a/azalea-client/src/received_registries.rs b/azalea-client/src/received_registries.rs
index 845527ae..024f5222 100644
--- a/azalea-client/src/received_registries.rs
+++ b/azalea-client/src/received_registries.rs
@@ -1,7 +1,28 @@
-use azalea_protocol::packets::game::clientbound_login_packet::registry::RegistryRoot;
-use bevy_ecs::component::Component;
-use derive_more::Deref;
+use std::collections::HashMap;
-/// The registries that the server sent us on login.
-#[derive(Clone, Debug, Component, Deref)]
-pub struct ReceivedRegistries(pub RegistryRoot);
+use azalea_core::ResourceLocation;
+use azalea_nbt::Nbt;
+use azalea_protocol::packets::configuration::clientbound_registry_data_packet::registry::{
+ DimensionTypeElement, RegistryType,
+};
+use bevy_ecs::prelude::*;
+use serde::de::DeserializeOwned;
+
+/// The registries that were sent to us during the configuration state.
+#[derive(Default, Component, Clone)]
+pub struct ReceivedRegistries {
+ pub registries: HashMap<ResourceLocation, Nbt>,
+}
+
+impl ReceivedRegistries {
+ fn get<T: DeserializeOwned>(&self, name: &ResourceLocation) -> Option<T> {
+ let nbt = self.registries.get(name)?;
+ serde_json::from_value(serde_json::to_value(nbt).ok()?).ok()
+ }
+
+ /// Get the dimension type registry, or `None` if it doesn't exist. You
+ /// should do some type of error handling if this returns `None`.
+ pub fn dimension_type(&self) -> Option<RegistryType<DimensionTypeElement>> {
+ self.get(&ResourceLocation::new("minecraft:dimension_type"))
+ }
+}