- 36
- 0
Надеюсь кто нибудь поможет. В общем если кратко то реализовывал перемещение райдера на энтити. Работало то хорошо но на сервере для остальных игроков позиция райдера не обновлялась. Если я правильно понял то что бы это было видно всем игрок при перемещении должен отправлять на сервер пакет со своим смещением. Теперь к делу...
Может я что то не так делаю? Наблюдается в итоге нормально перемещение до захода 2 игрока. Оно становиться дёрганным. А как только игрок садится на энтити наблюдается в консоли постоянно одна и таже ошибка. Заранее благодарен если чем то поможете.
Собсна класс с пакетом:
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);