MonkeyInjectionLibrary

v1.0.3·Updated 2026-10-02

A library mod that lets other mods add properties and methods to existing base-game classes at runtime, without modifying game files.

About this mod Author’s original text

MonkeyInjectionLibrary

============

A library mod that lets other mods add properties and methods to existing base-game classes at runtime, without modifying game files.

This mod does nothing on its own – it exists to support other mods.

Overview

This library provides an interface-based monkey-patching system for Unity games.

Instead of creating your own preloader, mod authors define interfaces that describe the methods/properties they want to add.

At runtime, the library injects those interfaces into the target classes using metadata provided by custom attributes.

This approach keeps patches:

  • Declarative
  • Easier to reason about
  • Less fragile across game updates

How It Works

  • Mod authors define one or more interfaces.
  • Attributes are applied to describe:
  • Which Class to inject into
  • How errors should be handled
  • The library scans loaded assemblies marked for injection.
  • Interfaces are injected into the target Unity classes at runtime.

Required Attributes

InjectionIdentifier

Uniquely identifies an assembly and its version.

Usage

  • Must be placed at the assembly level
  • Accepts an identifier string (such as a mod GUID) and a version string

Fallback Behavior

For backwards compatibility if this attribute is missing, the library resolves the identifier and version in the following order:

  • BepInPlugin attribute metadata (GUID and Version) if defined on any type in the assembly.
  • The assembly's name (AssemblyName) and version (AssemblyVersion).

RequiresInjections

Marks an assembly as containing injectable interfaces.

This attribute is required for the library to detect your mod.

Usage

  • Must be placed at the assembly level
  • Should be included in every file that defines injection interfaces

Without this attribute, your mod will be ignored entirely.

InjectInterface

Specifies the base-game class that an interface should be injected into.

Usage

  • Applied to an interface
  • Accepts a Type reference or class name of a base-game class

An interface may target multiple classes by applying multiple InjectInterface attributes.

Error Handling

Injection errors can be handled using the HandleErrors attribute.

If no attribute is specified, the default behavior is Terminate.

HandleErrors

Defines how the library reacts when an error occurs during injection.

Usage locations

  • Assembly
  • Interface
  • Individual property or method

More specific scopes override more general ones.

ErrorHandlingStrategy

Available error handling strategies:

  • Terminate (Default)

Immediately stops the injection process when an error occurs.

  • Ignore

Silently ignores errors and continues execution.

  • LogWarning

Logs the error as a warning and continues execution.

  • LogError

Logs the error as an error and continues execution.

Attribute Precedence

When multiple HandleErrors attributes are present, the following order applies (highest priority last):

  • Default
  • Assembly
  • Interface
  • Method / Property

The most specific setting always wins.

Intended Use

This library is intended for:

  • Advanced mods that need controlled runtime modification of Unity classes

It is not intended for direct use by end users.

Notes

  • This is a library mod and has no visible effect on gameplay by itself
  • Other mods may depend on it
  • Removing it may break mods that rely on interface injection

Example Interface

using InjectionLibrary;

using InjectionLibrary.Attributes;

[assembly: RequiresInjections]

[assembly: InjectionIdentifier("com.example.mod", "1.0.0")]

[assembly: HandleErrors(ErrorHandlingStrategy.Terminate)]

namespace ExampleMod.Interfaces;

[HandleErrors(ErrorHandlingStrategy.LogError)]

[InjectInterface(nameof(StartOfRound))]

public interface ICrashingInterface

{

void Awake();

[HandleErrors(ErrorHandlingStrategy.LogWarning)]

void Start();

[HandleErrors(ErrorHandlingStrategy.Ignore)]

void Update();

}

Install & use Install: BepInEx plugin

  1. The archive from playbuff is the mod itself — usually a BepInEx plugin (a .dll or a plugin folder once unzipped).
  2. Recommended: use a community mod manager (such as r2modman) — pick this game, import the mod, and the manager sets up BepInEx and its dependencies for you.
  3. Manual route: install the BepInEx loader in the game folder, then drop the unzipped .dll or plugin folder into BepInEx/plugins/.
  4. Launch the game — the BepInEx console logs every plugin it loads; seeing this mod in the log means it is installed.

Mods with listed dependencies need those installed too, or they will not load. Options are usually changed in-game or in the plugin's config file.

Dependencies

Install these first, or the mod will not work:

BepInEx-BepInExPack

File & checksum

Filename
MonkeyInjectionLibrary-1.0.3.zip
File size
66.4 KiB