говорил, что без телепортов, но у меня есть отличный вариант, который работает довольно плавно. для этого понадобится немного потрудиться, но это того стоит.
1. для начала поставь цикличный командный блок на выдачу тега, (/tag (@a) [r=X,X=X,Y=X,Z=X] add XXX) (где иксы ставишь свое что то, кроме второго икса, это селектор координаты Х)
2. поставь второй цикличный командный блок, который будет убирать тег (/tag (@a) [rm=X,X=X,Y=X,Z=X] remove XXX) (тут пиши все тоже самое, что и в 1 пункте
3. проверь направление, куда надо телепортировать, тобишь надо проверить, увеличится или уменьшится координата при окончании отталкивания
4. еще один цикличный блок для уже самого отталкивания-телепорта (/execute as (@a) [tag=XXX] at (@s) run tp (@s) ~~~ facing X X X (поставь предположительные координаты "заблокированного прохода," или куда сам захочешь, тут по желанию.
5. полировка.
5.1 поставь r на минимальное значение, при котором невозможно будет пройти через "проход" без отталкивания
5.2 поставь rm на то же значение, но чуть побольше, так при попытке пройти игрок будет проходить пару блоков в проход, а потом его оттолкнет чуть дальше.
5.4 пометка, стоит поставить координаты телепорта как можно меньше (например 0.01), чем меньше значение, тем плавнее будет отталкивание
вроде все. возможно я где то ошибся, но вроде нет. попробуй как нибудь, если работает как задумано, то тебя приятно удивит результат. если будут вопросы, то я постараюсь ответить (не обещаю).