Skip to main content

steel_core/behavior/blocks/building/
glazed_terracotta_block.rs

1//! Glazed terracotta block behavior.
2
3use steel_macros::block_behavior;
4use steel_registry::blocks::BlockRef;
5use steel_registry::blocks::block_state_ext::BlockStateExt;
6use steel_registry::blocks::properties::{BlockStateProperties, Direction, EnumProperty};
7use steel_utils::BlockStateId;
8
9use crate::behavior::block::BlockBehavior;
10use crate::behavior::context::BlockPlaceContext;
11
12/// Vanilla `GlazedTerracottaBlock` placement facing.
13#[block_behavior]
14pub struct GlazedTerracottaBlock {
15    block: BlockRef,
16}
17
18const HORIZONTAL_FACING: &EnumProperty<Direction> = &BlockStateProperties::HORIZONTAL_FACING;
19
20impl GlazedTerracottaBlock {
21    /// Creates a new glazed terracotta block behavior.
22    #[must_use]
23    pub const fn new(block: BlockRef) -> Self {
24        Self { block }
25    }
26}
27
28impl BlockBehavior for GlazedTerracottaBlock {
29    fn get_state_for_placement(&self, context: &BlockPlaceContext<'_>) -> Option<BlockStateId> {
30        Some(
31            self.block
32                .default_state()
33                .set_value(HORIZONTAL_FACING, context.horizontal_direction().opposite()),
34        )
35    }
36}