default @NonNull CompletableFuture<Void> modifyUser(@NonNull UUID uniqueId, @NonNull Consumer<? super User> action) {
        /* This default method is overridden in the implementation, and is just here
           to demonstrate what this method does in the API sources. */
        return loadUser(uniqueId)
                .thenApplyAsync(user -> { action.accept(user); return user; })
                .thenCompose(this::saveUser);
    }
Loads a user from the plugin's storage provider, applies the given {@code action},
then saves the user's data back to storage.

<p>This method effectively calls {@link #loadUser(UUID)}, followed by the {@code action},
then {@link #saveUser(User)}, and returns an encapsulation of the whole process as a
{@link CompletableFuture}. </p>

@param uniqueId the uuid of the user
@param action the action to apply to the user
@return a future to encapsulate the operation
@since 5.1
api/src/main/java/net/luckperms/api/model/user/UserManager.java