Запрос “как сделать так чтобы игрок не мог двигаться” обычно означает одно из двух:
- вы хотите обездвижить игрока в конкретный момент (режим “stun”, арена, допрос, кат-сцена);
- вы хотите запретить ввод игрока и не дать ему двигаться даже при лаге или попытках обойти эффект.

В ванильном Minecraft игрок управляет движением через клиент. Поэтому “отключить движение” на сервере одним флагом часто не хватает: клиент продолжает посылать перемещения, а сервер вынужден принимать или корректировать их.

Ниже разберем рабочие подходы, в зависимости от того, что именно вы делаете: плагин (Spigot/Paper), мод (Forge/Fabric) или чистая механика через эффекты.


Вариант 1. Плагин для сервера (Spigot/Paper): заморозка с телепортом каждый тик

В плагинах чаще всего добиваются результата не “математикой скорости”, а постоянным возвратом игрока в фиксированную точку и перехватом прыжка. Это прямо соответствует подходу “запоминать позицию и каждый тик возвращать обратно”, о котором пишут в моддинговых обсуждениях (и он же лучше всего переносится на плагины).

Что сделать

  1. При активации заморозки сохранить:
  2. позицию (x, y, z),
  3. поворот (yaw, pitch) при необходимости,
  4. состояние (на выживание/креатив не влияет, но важно сохранить режим полета при использовании элитр/команд).
  5. На каждом тике:
  6. телепортировать игрока на сохраненную точку,
  7. сбрасывать движение (velocity) и ускорение,
  8. запрещать прыжок.
  9. По окончании заморозки убрать задачу и вернуть контроль.

Пример логики (псевдокод)

  • включить режим freeze для игрока
  • каждые 50 мс:
  • setVelocity(0,0,0)
  • teleport(player, lockedLocation, lockedYawPitch)

Типичные ошибки

  • Пытаться “выключить бег” методами вроде переключения sprinting. Это влияет только на визуальную/внутреннюю часть, но клиент может продолжать отправлять перемещения. В обсуждениях на Spigot видно, что попытки через setSprinting(false) в некоторых случаях не решают задачу.
  • Останавливать только скорость через motion, но не делать “возврат на позицию”. При этом игрок все равно “уползает” из-за попыток ввода.

Вариант 2. Мод на Forge/Fabric: полный контроль требует перехвата и часто клиентской части

Если вы делаете мод для конкретной версии игры, и цель - “игрок не мог двигаться”, важно понимать: серверные изменения сущности иногда недостаточны, потому что клиент продолжает пытаться изменить положение. На форумах по моддингу отмечают, что простой эффект stun может не подойти по требованиям, а чтобы реально запретить изменение моушена, надо:
- либо каждый тик возвращать сущность в нужное положение,
- либо “вклиниться в ванилла код” и блокировать попытки менять motion, а для игроков - иногда еще и со стороны клиента.

Практичный путь для модов

  • Реализуйте “freeze” как:
  • фиксацию позиции,
  • обнуление motion,
  • и запрет прыжка на уровне логики игрока.
  • Если игрок все равно двигается по координатам, проблема обычно в том, что вы меняете motion, но не останавливаете повторяющуюся попытку клиента. Тогда помогает именно возврат на позицию на каждом тике.

Вариант 3. Использовать эффекты ваниллы: как максимум - сильно замедлить, но не гарантировать полный запрет

Эффекты вроде замедления или им подобные уменьшают скорость, но не дают надежного “стопа” при активном вводе игрока. Подходы в духе “дать высокий уровень замедления и отрубить скорость” часто не приводят к 100-процентному обездвиживанию, потому что игрок может продолжать пытаться перемещаться.

Итог: ванильные эффекты подходят, чтобы сделать движение неудобным, но не как способ полностью запретить движение.


Чек-лист: как добиться именно “не мог двигаться”

Требование Что сделать на практике Почему это работает
Игрок не должен смещаться по X/Z Запоминать позицию и возвращать на нее каждый тик Клиент может продолжать пытаться двигаться, возврат “перебивает” это
Игрок не должен разгоняться Обнулять velocity и/или motion каждый тик Сбрасывает накопленные скорости от ввода
Игрок не должен прыгать Перехватывать прыжок/флаг прыжка в обработчиках Иначе даже при стопе он может изменить вертикаль
Эффект должен быть стабильным при лаге Применять фиксацию регулярно, а не однократно При задержках клиент быстрее успевает “настроить” движение
Не ломать режимы игры Продумать поведение в креативе/полете/состояниях В разных режимах действуют разные правила перемещения

Что выбрать по ситуации

Сценарий Рекомендуемый путь
Сервер Paper/Spigot, нужен стоп для игрока в игре Плагин с фиксацией позиции на тиках + запрет прыжка
Мод на Forge/Fabric, нужен абсолютный контроль Позиционная фиксация каждый тик, затем при необходимости более глубокий перехват
Нужен “чтобы бегал меньше” Эффекты и замедление, без гарантии полного запрета

Полезные ссылки

  • https://rubukkit.org/threads/ostanovit-igroka.139323/
  • https://spigotmc.ru/threads/zapretit-beg.3266/
  • https://forum.mcmodding.ru/threads/zapret-na-dvizhenija-igroka.29974/
  • https://rubukkit.org/threads/kak-otkljuchit-dvizhenija-igroka-kogda-k-igroku-podxodit-blizo-drugoj-igrok.138037/
  • https://www.spigotmc.org/wiki/working-with-plugins/
  • https://docs.papermc.io/