steel_registry/
banner_pattern.rs1use rustc_hash::FxHashMap;
2use simdnbt::ToNbtTag;
3use simdnbt::owned::NbtTag;
4use steel_utils::Identifier;
5
6#[derive(Debug)]
8pub struct BannerPattern {
9 pub key: Identifier,
10 pub asset_id: Identifier,
11 pub translation_key: &'static str,
12}
13
14impl ToNbtTag for &BannerPattern {
15 fn to_nbt_tag(self) -> NbtTag {
16 use simdnbt::owned::{NbtCompound, NbtTag};
17 let mut compound = NbtCompound::new();
18 let asset_id = self.asset_id.to_string();
19 compound.insert("asset_id", asset_id.as_str());
20 compound.insert("translation_key", self.translation_key);
21 NbtTag::Compound(compound)
22 }
23}
24
25pub type BannerPatternRef = &'static BannerPattern;
26
27pub struct BannerPatternRegistry {
28 banner_patterns_by_id: Vec<BannerPatternRef>,
29 banner_patterns_by_key: FxHashMap<Identifier, usize>,
30 tags: FxHashMap<Identifier, Vec<Identifier>>,
31 allows_registering: bool,
32}
33
34impl BannerPatternRegistry {
35 #[must_use]
36 pub fn new() -> Self {
37 Self {
38 banner_patterns_by_id: Vec::new(),
39 banner_patterns_by_key: FxHashMap::default(),
40 tags: FxHashMap::default(),
41 allows_registering: true,
42 }
43 }
44}
45
46crate::impl_standard_methods!(
47 BannerPatternRegistry,
48 BannerPatternRef,
49 banner_patterns_by_id,
50 banner_patterns_by_key,
51 allows_registering
52);
53
54crate::impl_registry!(
55 BannerPatternRegistry,
56 BannerPattern,
57 banner_patterns_by_id,
58 banner_patterns_by_key,
59 banner_patterns
60);
61
62crate::impl_tagged_registry!(
63 BannerPatternRegistry,
64 banner_patterns_by_key,
65 "banner pattern"
66);