refreshAsyncIfDue
public static boolean refreshAsyncIfDue<T extends NightbreakManagedContent>(JavaPlugin plugin, String catalogKey, Duration cooldown, Supplier<? extends Collection<? extends T>> packageSupplier, Predicate<T> shouldCheckVersion, Consumer<List<T>> onComplete)
Starts a refresh only when the keyed cooldown has elapsed. The gate is stamped atomically, before the package supplier is evaluated or any work is scheduled, so concurrent menu opens cannot duplicate the request.