Проблемы с перемещением сущности

Версия Minecraft
1.16.4
API
Forge
Пытаюсь перемещать одну сущность следом за другой. Проблема состоит в том, что сущность, которую нужно переместить, двигается рывками. Причину я найти не смог. Получилось только увеличить частоту обновления путем добавления в регистр типа сущности вызова .setUpdateInterval(1). Но это не помогло полностью избавиться от рывков. Если кто то знает причину, буду очень благодарен за подсказку.

Код, отвечающий за перемещение:
Java:
@Override
    public void tick()
    {
        if(!world.isRemote)
        {
            if (this.getParent() != null)
            {
                updatePosition();
            }
        }
        super.tick();
    }

    public void updatePosition()
    {
        LivingEntity parent = getParent();
        this.setPosition(
                parent.getPosX(),
                parent.getPosY() + this.yOffset,
                parent.getPosZ()
        );
        this.markVelocityChanged();
    }
 
7,099
324
1,510
Кроме установки позиции нужно устанавливать prev-переменные позиции, чтобы на клиенте можно было интерполировать движение между тиками
 
Я переписал метод обновления позиции, но это не дало результата.
Java:
public void updatePosition()
    {
        LivingEntity parent = getParent();
        this.setPosition(
                parent.getPosX(),
                parent.getPosY() + this.yOffset,
                parent.getPosZ()
        this.prevPosX = parent.prevPosX;
        this.prevPosY = parent.prevPosY + this.yOffset;
        this.prevPosZ = parent.prevPosZ;

        this.markVelocityChanged();
    }
 
7,099
324
1,510
Родительская сущность не имеет никаких переопределений, связанных с передвижением.
После переделки метода ничего не поменялось
Java:
public void updatePosition()
    {
        LivingEntity parent = getParent();
        this.prevPosX = getPosX();
        this.prevPosY = getPosY();
        this.prevPosZ = getPosZ();
        this.setPosition(
                parent.getPosX(),
                parent.getPosY() + this.yOffset,
                parent.getPosZ()

        this.markVelocityChanged();
    }
 
7,099
324
1,510
Проверь дебагом, правильные ли значения prevPosX и posX попадают в рендер сущности
 
7,099
324
1,510
Ок, аналогично проверь, так ли оно с серверной стороны(в одиночной игре тоже есть серверная сторона)

Если там все правильно - то проблема в синхронизации с клиентом.
Если там не правильно - то проблема в обновлении prevPos и pos
 
Переработал код перемещения. Решил сделать его по примеру ванильного - теперь родительская сущность сама отдает команды на перемещение целевой сущности. Координаты теперь меняются верно и на сервере, и на клиенте. Но проблема осталась - движения все еще происходят рывками.

Java:
    private void movePart(EntityPart part)
    {
        part.prevPosX = part.getPosX();
        part.prevPosY = part.getPosY();
        part.prevPosZ = part.getPosZ();
        part.lastTickPosX = part.getPosX();
        part.lastTickPosY = part.getPosY();
        part.lastTickPosZ = part.getPosZ();

        part.setPosition(
                this.getPosX(),
                this.getPosY() + 1.3f,
                this.getPosZ()
        );

        System.out.println(part.prevPosX + "___" + part.getPosX());
    }

    @Override
    public void tick()
    {
        super.tick();

        for (EntityPart part : bodyParts)
        {
            if(part != null)
            {
                movePart(part);
            }
        }
    }
 
Я попробовал перемещать сущность просто по оси х через ее собственный метод tick(). И она двигалась плавно. Попробовал сделать то же самое из метода tick() класса родителя - началось дерганье. Похоже, что, при любых попытках связать передвижение этих двух сущностей, передвигаемая сущность-часть начинает двигаться прерывисто.
 
Я двигал ее в своем классе, просто методом
Java:
setPosition(getPosX() + 0.1f, getPosY(), getPosZ());
Я сделал это только для эксперимента. Само по себе перемещение работает нормально и я ничего не ломал). Проблема именно в синхронизации движения с другой сущностью.
 
Сверху