mirror of
https://github.com/soarqin/DSP_Mods.git
synced 2026-08-05 16:20:24 +08:00
refactor: phase 5 transpiler docs, mod-compat helpers, and build quality gates
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using BepInEx;
|
||||
using BepInEx.Bootstrap;
|
||||
using HarmonyLib;
|
||||
|
||||
namespace UXAssist.Common.ModCompat;
|
||||
|
||||
public static class ModCompatHelper
|
||||
{
|
||||
public static bool TryGetLoadedPluginInfo(string guid, out BepInEx.PluginInfo pluginInfo)
|
||||
{
|
||||
return Chainloader.PluginInfos.TryGetValue(guid, out pluginInfo) && pluginInfo != null;
|
||||
}
|
||||
|
||||
public static bool TryGetPluginType(BepInEx.PluginInfo pluginInfo, string typeName, out Type type)
|
||||
{
|
||||
type = null;
|
||||
if (pluginInfo?.Instance == null) return false;
|
||||
try
|
||||
{
|
||||
type = pluginInfo.Instance.GetType().Assembly.GetType(typeName, throwOnError: false);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
return type != null;
|
||||
}
|
||||
|
||||
public static bool TryGetPluginType(string guid, string typeName, out Type type)
|
||||
{
|
||||
type = null;
|
||||
return TryGetLoadedPluginInfo(guid, out var pluginInfo) && TryGetPluginType(pluginInfo, typeName, out type);
|
||||
}
|
||||
|
||||
public static bool TryGetField(Type type, string fieldName, out FieldInfo field)
|
||||
{
|
||||
field = null;
|
||||
if (type == null) return false;
|
||||
field = AccessTools.Field(type, fieldName);
|
||||
return field != null;
|
||||
}
|
||||
|
||||
public static bool TryGetFieldValue<T>(Type type, string fieldName, object instance, out T value)
|
||||
{
|
||||
value = default;
|
||||
if (!TryGetField(type, fieldName, out var field)) return false;
|
||||
try
|
||||
{
|
||||
var result = field.GetValue(instance);
|
||||
if (result is T t)
|
||||
{
|
||||
value = t;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool TryGetMethod(Type type, string methodName, out MethodInfo method)
|
||||
{
|
||||
method = null;
|
||||
if (type == null) return false;
|
||||
method = AccessTools.Method(type, methodName);
|
||||
return method != null;
|
||||
}
|
||||
|
||||
public static bool TryGetPropertySetter(Type type, string propertyName, out MethodInfo setter)
|
||||
{
|
||||
setter = null;
|
||||
if (type == null) return false;
|
||||
var property = AccessTools.Property(type, propertyName);
|
||||
if (property == null) return false;
|
||||
setter = property.GetSetMethod(nonPublic: true);
|
||||
return setter != null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user