package de.ellpeck.actuallyadditions.mod.blocks.base; import net.minecraft.core.Direction; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.DirectionProperty; /** * Wrapper for Fully Direction block states extending from our base blocks. It's not super nice but it'll do. */ public abstract class FullyDirectionalBlock extends BlockBase { public static final DirectionProperty FACING = BlockStateProperties.FACING; public FullyDirectionalBlock(Properties properties) { super(properties); this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH)); } @Override public BlockState getStateForPlacement(BlockPlaceContext context) { return this.defaultBlockState().setValue(FACING, context.getNearestLookingDirection().getOpposite()); } public BlockState getBaseConstructorState() { return this.stateDefinition.getOwner().defaultBlockState().setValue(FACING, Direction.NORTH); } @Override public BlockState rotate(BlockState pState, Rotation pRotation) { return pState.setValue(FACING, pRotation.rotate(pState.getValue(FACING))); } @Override public BlockState mirror(BlockState pState, Mirror pMirror) { return pState.rotate(pMirror.getRotation(pState.getValue(FACING))); } @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(FACING); } public abstract static class Container extends BlockContainerBase { public static final DirectionProperty FACING = BlockStateProperties.FACING; public Container(Properties properties) { super(properties); this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH)); } @Override public BlockState getStateForPlacement(BlockPlaceContext context) { return this.defaultBlockState().setValue(FACING, context.getNearestLookingDirection().getOpposite()); } @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(FACING); } } }