2 use mt_ser::{DeserializeError, SerializeError};
4 #[mt_derive(to = "clt", repr = "u8", enumset)]
5 pub enum MapBlockFlag {
12 pub const ALWAYS_LIT_FROM: u16 = 0xf000;
14 pub const CONTENT_UNKNOWN: u16 = 125;
15 pub const CONTENT_AIR: u16 = 126;
16 pub const CONTENT_IGNORE: u16 = 127;
18 #[mt_derive(to = "clt")]
19 pub struct NodeMetaField {
25 #[mt_derive(to = "clt")]
28 fields: HashMap<String, NodeMetaField>,
33 pub struct NodeMetasLen;
35 impl MtCfg for NodeMetasLen {
36 type Len = <DefCfg as MtCfg>::Len;
37 type Inner = <DefCfg as MtCfg>::Inner;
39 fn write_len(len: usize, writer: &mut impl std::io::Write) -> Result<(), SerializeError> {
41 0u8.mt_serialize::<DefCfg>(writer)
43 2u8.mt_serialize::<DefCfg>(writer)?;
44 DefCfg::write_len(len, writer)
48 fn read_len(reader: &mut impl std::io::Read) -> Result<Self::Len, DeserializeError> {
49 match u8::mt_deserialize::<DefCfg>(reader)? {
51 2 => DefCfg::read_len(reader),
52 x => Err(DeserializeError::InvalidEnum("NodeMetasLen", Box::new(x))),
57 #[mt_derive(to = "clt")]
59 pub flags: EnumSet<MapBlockFlag>,
61 #[mt(const_before = "2u8")] // param0 size
62 #[mt(const_before = "2u8")] // param1 size + param2 size
63 #[serde(with = "serde_arrays")]
64 pub param_0: [u16; 4096],
65 #[serde(with = "serde_arrays")]
66 pub param_1: [u8; 4096],
67 #[serde(with = "serde_arrays")]
68 pub param_2: [u8; 4096],
69 #[mt(len = "NodeMetasLen")]
70 pub metas: HashMap<u16, NodeMeta>,