mirror of
https://github.com/sinai-dev/UnityExplorer.git
synced 2025-01-07 10:03:38 +08:00
Handle Unhollowed modules path through IExplorerLoader. Allow Standalone release to specify manually.
This commit is contained in:
parent
a2f22051f0
commit
506e75c5fe
@ -481,29 +481,21 @@ namespace UnityExplorer
|
|||||||
|
|
||||||
#region Force-loading game modules
|
#region Force-loading game modules
|
||||||
|
|
||||||
internal static string UnhollowedFolderPath => Path.GetFullPath(
|
|
||||||
#if ML
|
|
||||||
Path.Combine("MelonLoader", "Managed")
|
|
||||||
#elif BIE
|
|
||||||
Path.Combine(BepInEx.Paths.BepInExRootPath, "unhollowed")
|
|
||||||
#else
|
|
||||||
Path.Combine(ExplorerCore.Loader.ExplorerFolder, "Modules")
|
|
||||||
#endif
|
|
||||||
);
|
|
||||||
|
|
||||||
// Helper for IL2CPP to try to make sure the Unhollowed game assemblies are actually loaded.
|
// Helper for IL2CPP to try to make sure the Unhollowed game assemblies are actually loaded.
|
||||||
|
|
||||||
// Force loading all il2cpp modules
|
// Force loading all il2cpp modules
|
||||||
|
|
||||||
internal void TryLoadGameModules()
|
internal void TryLoadGameModules()
|
||||||
{
|
{
|
||||||
if (Directory.Exists(UnhollowedFolderPath))
|
var dir = ExplorerCore.Loader.UnhollowedModulesFolder;
|
||||||
|
if (Directory.Exists(dir))
|
||||||
{
|
{
|
||||||
foreach (var filePath in Directory.GetFiles(UnhollowedFolderPath, "*.dll"))
|
foreach (var filePath in Directory.GetFiles(dir, "*.dll"))
|
||||||
DoLoadModule(filePath);
|
DoLoadModule(filePath);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ExplorerCore.LogWarning($"Expected Unhollowed folder path does not exist: '{UnhollowedFolderPath}'");
|
ExplorerCore.LogWarning($"Expected Unhollowed folder path does not exist: '{dir}'. " +
|
||||||
|
$"If you are using the standalone release, you can specify the Unhollowed modules path when you call CreateInstance().");
|
||||||
}
|
}
|
||||||
|
|
||||||
internal bool DoLoadModule(string fullPath)
|
internal bool DoLoadModule(string fullPath)
|
||||||
@ -514,7 +506,6 @@ namespace UnityExplorer
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
Assembly.LoadFile(fullPath);
|
Assembly.LoadFile(fullPath);
|
||||||
//Assembly.Load(File.ReadAllBytes(fullPath));
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch //(Exception e)
|
catch //(Exception e)
|
||||||
|
@ -39,6 +39,8 @@ namespace UnityExplorer
|
|||||||
=> Log;
|
=> Log;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
public string UnhollowedModulesFolder => Path.Combine(Paths.BepInExRootPath, "unhollowed");
|
||||||
|
|
||||||
public ConfigHandler ConfigHandler => _configHandler;
|
public ConfigHandler ConfigHandler => _configHandler;
|
||||||
private BepInExConfigHandler _configHandler;
|
private BepInExConfigHandler _configHandler;
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ namespace UnityExplorer
|
|||||||
public interface IExplorerLoader
|
public interface IExplorerLoader
|
||||||
{
|
{
|
||||||
string ExplorerFolder { get; }
|
string ExplorerFolder { get; }
|
||||||
|
string UnhollowedModulesFolder { get; }
|
||||||
|
|
||||||
ConfigHandler ConfigHandler { get; }
|
ConfigHandler ConfigHandler { get; }
|
||||||
|
|
||||||
|
@ -24,6 +24,10 @@ namespace UnityExplorer
|
|||||||
|
|
||||||
public string ExplorerFolder => Path.Combine("Mods", ExplorerCore.NAME);
|
public string ExplorerFolder => Path.Combine("Mods", ExplorerCore.NAME);
|
||||||
|
|
||||||
|
public string UnhollowedModulesFolder => Path.Combine(
|
||||||
|
Path.GetDirectoryName(MelonHandler.ModsDirectory),
|
||||||
|
Path.Combine("MelonLoader", "Managed"));
|
||||||
|
|
||||||
public ConfigHandler ConfigHandler => _configHandler;
|
public ConfigHandler ConfigHandler => _configHandler;
|
||||||
public MelonLoaderConfigHandler _configHandler;
|
public MelonLoaderConfigHandler _configHandler;
|
||||||
|
|
||||||
|
@ -18,26 +18,43 @@ namespace UnityExplorer
|
|||||||
public class ExplorerStandalone : IExplorerLoader
|
public class ExplorerStandalone : IExplorerLoader
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Call this to initialize UnityExplorer without adding a log listener.
|
/// Call this to initialize UnityExplorer without adding a log listener or Unhollowed modules path.
|
||||||
|
/// The default Unhollowed path "UnityExplorer\Modules\" will be used.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>The new (or active, if one exists) instance of ExplorerStandalone.</returns>
|
/// <returns>The new (or active, if one exists) instance of ExplorerStandalone.</returns>
|
||||||
public static ExplorerStandalone CreateInstance() => CreateInstance(null);
|
public static ExplorerStandalone CreateInstance() => CreateInstance(null, null);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Call this to initialize UnityExplorer and add a listener for UnityExplorer's log messages.
|
/// Call this to initialize UnityExplorer and add a listener for UnityExplorer's log messages, without specifying an Unhollowed modules path.
|
||||||
|
/// The default Unhollowed path "UnityExplorer\Modules\" will be used.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="logListener">Your log listener to handle UnityExplorer logs.</param>
|
/// <param name="logListener">Your log listener to handle UnityExplorer logs.</param>
|
||||||
/// <returns>The new (or active, if one exists) instance of ExplorerStandalone.</returns>
|
/// <returns>The new (or active, if one exists) instance of ExplorerStandalone.</returns>
|
||||||
public static ExplorerStandalone CreateInstance(Action<string, LogType> logListener)
|
public static ExplorerStandalone CreateInstance(Action<string, LogType> logListener) => CreateInstance(logListener, null);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Call this to initialize UnityExplorer with the provided log listener and Unhollowed modules path.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="logListener">Your log listener to handle UnityExplorer logs.</param>
|
||||||
|
/// <param name="unhollowedModulesPath">The path of the Unhollowed modules, either relative or absolute.</param>
|
||||||
|
/// <returns>The new (or active, if one exists) instance of ExplorerStandalone.</returns>
|
||||||
|
public static ExplorerStandalone CreateInstance(Action<string, LogType> logListener, string unhollowedModulesPath)
|
||||||
{
|
{
|
||||||
if (Instance != null)
|
if (Instance != null)
|
||||||
return Instance;
|
return Instance;
|
||||||
|
|
||||||
|
var instance = new ExplorerStandalone();
|
||||||
|
instance.Init();
|
||||||
|
instance.CheckExplorerFolder();
|
||||||
|
|
||||||
if (logListener != null)
|
if (logListener != null)
|
||||||
OnLog += logListener;
|
OnLog += logListener;
|
||||||
|
|
||||||
var instance = new ExplorerStandalone();
|
if (string.IsNullOrEmpty(unhollowedModulesPath) || !Directory.Exists(unhollowedModulesPath))
|
||||||
instance.Init();
|
instance._unhollowedPath = Path.Combine(instance.ExplorerFolder, "Modules");
|
||||||
|
else
|
||||||
|
instance._unhollowedPath = unhollowedModulesPath;
|
||||||
|
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,6 +65,9 @@ namespace UnityExplorer
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static event Action<string, LogType> OnLog;
|
public static event Action<string, LogType> OnLog;
|
||||||
|
|
||||||
|
public string UnhollowedModulesFolder => _unhollowedPath;
|
||||||
|
private string _unhollowedPath;
|
||||||
|
|
||||||
public ConfigHandler ConfigHandler => _configHandler;
|
public ConfigHandler ConfigHandler => _configHandler;
|
||||||
private StandaloneConfigHandler _configHandler;
|
private StandaloneConfigHandler _configHandler;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user