Open leo60228 opened 6 years ago
@0x0ade I just made this repo public
I just sat down at my PC.
This would be better fit in the MonoMod repository, but on the other hand, I don't want to set this into stone just yet. Before you're going to ask: No, I'm not planning to use GitHub Projects for MonoMod just yet, as I don't see the need to "overmanage" MonoMod in its current state. This is going to be different when I want to make MonoMod easier to contribute to, but right now, getting contributors on board would only make us step on our own feet.
MonoMod.Patcher
will probably just be called MonoMod
, as everything else are extensions around the MonoMod "core."MonoMod.RuntimeDetour
should also contain Detour
. Not going to rename it to SimpleDetour
, as calling it "simple detours" sounds wrong. Is it "simple" to use? Or is the implementation "simple?" Maybe it can only achieve "simple" tasks? Detours
are the lower-level foundation of Hooks
, which should rather be used by modders.MethodInfoWithDef
(one shouldn't mix Reflection and Cecil) and GlobalNamespaces
would be better fit in MonoMod.Hooks
(I don't know what its purpose is, though). MonoMod.Utils
can contain everything else currently in the MonoMod.Helpers
namespace: Platform
+ PlatformHelper
, ReflectionHelper
, StringInjectExtension
and any other useful extension methods / helper classes that we "collect" on our way.MonoMod.Hooks
, but I'm leaving this to you :) Probably not going to maintain it too heavily myself.MonoMod.DebugIL
is a very small helper, but it being its own tool is also something I've had in my mind for a while now.MonoMod.LoaderUtils
and MonoMod.SimpleLoader
should just be MonoMod.Loader
. Once again, drop the "simple", otherwise we could as well rename MonoMod to SimpleMod. A fully "universal" mod loader is impossible - our task should be to provide the foundation and tools to build a mod loader. And those tools should be provided in MonoMod.Loader
.MonoMod.Compat
: We're probably going to break backwards compatibility in unexpected ways, but if we're going to try to keep old mods functional, we should attempt to use TypeForwardedToAttribute
instead.Oh, I thought you meant MonoMod.Loader to be a mod loader template, and thus I thought it would make sense for relevant utilities to be in a separate project (in the C# sense) exposed on Nuget.
GlobalNamespaces allows this syntax: GlobalNamespaces.System.String == typeof(System.String) && GlobalNamespaces.System.String.GetType() == typeof(ExtendableType /* working name */)
ExtendableType is a DynamicObject because extension properties don't exist yet
I'm still undecided whether MonoMod.Loader
is going to be a template or not, which is why I was hesitant to announce my plans publicly :/
post ideas and stuff
copied from discord:
so, for that idea:
MonoMod.Patcher
: Patching thing, what Everest usesMonoMod.RuntimeDetour
: ContainsNativeDetour
and supporting classesMonoMod.Utilities
: Contains module-agnostic support (like MethodInfoWithDef andGlobalNamespaces
, current name for the backing behind EventHooks)MonoMod.Hooks
: ContainsSimpleDetour
(Detour
now),MethodHook
(HookedMethod
/Hook
now), and extension methods forGlobalNamespaces
that provide "EventHooks"MonoMod.DebugIL
: Don't know what this is, but it existsMonoMod.LoaderUtils
: Stuff like a mod-loading-focused relinkerMonoMod.SimpleLoader
: Wrapper around all other modules (except maybeMonoMod.DebugIL
) to provide a simple, modifiable, universal mod loader not on NugetMonoMod.Compat
: An ILMerge/ILRepack'd.exe
that's backwards-compatible with pre-modularMonoMod
@0x0ade