_forEachLevelWaterfall(hookMap, cache, type, data, fn) {
		for (const hook of this._getAllLevelHooks(hookMap, cache, type)) {
			data = fn(/** @type {H} */ (hook), data);
		}
		return data;
	}
@template {StatsFactoryHooks[keyof StatsFactoryHooks]} HM
@template {HM extends HookMap<infer H> ? H : never} H
@param {HM} hookMap hook map
@param {Caches<H>} cache cache
@param {string} type type
@param {FactoryData} data data
@param {(hook: H, factoryData: FactoryData) => FactoryData} fn fn
@returns {FactoryData} data
@private