Harmony

If you liked this item, please rate it up on Steam Workshop page.

Author: Pinkie Arg

Last revision: 2 Sep, 2023 at 19:09 UTC (2)

File size: 4.54 MB

On Steam Workshop

Description:

For the Early Access version please visit this!

A library for patching, replacing and decorating .NET and Mono methods during runtime. Intended to ensure that all mods in a player’s modlist are using the latest version of Harmony to minimize conflicts. We also added a Debug UI! Available via CTRL+ALT+H.

Notes

This is an unofficial distribution of the Harmony[github.com] library maintained by the community to have an easier way to manage external library dependencies.
The repository of the mod – Bannerlord.Harmony[github.com].

Installation

This module should be the highest in loading order. Any other module that requires to be set at the top (Better Exception Window, ButterLib, MCM, etc.) should be loaded after this mod.

For Players

This mod is intended to ensure that all mods in a player’s modlist are using the latest version of Harmony to minimize conflicts.

For Modders

We added a Debug UI! Available via CTRL+ALT+H.

You still need to reference Harmony as a NuGet package, it is not required to include 0Harmony.dll in the final /bin output of your module.
You do need to add this to your SubModule.xml

<DependedModules> <DependedModule Id="Bannerlord.Harmony" /> </DependedModules>

This way the game will ensure that the Harmony library is loaded before your mod.

Versioning

The Module combines the Harmony version used and the Build Id that published the Module. The Build Id is simply added to the end.
2.0.2.22 indicates that Harmony 2.0.2.0 is used and 22 is the Build Id.
2.0.0.1025 indicates that Harmony 2.0.0.10 is used and 25 is the Build Id.

We considered using the Rimworld approach with introducing our own version system, but it won’t give a clear way to detect which Harmony version the Module contains. It’s easier for the user to report the version of the Module used than to check the assembly version/send it.

Troubleshooting
  • Steam is not always updating all mods. We suggest to manually resubscribe to Harmony if you experience crashes!
  • Check that the Modules folder (C:Program Files (x86)SteamsteamappscommonMount & Blade II BannerlordModules) does not contain a Bannerlord.Harmony folder!
  • If the game crashes on start, might have used Fixed Launcher. When installed, it copies 0Harmony.dll which prevents Bannerlord.Harmony from working.
  • If Fixed Launcher was uninstalled or never installed, check that the following files are not in the game’s main /bin folder (Mount & Blade II BannerlordbinWin64_Shipping_Client)
    • TaleWorlds.MountAndBlade.Launcher.exe.config (if BUTRLoader was installed, reinstall it after)
    • 0Harmony.dll
    • LauncherPatcher.dll
    • LauncherPatcher.pdb

About

Harmony gives you an elegant and high level way to alter the functionality in applications written in C#. It works great in games and is well established in titles like 7 Days To Die, BattleTech, Besiege, Cities:Skylines, Kerbal Space Program, Oxygen Not Included, Ravenfield, Rimworld, Sheltered, Stardew Valley, Staxel, Subnautica, The Ultimate Nerd Game, Total Miner, Unturned and many more.

It is also used in unit testing WFP controls and in many other areas.

How it works

If you develop in C# and your code is loaded as a module/plugin into a host application, you can use Harmony to alter the functionality of all the available assemblies of that application. Where other patch libraries simply allow you to replace the original method, Harmony goes one step further and gives you:

  • A way to keep the original method intact
  • Execute your code before and/or after the original method
  • Modify the original with IL code processors
  • Multiple Harmony patches co-exist and don’t conflict with each other
  • Works at runtime and does not touch any files

Documentation

Please check out the documentation[harmony.pardeike.net].

Contribute

pardeike put thousands of hours into this project and its support. So every little action helps:
• Upvote this stackoverflow answer[stackoverflow.com]
• Spread the word in your developer communities
• Become a GitHub sponsor[github.com] or a Patreon[www.patreon.com]

This project uses the great MonoMod.Common[github.com] library by 0x0ade[github.com].

Download
Revisions:

Old revisions of this mod are available below. Click the link to download.