public class PlatingPressBlock extends HorizontalDirectionalBlock implements EntityBlock { public PlatingPressBlock(Properties properties) { super(properties); registerDefaultState(defaultBlockState().setValue(FACING, Direction.NORTH)); } @Override public BlockState getStateForPlacement(BlockPlaceContext context) { return defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()); } @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { return new PlatingPressBlockEntity(pos, state); } @Override public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult result) { if (!level.isClientSide && level.getBlockEntity(pos) instanceof final PlatingPressBlockEntity crafter) { MenuProvider containerProvider = createContainerProvider(level, pos); NetworkHooks.openGui((ServerPlayer) player, containerProvider, pos); } return InteractionResult.SUCCESS; } private MenuProvider createContainerProvider(Level worldIn, BlockPos pos) { return new MenuProvider() { @Override public TranslatableComponent getDisplayName() { return new TranslatableComponent("Plating Press"); } @Override public AbstractContainerMenu createMenu(int i, Inventory playerInventory, Player playerEntity) { return new PlatingPressContainer(i, worldIn, pos, playerInventory, playerEntity); } }; } @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { super.createBlockStateDefinition(builder); builder.add(FACING); } @Nullable @Override public BlockEntityTicker getTicker(Level world, BlockState state, BlockEntityType type) { return ((tickerWorld, pos, tickerState, blockEntity) -> PlatingPressBlockEntity.tick(tickerWorld, (PlatingPressBlockEntity) blockEntity)); } }