code: private <T, S extends ISyncableData> void doSync(T caller, String... syncNames)
  	{
  		@SuppressWarnings("unchecked")
  		ISyncHandler<T, S> handler = (ISyncHandler<T, S>) getHandler(caller);
  		if (handler == null)
  			return;
  
  		S data = handler.getSyncData(caller);
  		int indexes = getFieldIndexes(handler, syncNames);
  		Map<String, Object> values = getFieldValues(caller, handler, syncNames);
  
  		SyncerMessage.Packet<T, S> packet = new Packet<>(getHandlerId(caller.getClass()), data, indexes, values);
  
  		handler.send(caller, packet);
  	}
docs: Synchronizes the specified fields names and sends the corresponding packet.
  
  @param <T> the type of the caller
  @param caller the caller
  @param syncNames the sync names