-
Notifications
You must be signed in to change notification settings - Fork 194
Structuring your Thunderstore package
Note: The required files in a Thunderstore package are:
- A README.md
- An icon.png
- A manifest.json
By default all folders are ignored. Override folders are however a way of circumventing this issue and placing files in specific folders.
Should you need to load resources from a specific folder, please do this relative to your DLL using GetExecutingAssembly.
The newer, reliable, and easier method for doing this is by using Path.Combine(Path.GetDirectoryName(Plugin.Info.Location), "MySubDirectory", "MyImage.png")
.
- plugins
- monomod (
.mm.dll
will implicitly install to a subdirectory within this folder) - patchers
- core
- config
- Sideloader (H3VR only. Not for Outward.)
- SlimVML (Designed for use with Valheim.)
- Maps (Currently only for Timberborn.)
- UMM Mods (Ultrakill only)
- Assets (GTFO)
- Note that this has install behaviour similar to MelonLoader.
- Files are tracked and are not placed under a subdirectory.
- GameData (GTFO)
- Mods (
.dll
) - Plugins (
.plugin.dll
) - MelonLoader
- Managed (
.managed.dll
) - Libs (
.lib.dll
)
- Managed (
- UserData
- CustomItems (
.melon
) - CustomMaps (
.bcm
,.cma
) - PlayerModels (
.body
) - CustomLoadScreens (
.load
) - Music (
.wav
) - Food (
.food
) - Scoreworks (
.sw
) - CustomSkins (
.png
) - Grenades (
.grenade
)
- CustomItems (
Every folder aside from /config
has an unconditional subdirectory following the format of Author-ModName
. This is to prevent file conflicts.
The default location for files that aren't in overriden directories is /BepInEx/plugins
. The only exception is for files ending with .mm.dll
which implies a /BepInEx/monomod
folder installation.
An example zip structure:
# mod.zip
- <required files>
- patchers
- my_patcher.dll
- random_folder
- test.dll
- other_random_folder
- other_test.dll
- plugins
- monomod
- example_pm.dll
- monomod
- my_monomod.dll
will resolve to the following installation:
# <profile>/BepInEx/
- patchers
- <Author-ModName>
- my_patcher.dll
- plugins
- <Author-ModName>
- <required files>
- test.dll
- other_test.dll
- monomod
- example_pm.dll
- monomod
- <Author-ModName>
- my_monomod.dll
MelonLoader packaging is almost identical to BepInEx, however there's no <Author-ModName>
folder.
Unlike BepInEx (besides .mm.dll
), MelonLoader has some pre-configured file extensions that are automatically placed in their relevant directories.
Additionally, unlike with BepInEx supported games, the Thunderstore required files are not installed to the profile folder.
Example:
# mod.zip
- <required files>
- my_map.bcm
- Items
- a_custom_item.melon
- CustomItems
- my_item.item
- another_custom_item.melon
- UserData
- CustomItems
- a_third_custom_item.melon
- Some Random Folder
- unknown_file_type.xyz
will resolve to the following installation:
# <profile>/
- UserData
- CustomItems
- a_custom_item.melon
- my_item.item
- another_custom_item.melon
- a_third_custom_item.melon
- CustomMaps
- my_map.bcm
- Some Random Folder
- unknown_file_type.xyz
- GDWeave (e.g. WEBFISHING)
- ReturnOfModding (e.g. Hades II and Risk of Rain Returns)
- Shimloader (e.g. Palworld and Panicore)