2.5 KiB
BlockMelonLoader
A .NET Framework 4.8 library with no Unity or MelonLoader dependency.
Call BlockMelonLoader.LoaderGuard.EnsureAllowed("YourMod") before initializing
a mod. Building this library does not require a game installation.
If an assembly named MelonLoader is loaded in the current AppDomain, the guard
shows a Windows error dialog and calls Environment.FailFast after dismissal.
Termination also happens if showing the dialog fails. On other platforms the
message is written to standard error before termination; there is no native dialog.
The guard does not inspect installation folders, modify loader files, or monitor
assemblies loaded after the check. UMM and MelonLoader running together are blocked.
Add a PackageReference dependency on BlockMelonLoader version 1.0.0.
Ship BlockMelonLoader.dll alongside your mod DLL; NuGet copies the runtime asset
to the consuming project's build output.
This is an initialization guard, not a MelonLoader plugin. Simply placing the UMM-only mod DLL in MelonLoader's Mods folder will not invoke the guard. A bridge that invokes the UMM entry point is checked; direct assembly loading without invoking that entry point is not. Modified binaries can bypass this check.
Build and test
On Windows, run ./build.ps1 -Test. Visual Studio or Rider MSBuild is required;
use -MSBuildPath to select it explicitly. The script downloads .NET Framework
4.8 reference assemblies into the ignored packages folder when needed.
The DLL is written to bin/Release/BlockMelonLoader.dll and the NuGet package to
artifacts/BlockMelonLoader.1.0.0.nupkg. Packaging uses NuGet.Build.Tasks.Pack.
The standalone tests check detection, notification ordering, and dialog failure
handling. They substitute the dialog and termination callbacks and do not crash
the game. Run them directly with Tests/bin/Release/BlockMelonLoader.Tests.exe.
Installation
The NuGet feed for this project is:
https://git.mizuki.guru/api/packages/imnyang/nuget/index.json
Add that feed to the consuming project's NuGet.Config, then add the dependency:
<PackageReference Include="BlockMelonLoader" Version="[1.0.0]" />
For local development, build this repository and use the generated .nupkg in
a local NuGet feed. The source repository is not required when building a consumer.
New library versions must use a new package version and update the consumer's
dependency version.
License
GNU General Public License version 3 only (GPL-3.0-only); see LICENSE.md.