There are a number of ways an objective can be completed. These are called "objective completion types" and each has an "objective completion criteria" for how we know if that criteria has been met. For example, we can complete an objective by moving the player to a specific location on the map. For that objective, its objective completion type is movement and its objective completion criteria is the specific game location that the player must step on.
In order to be able to be stored consistently, all completion criteria types must extend ObjectiveCompletionCriteria.