From 6fd351e2bacefdff13190678eb40cea869fb4ba3 Mon Sep 17 00:00:00 2001 From: Cj <161484149+CJ-SPT@users.noreply.github.com> Date: Tue, 31 Dec 2024 10:10:40 -0500 Subject: [PATCH] clean up Publicizer --- RecodeItLib/Remapper/Publicizer.cs | 68 +----------------------------- 1 file changed, 1 insertion(+), 67 deletions(-) diff --git a/RecodeItLib/Remapper/Publicizer.cs b/RecodeItLib/Remapper/Publicizer.cs index c395011..0ccfec2 100644 --- a/RecodeItLib/Remapper/Publicizer.cs +++ b/RecodeItLib/Remapper/Publicizer.cs @@ -6,14 +6,10 @@ namespace ReCodeIt.ReMapper; internal static class SPTPublicizer { - private static ModuleDefMD? MainModule; - public static void PublicizeClasses(ModuleDefMD definition, bool isLauncher = false) { var types = definition.GetTypes(); - - MainModule = definition; - + var typeCount = types.Where(t => !t.IsNested).Count(); var count = 0; foreach (var type in types) @@ -55,25 +51,7 @@ internal static class SPTPublicizer if (property.GetMethod != null) PublicizeMethod(property.GetMethod); if (property.SetMethod != null) PublicizeMethod(property.SetMethod); } - - // var eventNames = new HashSet(type.Events.Select(e => e.Name)); foreach (var field - // in type.Fields) { if (eventNames.Contains(field.Name)) { continue; } - // - // // if (type.Name.StartsWith("GClass") || !type.Namespace.Contains("EFT") || - // !type.Namespace.Contains("UI") || !string.IsNullOrWhiteSpace(type.Namespace)) // if - // (type.Namespace.Length > 0 && type.Namespace[0] > 'E') PublicizeField(field); } - // Workaround to not publicize some nested types that cannot be patched easily and cause - // issues Specifically, we want to find any type that implements the "IHealthController" - // interface and make sure none of it's nested types that implement "IEffect" are changed - /* - if (GetFlattenedInterfacesRecursive(type).Any(i => i.Interface.Name == "IHealthController")) - { - // Specifically, any type that implements the IHealthController interface needs to not - // publicize any nested types that implement the IEffect interface - nestedTypesToPublicize = type.NestedTypes.Where(t => t.IsAbstract || t.Interfaces.All(i => i.Interface.Name != "IEffect")).ToArray(); - } - */ foreach (var nestedType in type.NestedTypes) { PublicizeType(nestedType, isLauncher); @@ -97,48 +75,4 @@ internal static class SPTPublicizer method.Attributes &= ~MethodAttributes.MemberAccessMask; method.Attributes |= MethodAttributes.Public; } - - // Unused for now - publicizing fields is tricky, as it often creates MonoBehaviour loading - // errors and prevents scenes from loading, most notably breaking the initial game loader scene - // and causing the game to CTD right after starting - private static void PublicizeField(FieldDef field) - { - if (field.CustomAttributes.Any(a => a.AttributeType.Name == nameof(CompilerGeneratedAttribute)) - // || field.HasCustomAttributes - || field.Name.StartsWith("delegate") - || field.Name.Contains("__BackingField")) - { - return; - } - - if (field.IsPublic || field.IsCompilerControlled || field.IsLiteral || field.IsStatic || field.IsInitOnly) return; - - field.Attributes &= ~FieldAttributes.FieldAccessMask; - field.Attributes |= FieldAttributes.Public; - } - - private static List GetFlattenedInterfacesRecursive(TypeDef type) - { - var interfaces = new List(); - - if (type is null) return interfaces; - - if (type.Interfaces.Any()) - { - interfaces.AddRange(type.Interfaces); - } - - if (type.BaseType != null && !type.BaseType.Name.Contains("Object")) - { - var baseTypeDefinition = MainModule?.Find(type.BaseType).ResolveTypeDef(); - var baseTypeInterfaces = GetFlattenedInterfacesRecursive(baseTypeDefinition!); - - if (baseTypeInterfaces.Any()) - { - interfaces.AddRange(baseTypeInterfaces); - } - } - - return interfaces; - } } \ No newline at end of file