code: public void changeField(PrefabValues prefabValues, TypeTag enclosingType) {
          modify(() -> {
              Object newValue = prefabValues.giveOther(TypeTag.of(field, enclosingType), field.get(object));
              field.set(object, newValue);
          }, false);
      }
docs: Changes the field's value to something else. The new value will never be
  null. Other than that, the precise value is undefined.
  
  Ignores static fields and fields that can't be modified reflectively.
  
  @param prefabValues If the field is of a type contained within
  prefabValues, the new value will be taken from it.
  @param enclosingType A tag for the type that contains the field. Needed
  to determine a generic type, if it has one..
  @throws ReflectionException If the operation fails.