# 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: ```text https://git.mizuki.guru/api/packages/imnyang/nuget/index.json ``` Add that feed to the consuming project's `NuGet.Config`, then add the dependency: ```xml ``` 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`.