Skip to main content

steel_registry/
zombie_nautilus_variant.rs

1use crate::shared_structs::{SpawnConditionEntry, insert_spawn_conditions};
2use rustc_hash::FxHashMap;
3use simdnbt::ToNbtTag;
4use simdnbt::owned::NbtTag;
5use steel_utils::Identifier;
6
7/// Represents a full zombie nautilus variant definition from a data pack JSON file.
8#[derive(Debug)]
9pub struct ZombieNautilusVariant {
10    pub key: Identifier,
11    pub asset_id: Identifier,
12    pub model: Option<&'static str>,
13    pub spawn_conditions: &'static [SpawnConditionEntry],
14}
15
16impl ToNbtTag for &ZombieNautilusVariant {
17    fn to_nbt_tag(self) -> NbtTag {
18        use simdnbt::owned::{NbtCompound, NbtTag};
19        let mut compound = NbtCompound::new();
20        let asset_id = self.asset_id.to_string();
21        compound.insert("asset_id", asset_id.as_str());
22        compound.insert("baby_asset_id", asset_id.as_str());
23        if let Some(model) = self.model {
24            compound.insert("model", model);
25        }
26        insert_spawn_conditions(&mut compound, self.spawn_conditions);
27        NbtTag::Compound(compound)
28    }
29}
30
31pub type ZombieNautilusVariantRef = &'static ZombieNautilusVariant;
32
33pub struct ZombieNautilusVariantRegistry {
34    zombie_nautilus_variants_by_id: Vec<ZombieNautilusVariantRef>,
35    zombie_nautilus_variants_by_key: FxHashMap<Identifier, usize>,
36    allows_registering: bool,
37}
38
39impl ZombieNautilusVariantRegistry {
40    #[must_use]
41    pub fn new() -> Self {
42        Self {
43            zombie_nautilus_variants_by_id: Vec::new(),
44            zombie_nautilus_variants_by_key: FxHashMap::default(),
45            allows_registering: true,
46        }
47    }
48}
49
50crate::impl_standard_methods!(
51    ZombieNautilusVariantRegistry,
52    ZombieNautilusVariantRef,
53    zombie_nautilus_variants_by_id,
54    zombie_nautilus_variants_by_key,
55    allows_registering
56);
57
58crate::impl_registry!(
59    ZombieNautilusVariantRegistry,
60    ZombieNautilusVariant,
61    zombie_nautilus_variants_by_id,
62    zombie_nautilus_variants_by_key,
63    zombie_nautilus_variants
64);