Skip to main content

steel_registry/
menu_type.rs

1use rustc_hash::FxHashMap;
2use steel_utils::Identifier;
3
4/// Represents a menu type (container/GUI type) in Minecraft.
5/// Menu types define the different inventory interfaces available,
6/// such as chests, furnaces, anvils, etc.
7#[derive(Debug)]
8pub struct MenuType {
9    pub key: Identifier,
10}
11
12pub type MenuTypeRef = &'static MenuType;
13
14pub struct MenuTypeRegistry {
15    menu_types_by_id: Vec<MenuTypeRef>,
16    menu_types_by_key: FxHashMap<Identifier, usize>,
17    allows_registering: bool,
18}
19
20impl MenuTypeRegistry {
21    #[must_use]
22    pub fn new() -> Self {
23        Self {
24            menu_types_by_id: Vec::new(),
25            menu_types_by_key: FxHashMap::default(),
26            allows_registering: true,
27        }
28    }
29}
30
31crate::impl_standard_methods!(
32    MenuTypeRegistry,
33    MenuTypeRef,
34    menu_types_by_id,
35    menu_types_by_key,
36    allows_registering
37);
38
39crate::impl_registry!(
40    MenuTypeRegistry,
41    MenuType,
42    menu_types_by_id,
43    menu_types_by_key,
44    menu_types
45);