diff options
| author | mat <27899617+mat-1@users.noreply.github.com> | 2023-09-21 11:16:29 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-21 11:16:29 -0500 |
| commit | 7b3e2e4bf793466a351510c7fbbd08234e93bb0e (patch) | |
| tree | 7177a919de9982d9e3c7f36a76d2025696f465b6 /azalea-client/src/received_registries.rs | |
| parent | 83cce236145cdab1872a472a70943b669a880965 (diff) | |
| download | azalea-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.rs | 33 |
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")) + } +} |
