mirror of
https://github.com/muskit/H3VR-TNH-Quality-of-Life-Improvements.git
synced 2026-06-02 20:24:26 -07:00
update MeatKit (9a1a68ab68cd0650227af944ffa30d1166b9e056)
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Mono.Cecil;
|
||||
using UnityEngine;
|
||||
|
||||
namespace MeatKit
|
||||
{
|
||||
[CreateAssetMenu(menuName = "MeatKit/Assembly Editors/Path Replacer", fileName = "New Path Replacer")]
|
||||
public class CreatePathModifier : AssemblyModifier
|
||||
{
|
||||
[Tooltip("The new path replacements")]
|
||||
public ReplacementPath[] ReplacementPaths = new ReplacementPath[0];
|
||||
|
||||
public override void ApplyModification(AssemblyDefinition assembly)
|
||||
{
|
||||
TypeReference stringRef = assembly.MainModule.TypeSystem.String;
|
||||
TypeReference intRef = assembly.MainModule.TypeSystem.Int32;
|
||||
if (stringRef == null || intRef == null) return;
|
||||
|
||||
foreach (ReplacementPath replacementPath in ReplacementPaths)
|
||||
{
|
||||
TypeReference type = assembly.MainModule.GetType(replacementPath.ScriptableObjectName);
|
||||
if (type == null) continue;
|
||||
|
||||
TypeDefinition definition = type.Resolve();
|
||||
CustomAttribute createMenuAttribute = GetCreateAssetMenuAttribute(definition);
|
||||
|
||||
if (createMenuAttribute == null)
|
||||
{
|
||||
Debug.LogWarning("Could not get CreateAssetMenuAttribute for scriptable object: " + replacementPath.ScriptableObjectName);
|
||||
continue;
|
||||
}
|
||||
|
||||
CustomAttributeArgument pathArgumentValue = new CustomAttributeArgument(stringRef, replacementPath.NewPath);
|
||||
CustomAttributeArgument fileNameArgumentValue = new CustomAttributeArgument(stringRef, replacementPath.NewDefaultName);
|
||||
CustomAttributeArgument orderArgumentValue = new CustomAttributeArgument(intRef, replacementPath.NewOrder);
|
||||
|
||||
CustomAttributeNamedArgument pathArgument = new CustomAttributeNamedArgument("menuName", pathArgumentValue);
|
||||
CustomAttributeNamedArgument fileNameArgument = new CustomAttributeNamedArgument("fileName", fileNameArgumentValue);
|
||||
CustomAttributeNamedArgument orderArgument = new CustomAttributeNamedArgument("order", orderArgumentValue);
|
||||
|
||||
createMenuAttribute.Properties.Clear();
|
||||
createMenuAttribute.Properties.Add(pathArgument);
|
||||
createMenuAttribute.Properties.Add(fileNameArgument);
|
||||
createMenuAttribute.Properties.Add(orderArgument);
|
||||
}
|
||||
|
||||
Applied = true;
|
||||
}
|
||||
|
||||
private CustomAttribute GetCreateAssetMenuAttribute(TypeDefinition definition)
|
||||
{
|
||||
CustomAttribute[] foundAttributes = definition.CustomAttributes.Where(ca => ca.AttributeType.FullName.Contains("CreateAssetMenuAttribute")).ToArray();
|
||||
|
||||
if(foundAttributes.Length > 0)
|
||||
{
|
||||
return foundAttributes[0];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
[Serializable]
|
||||
public struct ReplacementPath
|
||||
{
|
||||
[Tooltip("Specify the FULL NAME of the scriptable object you wish to modify. e.g. Sub.Namespace.Type")]
|
||||
public string ScriptableObjectName;
|
||||
|
||||
[Tooltip("The new create asset path of the scriptable object")]
|
||||
public string NewPath;
|
||||
|
||||
[Tooltip("The new default name of the scriptable object when created")]
|
||||
public string NewDefaultName;
|
||||
|
||||
[Tooltip("The new ordering of the scriptable object in menu")]
|
||||
public int NewOrder;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user