I have a  block that changes it's blockstate when you click on it with another copy of this block.
 
	I have a method for this and it works but I wonder if there are better ways of doing the exact same thing.
 
 public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit) {
        if (!pLevel.isClientSide){
            // check if player is holding a pot block
            // it is required to change the state "POTS" - the amount of pots that block contains
            // the amount of pots must not exeed 4 
            if (pHand == InteractionHand.MAIN_HAND && pPlayer.getMainHandItem().is((ModBlocks.LITTLE_POT.get().asItem())) && pState.getValue(POTS)<4) {
                // update block with new "POTS" state value
                pLevel.setBlock(pPos, pState.cycle(POTS), 3);
                // success
                return InteractionResult.CONSUME;
            }
            // otherwise fail
        }
        return  InteractionResult.FAIL;
    }
	Thank you.