/**
  * Updates this player's movement.
  *
  * @param packet The packet.
  */
 private void updateThisPlayerMovement(final PacketBuilder packet) {
   if (player.isTeleporting() || player.isMapRegionChanging()) {
     packet.putBits(1, 1);
     packet.putBits(2, 3);
     packet.putBits(7, player.getLocation().getLocalX(player.getLastKnownRegion()));
     packet.putBits(1, 1);
     packet.putBits(2, player.getLocation().getZ());
     packet.putBits(1, player.getUpdateFlags().isUpdateRequired() ? 1 : 0);
     packet.putBits(7, player.getLocation().getLocalY(player.getLastKnownRegion()));
   } else {
     if (player.getSprites().getPrimarySprite() == -1) {
       packet.putBits(1, player.getUpdateFlags().isUpdateRequired() ? 1 : 0);
       if (player.getUpdateFlags().isUpdateRequired()) {
         packet.putBits(2, 0);
       }
     } else {
       if (player.getSprites().getSecondarySprite() != -1) {
         packet.putBits(1, 1);
         packet.putBits(2, 2);
         packet.putBits(3, player.getSprites().getPrimarySprite());
         packet.putBits(3, player.getSprites().getSecondarySprite());
         packet.putBits(1, player.getUpdateFlags().isUpdateRequired() ? 1 : 0);
       } else {
         packet.putBits(1, 1);
         packet.putBits(2, 1);
         packet.putBits(3, player.getSprites().getPrimarySprite());
         packet.putBits(1, player.getUpdateFlags().isUpdateRequired() ? 1 : 0);
       }
     }
   }
 }