Make block state macro comptime-again
This commit is contained in:
parent
c3dcec2dde
commit
7300bda967
@ -238,24 +238,61 @@ pub fn block_state_impl(item: TokenStream) -> TokenStream {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let id = state.id;
|
let id = state.id;
|
||||||
let category_name = block_info.definition.category.clone();
|
|
||||||
|
|
||||||
if std::env::var("CARGO_PKG_NAME").unwrap() == "pumpkin-world" {
|
if std::env::var("CARGO_PKG_NAME").unwrap() == "pumpkin-world" {
|
||||||
quote! {
|
let category_name: proc_macro2::TokenStream = format!(
|
||||||
crate::block::block_state::BlockState::new_unchecked(
|
"crate::block::BlockCategory::{}",
|
||||||
#id as u16,
|
&pascal_case(
|
||||||
crate::block::Block::from_registry_id(#block_name),
|
&block_info
|
||||||
crate::block::BlockCategory::from_registry_id(#category_name),
|
.definition
|
||||||
|
.category
|
||||||
|
.split_once(':')
|
||||||
|
.expect("Bad minecraft id")
|
||||||
|
.1,
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
.parse()
|
||||||
|
.unwrap();
|
||||||
|
let block_name: proc_macro2::TokenStream = format!(
|
||||||
|
"crate::block::Block::{}",
|
||||||
|
&pascal_case(&block_name.split_once(':').expect("Bad minecraft id").1,)
|
||||||
|
)
|
||||||
|
.parse()
|
||||||
|
.unwrap();
|
||||||
|
quote! {
|
||||||
|
crate::block::BlockState {
|
||||||
|
state_id: #id as u16,
|
||||||
|
category: #category_name,
|
||||||
|
block: #block_name,
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
.into()
|
||||||
} else {
|
} else {
|
||||||
quote! {
|
let category_name: proc_macro2::TokenStream = format!(
|
||||||
pumpkin_world::block::block_id::BlockStateId::new_unchecked(
|
"pumpkin_world::block::BlockCategory::{}",
|
||||||
#id as u16,
|
&pascal_case(
|
||||||
pumpkin_world::block::Block::from_registry_id(#block_name),
|
&block_info
|
||||||
pumpkin_world::block::BlockCategory::from_registry_id(#category_name),
|
.definition
|
||||||
|
.category
|
||||||
|
.split_once(':')
|
||||||
|
.expect("Bad minecraft id")
|
||||||
|
.1,
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
.parse()
|
||||||
|
.unwrap();
|
||||||
|
let block_name: proc_macro2::TokenStream = format!(
|
||||||
|
"pumpkin_world::block::Block::{}",
|
||||||
|
&pascal_case(&block_name.split_once(':').expect("Bad minecraft id").1,)
|
||||||
|
)
|
||||||
|
.parse()
|
||||||
|
.unwrap();
|
||||||
|
quote! {
|
||||||
|
pumpkin_world::block::BlockState {
|
||||||
|
state_id: #id as u16,
|
||||||
|
category: #category_name,
|
||||||
|
block: #block_name,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.into()
|
.into()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -6,9 +6,9 @@ use super::block_registry::{Block, BlockCategory, BLOCKS};
|
|||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct BlockState {
|
pub struct BlockState {
|
||||||
state_id: u16,
|
pub state_id: u16,
|
||||||
block: Block,
|
pub block: Block,
|
||||||
category: BlockCategory,
|
pub category: BlockCategory,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BlockState {
|
impl BlockState {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user