Repository navigation
Feature: New Mod Browser + In-game Steam Workshop browser - #80
Merged
Merged
Conversation
Plain logic behind the new Manage Mods window: - InstalledMod: snapshot of a recognized mod, its status (Enabled, Disabled, Failed, Missing dependency, Restart required) derived from NML's load state and saved disabled flag, and where it was found. - InstalledModQuery: filter, search (name or author) and sort. - ModHubSettings: preferences in NML/mod_hub_settings.json. Search text is not stored. - ModManagerService: reads AllRecognizedMods and applies choices through the existing TryEnableMod / DisableMod paths.
- ModHubWindow: entry menu, one entry per window, plus NML's version. - ModManagerWindow: pooled list of every recognized mod with filter, sort, search, Enable all / Disable all (confirmed, applied at the next start) and Open Mods folder. - ModManagerRow: status badge that toggles the mod, source icon, info button, config button only when the config has items, reload button in developer mode, and the 8-click shortcut to the upload window. - ModInfoWindow: status, source, folder, tags, dependencies with their state and the description, shown as plain text. - ConfirmWindow: small reusable confirmation dialog. Locale keys are appended at the end of en, cz and ch. Tooltip keys are lower case because the game snake-cases tooltip keys before the lookup.
The NML_ModsList button now opens the Mod Hub. ModListWindow and WorkshopModListWindow are still created and registered by id, so anything that opens them directly keeps working; the Hub links to the Workshop subscriptions window until the Download Mods screen exists.
Browse every NML mod on the Workshop (fetched once, then filtered and sorted locally), download with a one-time security notice, cancel, and update all. New downloads are saved as disabled and never compiled from the browser. Manage Mods shows Workshop updates and can unsubscribe. Downloads that Steam finishes while the game is closed stay disabled, and disabled BepInEx Workshop mods are no longer linked at startup.
Upstream now opens ModUploadModeWindow from the 8-click shortcut.
Moved the Hub's spacing, colours, font sizes and sprites into one file (ModHubStyle). The Hub window uses layout groups now instead of hard-coded positions, and sizes itself to fit.
Rows use the game's rounded panel now, with a status pill you click to turn the mod on or off. The author shows when you hover the title. Mod Info only shows the description, plus a warning when the mod has a problem. Dropped the custom sprites, everything uses the game's own sprites now.
Rows look like the ones in Manage Mods. Hovering a title shows the mod's details. Added a small progress bar while loading, and the category filter is now a panel that opens over the list.
For a mod installed from the Steam Workshop, Mod Info shows the description from its Workshop page once Steam sends it, as plain text without BBCode, instead of the one in mod.json. Descriptions are kept for the game session.
NML's button opens Manage Mods instead of the Hub menu. Both windows show tabs on their left edge, in the container the game uses for its own window tabs, to switch between them. NML's version moves under the Manage Mods buttons, without the commit. Also: the source icon's tooltip says where a mod is loaded from instead of its folder path, mod titles no longer play the click animation while scrolling, and the old ModListWindow and NewModListWindow are removed.
WorkshopModListWindow was only opened from the removed ModListWindow. Also removes the locale keys only the removed windows used, and the style kit's window resizing and clickable cards, which only the Hub menu used.
The click animation scale is a multiplier of the normal size; 0 shrank the text to nothing for a moment. Use 1, so it keeps its size.
Toolbar buttons are 20 pixels instead of 16, and the search boxes fill their line, so the clear button lines up with the end of the strip. Switching Hub tabs replaces the current window instead of adding a step to the back button's history.
A disabled or failed mod gets a trash button next to its "?" button. After a confirmation it deletes the mod's folder when it sits directly in the Mods folder, or unsubscribes from a Workshop mod so Steam deletes it. BepInEx plugins and mods in other folders have no trash button. Also lets the mouse wheel and drags scroll the lists while the pointer is over a row's title or buttons, which caught the scroll events before.
Replaces the drawn trash can with the game's delete-world icon, so the Hub adds no images of its own.
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Download failures can bypass disabled-by-default protection, and registration, state synchronization and resource-lifetime defects remain unresolved.
14 open issues
Pending marker cleared before subscription removal is confirmed · New BepInEx downloads are reported installed but not registered · New Updated unloaded mod declaration is discarded · New Disabled unloaded updates incorrectly hide delete and unsubscribe · New Removed mods remain in the dependency graph · New Description query ResultPage is not disposed · New Description query ResultPage is not disposed · New Trending reloads after the initial catalog load is cancelled · New Catalog reload leaves download rows linked to stale instances · New Completed downloads do not refresh active install filters · New List windows never initialize their WindowId · New Cached description is rejected when reopening the window · New GetAsync buffers oversized previews before enforcing limits · New Thumbnail eviction destroys sprites still assigned to rows · New
What changed in this PR
Replaces NeoModLoader’s legacy mod lists with Manage Mods and an in-game Steam Workshop browser.
Changes:
- Adds searchable, filterable mod management and Workshop downloads.
- Introduces download tracking, persisted preferences, thumbnails and mod details.
- Removes legacy windows and updates English and Chinese translations.
| File | Description |
|---|---|
| utils/WorkshopThumbnails.cs | Adds thumbnail downloading and caching. |
| utils/ModInfoUtils.cs | Handles pending downloads during startup. |
| ui/WorkshopModListWindow.cs | Removes legacy Workshop window. |
| ui/UIManager.cs | Registers the new windows. |
| ui/prefabs/ModManagerRow.cs | Adds installed-mod controls. |
| ui/prefabs/ModListItem.cs | Removes legacy row prefab. |
| ui/prefabs/ModBrowserRow.cs | Displays Workshop listings and downloads. |
| ui/prefabs/CategoryFilterPanel.cs | Adds category selection. |
| ui/NewModListWindow.cs | Removes unused replacement window. |
| ui/ModManagerWindow.cs | Adds Manage Mods window. |
| ui/ModListWindow.cs | Removes original mod list. |
| ui/ModInfoWindow.cs | Displays descriptions and Workshop actions. |
| ui/ModHubUI.cs | Shares navigation and UI helpers. |
| ui/ModHubStyle.cs | Centralizes styling and layout. |
| ui/ModBrowserWindow.cs | Adds Workshop browsing interface. |
| ui/ConfirmWindow.cs | Adds action confirmation dialog. |
| services/WorkshopTags.cs | Defines Workshop classification tags. |
| services/WorkshopDownloadQueue.cs | Coordinates downloads and cancellation. |
| services/WorkshopCatalog.cs | Loads catalog pages and trending ranks. |
| services/WorkshopAuthorNames.cs | Fetches and caches author names. |
| services/ModWorkshopServiceWindows.cs | Adds Windows Workshop operations. |
| services/ModWorkshopServiceUnix.cs | Adds Unix Workshop operations. |
| services/ModWorkshopService.cs | Exposes the platform backend. |
| services/ModManagerService.cs | Implements installed-mod management. |
| services/ModListingQuery.cs | Filters and sorts Workshop listings. |
| services/ModListing.cs | Defines listing and installation data. |
| services/ModHubSettings.cs | Persists preferences and pending downloads. |
| services/ModDownloadService.cs | Connects downloads to mod registration. |
| services/IPlatformSpecificModWorkshopService.cs | Extends the backend contract. |
| services/InstalledModQuery.cs | Filters and sorts installed mods. |
| services/InstalledMod.cs | Models installed-mod status and source. |
| resources/locales/en.json | Updates English interface text. |
| resources/locales/cz.json | Updates Simplified Chinese interface text. |
| resources/locales/ch.json | Updates Traditional Chinese interface text. |
| resources/commit | Updates embedded commit identifier. |
| api/AbstractListWindow.cs | Updates the documentation example reference. |
Review effort: Balanced
copilot suggested fix for the "more info" UI, which displays steam workshop descriptions. If a player opened and exit out of it, and then went back into it, instead of seeing the the workshop description, it'll just be the `mod.json` description Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Contributor
|
sup RTX |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


1. New Stuff
2. Manage Mods Window
All mods,Enabled Mods,Disabled Mods,Mods that failed to load,Mods with an update on steam,Name, A to Z,Name, Z to A,Recently changedMod name,Author3. Download Mods Window
Newest First,Name, A to Z,Recently Updated First,Most Subscribed First,Trending: Most Popular This Week,Top Rated FirstAnytime,The Last Week,The Last Month,The Last 3 Months,The Last YearAll Mods,Downloaded,Not Downloaded,Updated AvailableGameplay,Traits,Civilizations,Items,Creatures,Buildings,Visuals,UI & QoL,Worldgen,Library / APIShow All Mods,Hide Mods Tagged Ai-Made,Hide Mods Tagged Ai-Made or Ai-AssistedMod name,Author4. Code Cleanup
ModListWindow,NewModListWindowandWorkshopModListWindowfiles5. Misc Info
Steamor yourLocal Folders.Screenshots
Manage Mods Window
Download Mods Window