A ResoniteModLoader mod for Resonite that automatically fixes stuck asset queues.
This mod monitors asset gather jobs in Resonite and automatically handles jobs that get stuck. It helps prevent the asset queue from getting blocked by:
- Detecting stuck jobs: Monitors all asset gather jobs and identifies ones that have been running for too long
- Smart skipping: Skips stuck jobs instead of failing them permanently, allowing the queue to continue
- Automatic retry: Automatically retries skipped assets after a configurable delay
- Cache management: Optionally clears cache for persistently stuck assets (after multiple retry attempts)
- Owner detection: Attempts to detect when asset owners leave sessions (with safe fallbacks)
- Background monitoring: Continuously checks for stuck jobs without impacting performance
Sometimes asset downloads can get stuck due to:
- User disconnections: Someone uploads an asset but leaves before the transfer completes, leaving everyone stuck waiting
- Network issues: Downloads that hang indefinitely
- Session problems: Assets that can't be transferred for various reasons
When this happens, the asset queue can get blocked, preventing new assets from loading. This mod automatically detects and handles these stuck jobs so your asset loading can continue normally.
Important: Each person needs to have this mod installed for it to work. The mod runs locally on each client/headless server and:
- Detects when asset owners leave: When someone who uploaded an asset leaves the session, the mod can detect this and handle their pending asset jobs
- Fixes your local queue: Each person's mod fixes their own stuck asset queue
- Works independently: Even if only some people have the mod, those who do will have their queues fixed automatically
This mod can't fix other people's queues; it only fixes the queue on the machine it runs on. So if you're in a session where someone left mid-upload and everyone is stuck, anyone with this mod installed will have their queue automatically fixed. Others without the mod will need to wait for the timeout or restart.
- Install ResoniteModLoader if you haven't already.
- Download the latest
StuckAsset.dllfrom the Releases page. - Place
StuckAsset.dllinto yourrml_modsfolder. This folder should be at:- Windows:
C:\Program Files (x86)\Steam\steamapps\common\Resonite\rml_mods - Linux:
~/.steam/steam/steamapps/common/Resonite/rml_modsor~/.local/share/Steam/steamapps/common/Resonite/rml_mods - You can create it if it's missing, or if you launch the game once with ResoniteModLoader installed it will create this folder for you.
- Windows:
- Start the game. If you want to verify that the mod is working you can check your Resonite logs for:
StuckAsset mod initialized - monitoring asset gather jobs for stuck states
The mod has extensive configuration options accessible through Resonite's mod configuration menu. All settings can be adjusted in-game without restarting.
Explaination of each settings
- monitorIntervalSeconds (default: 10s) - How often to check for stuck jobs
- remoteTimeoutSeconds (default: 240s / 4 minutes) - Timeout for remote asset downloads
- localTimeoutSeconds (default: 90s / 1.5 minutes) - Timeout for local/session asset transfers
- noProgressTimeoutSeconds (default: 60s) - Timeout for jobs with no progress. A job must exceed the main timeout AND show no progress for this duration to be considered stuck
- retryDelaySeconds (default: 45s) - Delay before retrying a skipped asset
- retryDelayOwnerLeftSeconds (default: 300s / 5 minutes) - Delay before retrying when owner left
- retryCheckIntervalSeconds (default: 20s) - How often to check the retry queue
- retryPriority (default: 0.1) - Priority for retried assets (0.0-1.0, lower = less priority)
- maxRetriesPerAsset (default: 3) - Maximum retry attempts per asset before giving up
- maxRetryQueueSize (default: 250) - Maximum size of retry queue
- cooldownPerAssetSeconds (default: 120s / 2 minutes) - Minimum cooldown before same asset can be retried again
- enabled (default: true) - Enable/disable the mod
- clearCacheOnSkip (default: false) - Clear asset cache when skipping (can cause re-downloads)
- cancelJobOnSkip (default: true) - Cancel jobs when skipping (vs failing them)
- onlyAffectLocalAssets (default: false) - Only process local:// assets (debug mode)
- logStuckDetections (default: true) - Log when stuck jobs are detected
- logRetries (default: true) - Log when assets are retried
- logCacheClears (default: false) - Log when cache is cleared
- logVerboseDebug (default: false) - Enable verbose debug logging
- showStats (default: true) - Show mod statistics in config
- statsTotalDetected - Total stuck jobs detected since startup
- statsTotalSkipped - Total jobs skipped
- statsTotalRetried - Total jobs retried
- statsRetryQueueSize - Current retry queue size
- statsActiveJobs - Current active asset jobs being monitored
The mod uses a background monitoring task (not frame-based patches) to minimize performance impact:
- Background monitoring: Runs continuously, checking all asset gather jobs at configurable intervals
- Progress-aware stuck detection:
- Tracks bytes received for each job
- Only marks jobs as stuck if they exceed timeout AND show no progress
- Jobs that are slow but actively downloading are NOT considered stuck
- Smart skipping: Cancels stuck jobs and adds them to a retry queue instead of failing them permanently
- Progressive cache clearing:
- 1st skip → cancel only (no cache clear)
- 2nd+ skip → cancel + clear cache + retry
- Retry management: Processes retry queue with cooldowns and retry limits to prevent infinite loops
- Owner detection: Attempts to detect when asset owners leave, with safe fallbacks to avoid false positives
-
Clone this repository:
git clone https://github.com/troyBORG/StuckAsset.git cd StuckAsset -
Build the project:
dotnet build
-
The mod will automatically copy to your Resonite
rml_modsfolder ifCopyToModsis enabled (default). Or manually copyStuckAsset/bin/Debug/net10.0/StuckAsset.dllto yourrml_modsfolder.
## Troubleshooting
- Make sure ResoniteModLoader is installed correctly
- Check that
StuckAsset.dllis in therml_modsfolder (not a subfolder) - Check Resonite logs for any error messages
- Verify the mod is enabled in config (
enabledsetting)
- The mod may need time to detect stuck jobs (check
monitorIntervalSecondssetting) - Very long-running legitimate downloads may be incorrectly flagged - adjust timeout values if needed
- Check the logs for cleanup messages to see if the mod is working
- Verify
enabledis set totruein config
If legitimate downloads are being cleaned up too early:
- Increase
remoteTimeoutSecondsorlocalTimeoutSecondsin config - Check
logStuckDetectionsto see what's being detected - Consider enabling
logVerboseDebugfor more information
If assets are being retried too aggressively:
- Reduce
maxRetriesPerAsset(default: 3) - Increase
cooldownPerAssetSeconds(default: 120s) - Increase
retryDelaySeconds(default: 45s)
- Set
clearCacheOnSkiptofalse(default) - Cache will only be cleared after 2+ retry attempts even if enabled
The mod is designed to be lightweight:
- Uses background tasks instead of frame-based patches
- Configurable monitoring intervals (default: 10 seconds)
- Minimal overhead when no stuck jobs are detected
- Statistics update every 10 seconds (not every frame)
Contributions are welcome! Please feel free to submit issues or pull requests.
This mod is provided as-is. Feel free to use, modify, and distribute as needed.
- Created by troyBORG
- Built with ResoniteModLoader
- Uses Harmony for patching
- Complete rewrite with extensive configuration options
- Removed double-monitoring (performance improvement)
- Added retry limits and safety controls
- Made cache clearing optional and progressive
- Added comprehensive logging options
- Improved owner-left detection with safe fallbacks
- All timers now configurable
- Added statistics tracking
- Initial release
- Basic stuck job detection and cleanup
- Automatic retry system
- Cache clearing for skipped assets