use phf::phf_map;
pub struct BedrockBlockStateMapper;
impl BedrockBlockStateMapper {
pub fn java_to_bedrock(blockstate_str: &str) -> Option<&'static str> {
let normalized = Self::normalize_blockstate(blockstate_str);
BEDROCK_J2B_MAP.get(&normalized).copied()
}
pub fn bedrock_to_java(blockstate_str: &str) -> Option<&'static str> {
let normalized = Self::normalize_blockstate(blockstate_str);
BEDROCK_B2J_MAP.get(&normalized).copied()
}
fn normalize_blockstate(blockstate: &str) -> String {
if let Some(bracket_pos) = blockstate.find('[') {
let block_id = &blockstate[..bracket_pos];
let props_str = &blockstate[bracket_pos + 1..];
if props_str.ends_with(']') {
let props_str = &props_str[..props_str.len() - 1];
if props_str.is_empty() {
return format!("{}[]", block_id);
}
let mut props: Vec<&str> = props_str.split(',').collect();
props.sort();
format!("{}[{}]", block_id, props.join(","))
} else {
blockstate.to_string()
}
} else {
format!("{}[]", blockstate)
}
}
}
include!(concat!(env!("OUT_DIR"), "/bedrock_mappings.rs"));