It's impossible to implement a custom NodeCache now

Since 5.0.0, DecodedValue class became package-private
Because of that, no third-party cache implementation can exist because it must implement the following contract:

public interface NodeCache {
    interface Loader {
        DecodedValue load(CacheKey<?> key) throws IOException;
    }
    DecodedValue get(CacheKey<?> key, Loader loader) throws IOException;
}

The most simple implementation of which is:

builder.setCache((key, loader) -> loader.load())

But even that is not possible, because loader.load() call returns a package-private class we unable to refer to.