Проблема с пакетами

Версия Minecraft
1.7.10
Надеюсь кто нибудь поможет. В общем если кратко то реализовывал перемещение райдера на энтити. Работало то хорошо но на сервере для остальных игроков позиция райдера не обновлялась. Если я правильно понял то что бы это было видно всем игрок при перемещении должен отправлять на сервер пакет со своим смещением. Теперь к делу...
Собсна класс с пакетом:
public class PacketRiderMove implements IMessage, IMessageHandler <PacketRiderMove, IMessage>
{
    private int id;
    private float posX, posZ;

    public PacketRiderMove(){}

    public PacketRiderMove(int id, float posX, float posZ)
    {
        this.id = id;
        this.posX = posX;
        this.posZ = posZ;
    }

    @Override
    public void toBytes(ByteBuf buffer)
    {
        buffer.writeInt(this.id);
        buffer.writeFloat(this.posX);
        buffer.writeFloat(this.posZ);
    }

    @Override
    public void fromBytes(ByteBuf buffer)
    {
        this.id = buffer.readInt();
        this.posX = buffer.readFloat();
        this.posZ = buffer.readFloat();
    }

    
    public IMessage onMessage(PacketRiderMove message, MessageContext ctx)
    {
        Entity entity;
        
        if (ctx.side.isServer())
        {
            entity = (ctx.getServerHandler()).playerEntity.worldObj.getEntityByID(message.id);
        }
        else
        {
            entity = (Minecraft.getMinecraft()).theWorld.getEntityByID(message.id);
        }
        
        if(entity instanceof EntityCarRider)
        {
            ((EntityCarRider)entity).setRelX(message.posX);
            ((EntityCarRider)entity).setRelZ(message.posZ);
        }
        
        if(ctx.side.isServer())
        {
            RTM.NETWORK_WRAPPER.sendToAll(message);
        }
        return null;
    }
    
}
Отправка смещений:
RTM.NETWORK_WRAPPER.sendToServer(new PacketRiderMove(this.getEntityId(), relX, relZ));
Регистрация:
NETWORK_WRAPPER.registerMessage(PacketRiderMove.class,        PacketRiderMove.class,    22, Side.SERVER);
        NETWORK_WRAPPER.registerMessage(PacketRiderMove.class,        PacketRiderMove.class,    23, Side.CLIENT);
Может я что то не так делаю? Наблюдается в итоге нормально перемещение до захода 2 игрока. Оно становиться дёрганным. А как только игрок садится на энтити наблюдается в консоли постоянно одна и таже ошибка. Заранее благодарен если чем то поможете.1565330933672.png
 
2,990
190
576
Это не ответ, но просто "совет".
Не нужно делать такие пакеты, когда ты отправляешь моба на какой-то pos, ибо это придет к пакет хаку, что ты можешь любого моба/игрока телепортить на любой pos.


Хороший код, ничего не скажешь..

~~~

Посмотри как сделана лодка.
В ней же есть все тоже самое, что тебе и нужно, разве нет?
 
Это не ответ, но просто "совет".
Не нужно делать такие пакеты, когда ты отправляешь моба на какой-то pos, ибо это придет к пакет хаку, что ты можешь любого моба/игрока телепортить на любой pos.


Хороший код, ничего не скажешь..

~~~

Посмотри как сделана лодка.
В ней же есть все тоже самое, что тебе и нужно, разве нет?
В лодке это делается вообще без пакетов (что бы не быть голословным кидаю скрин). Но факт остается фактом сейчас у меня при вызове setPosition двигается только у себя но для других он остается просто сидящим в 0 сдвиге от ентити. 1565335932346.png
 
Поправка. Позиция райдера обновляется ибо он движется вместе с ентити (для всех) но переменная сдвигов по осям для остальных игроков остаётся 0. Я не знаю как можно реализовать передачу сдвига без пакетов. Какие у кого есть идеи?
 
2,990
190
576
Сетать с двух сторон, а не только на сервере?
 

tox1cozZ

aka Agravaine
Модератор
7,123
455
2,146
Это из-за того что ты садишься только у себя, а другие игроки этого не знают. Скорее всего.
Может надо пакет другим отослать что ты сел?
 
Сверху