Initial Commit
This commit is contained in:
67
PackageProcessor/Editor/ImportPostProcessor.cs
Normal file
67
PackageProcessor/Editor/ImportPostProcessor.cs
Normal file
@@ -0,0 +1,67 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using HarmonyLib;
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
namespace DreadScripts.PackageProcessor
|
||||
{
|
||||
[InitializeOnLoad]
|
||||
public class ImportPostProcessor
|
||||
{
|
||||
|
||||
private static readonly Harmony harmony;
|
||||
private static readonly FieldInfo assetPathField;
|
||||
private static readonly FieldInfo enabledStatusField;
|
||||
private static readonly FieldInfo isFolderField;
|
||||
|
||||
static ImportPostProcessor()
|
||||
{
|
||||
harmony = new Harmony("com.dreadscripts.importpostprocessor.tool");
|
||||
Type packageImportType = GetType("UnityEditor.PackageImport");
|
||||
Type packageImportItemType = GetType("UnityEditor.ImportPackageItem");
|
||||
assetPathField = packageImportItemType.GetField("destinationAssetPath", BindingFlags.Public | BindingFlags.Instance);
|
||||
enabledStatusField = packageImportItemType.GetField("enabledStatus", BindingFlags.Public | BindingFlags.Instance);
|
||||
isFolderField = packageImportItemType.GetField("isFolder", BindingFlags.Public | BindingFlags.Instance);
|
||||
QuickPatch(packageImportType, "ShowImportPackage", string.Empty, nameof(ShowImportPackagePost));
|
||||
}
|
||||
|
||||
private static void ShowImportPackagePost(object[] items)
|
||||
{
|
||||
foreach (var i in items)
|
||||
{
|
||||
string path = (string)assetPathField.GetValue(i) ;
|
||||
bool isFolder = (bool)isFolderField.GetValue(i);
|
||||
if (!isFolder && !string.IsNullOrEmpty(path) && (path.EndsWith(".cs") || path.EndsWith(".dll")))
|
||||
enabledStatusField.SetValue(i, 0);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private static void QuickPatch(System.Type targetType, string ogMethod, string preMethod = "", string poMethod = "")
|
||||
{
|
||||
MethodInfo originalMethod = AccessTools.GetDeclaredMethods(targetType).Find(m => m.Name == ogMethod);
|
||||
HarmonyMethod prefixMethod = string.IsNullOrEmpty(preMethod) ? null : new HarmonyMethod(typeof(ImportPostProcessor).GetMethod(preMethod, BindingFlags.NonPublic | BindingFlags.Static));
|
||||
HarmonyMethod postMethod = string.IsNullOrEmpty(poMethod) ? null : new HarmonyMethod(typeof(ImportPostProcessor).GetMethod(poMethod, BindingFlags.NonPublic | BindingFlags.Static));
|
||||
harmony.Patch(originalMethod, prefixMethod, postMethod);
|
||||
}
|
||||
|
||||
private static System.Type GetType(string typeName)
|
||||
{
|
||||
System.Type myType = System.Type.GetType(typeName);
|
||||
if (myType != null)
|
||||
return myType;
|
||||
foreach (Assembly assembly in System.AppDomain.CurrentDomain.GetAssemblies())
|
||||
{
|
||||
myType = assembly.GetType(typeName);
|
||||
if (myType != null)
|
||||
return myType;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user