Как пишут моды для игр?
Вопрос: каким образом я должен написать модлоадер для игры?
Абстрактный модлоадер необходим только тогда, когда разработчики игры не предусмотрели моды изначально.

Мне хочется понять: как именно добавить поддержку модов для СВОЕЙ игры
В зависимости от того, на каком языке ты пишешь игру, тебе нужно будет каким-то образом динамически загружать внешние модули и запускать код из них.

Например на C# и Java это делается при помощи рефлексии.
Вот конкретно пример, как это можно сделать на C#:
https://docs.microsoft.com/en-us/dotnet/core/tutor...

На компилируемых языках типа C++ или Rust придётся тащить с собой какой-нибудь интерпретатор (ну это самый простой вариант и для разработчика игры, и для разработчика модов).
Например lua или wasm.
моддинг на живую очень проблемная задача

Основная идея, нужный код подгружается как dll, а в кодовую базу центрального проекта добавляются механизмы по загрузке этих модулей.
Если этого механизма нет, то придется его сделать.

А вот как организовать структурно загрузку этих модулей - творческая задачка, сильно зависящая от величины желания свободы в моддинге (на сколько глубоко моды могут менять изначальное поведение).

В майнкрафте такой прослойкой является, к примеру популярный minecraft forge, этот проект пилится и подготавливается для каждой версии оригинального майнкрафта
Изначально моды делали через декомпиляцию бинарников и подмену бинарных файлов классов).

Т.е. буквально, вот у тебя есть класс обслуживания поведения монстра, ты берешь исходники, добавляешь туда свой функционал, компилируешь, в результате если ты не менял остальную кодовую базу и к примеру константы из этого классса нигде не используются, то повторная сборка будет отличаться только этим классом (плюс ты можешь добавить новые), вот патчинг бинарного кода и будет установкой мода. Такой подход не сработает если нужно устанавливать несколько модов одновременно и они меняют один и тот же функционал

Чтобы была возможность модификаций, в тех классах и методах, которые подразумевают возможность модификаций, должен быть код который проверяет наличие загруженных ранее модов, определять способ их вызова если несколько разных требуют подмену одного и того же функционала.. и делать это на столько эффективно чтобы не замедляло работу (к примеру не стоит на вывод каждого пиксела ставить проверку - а нет ли мода на обработку модификаций по этой функции)