Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of R2API StringSerializerExtensions v1.0.0
plugins/R2API.StringSerializerExtensions/R2API.StringSerializerExtensions.dll
Decompiled 2 years agousing System; using System.Diagnostics; using System.Globalization; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HG.GeneralSerializer; using Microsoft.CodeAnalysis; using MonoMod.RuntimeDetour; using R2API.AutoVersionGen; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyCompany("R2API.StringSerializerExtensions")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("R2API.StringSerializerExtensions")] [assembly: AssemblyTitle("R2API.StringSerializerExtensions")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class IsReadOnlyAttribute : Attribute { } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace System.Diagnostics.CodeAnalysis { [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class AllowNullAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class DisallowNullAttribute : Attribute { } [AttributeUsage(AttributeTargets.Method, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class DoesNotReturnAttribute : Attribute { } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class DoesNotReturnIfAttribute : Attribute { public bool ParameterValue { get; } public DoesNotReturnIfAttribute(bool parameterValue) { ParameterValue = parameterValue; } } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class MaybeNullAttribute : Attribute { } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class MaybeNullWhenAttribute : Attribute { public bool ReturnValue { get; } public MaybeNullWhenAttribute(bool returnValue) { ReturnValue = returnValue; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class MemberNotNullAttribute : Attribute { public string[] Members { get; } public MemberNotNullAttribute(string member) { Members = new string[1] { member }; } public MemberNotNullAttribute(params string[] members) { Members = members; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class MemberNotNullWhenAttribute : Attribute { public bool ReturnValue { get; } public string[] Members { get; } public MemberNotNullWhenAttribute(bool returnValue, string member) { ReturnValue = returnValue; Members = new string[1] { member }; } public MemberNotNullWhenAttribute(bool returnValue, params string[] members) { ReturnValue = returnValue; Members = members; } } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class NotNullAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Parameter | AttributeTargets.ReturnValue, AllowMultiple = true, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class NotNullIfNotNullAttribute : Attribute { public string ParameterName { get; } public NotNullIfNotNullAttribute(string parameterName) { ParameterName = parameterName; } } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class NotNullWhenAttribute : Attribute { public bool ReturnValue { get; } public NotNullWhenAttribute(bool returnValue) { ReturnValue = returnValue; } } } namespace R2API { [AutoVersion] public static class StringSerializerExtensions { private struct EnumJSONIntermediate { public string assemblyQualifiedName; public string values; public static Enum ToEnum(in EnumJSONIntermediate intermediate) { return (Enum)Enum.Parse(Type.GetType(intermediate.assemblyQualifiedName), intermediate.values); } public static EnumJSONIntermediate ToJSON(Enum @enum) { EnumJSONIntermediate result = default(EnumJSONIntermediate); result.assemblyQualifiedName = @enum.GetType().AssemblyQualifiedName; result.values = @enum.ToString(); return result; } } internal const string PluginGUID = "com.bepis.r2api.extendedStringSerializer"; internal const string PluginName = "R2API.ExtendedStringSerializer"; private static readonly SerializationHandler _enumTypeHandler; private static Hook _canSerializeTypeHook; private static Hook _deserializeHook; private static Hook _serializeHook; public const string PluginVersion = "1.0.0"; private static CultureInfo Invariant => CultureInfo.InvariantCulture; private static bool AllowEnumSerialization(Func<Type, bool> orig, Type type) { if (!orig(type)) { return type.IsEnum; } return true; } private static object HandleEnumDeserialization(Func<Type, string, object> orig, Type type, string str) { object obj = orig(type, str); if (obj == null) { if (!type.IsEnum) { return null; } obj = _enumTypeHandler.deserializer.Invoke(str); } return obj; } private static string HandleEnumSerialization(Func<Type, object, string> orig, Type type, object value) { string text = orig(type, value); if (text == null) { if (!type.IsEnum) { return null; } text = _enumTypeHandler.serializer.Invoke(value); } return text; } internal static void ApplyHooks() { _canSerializeTypeHook.Apply(); _deserializeHook.Apply(); _serializeHook.Apply(); } internal static void UndoHooks() { _canSerializeTypeHook.Undo(); _deserializeHook.Undo(); _serializeHook.Undo(); } internal static void FreeHooks() { _canSerializeTypeHook.Free(); _deserializeHook.Free(); _serializeHook.Free(); } static StringSerializerExtensions() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Expected O, but got Unknown //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Expected O, but got Unknown //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Expected O, but got Unknown //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Expected O, but got Unknown //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Expected O, but got Unknown //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Expected O, but got Unknown //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Expected O, but got Unknown //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Expected O, but got Unknown //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Expected O, but got Unknown //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Expected O, but got Unknown //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Expected O, but got Unknown //IL_0248: Unknown result type (might be due to invalid IL or missing references) //IL_0252: Expected O, but got Unknown //IL_0252: Unknown result type (might be due to invalid IL or missing references) //IL_0269: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Expected O, but got Unknown //IL_0293: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Expected O, but got Unknown //IL_029d: Unknown result type (might be due to invalid IL or missing references) //IL_02b4: Unknown result type (might be due to invalid IL or missing references) //IL_02c7: Unknown result type (might be due to invalid IL or missing references) //IL_02d1: Expected O, but got Unknown //IL_02de: Unknown result type (might be due to invalid IL or missing references) //IL_02e8: Expected O, but got Unknown //IL_02e8: Unknown result type (might be due to invalid IL or missing references) //IL_02f0: Unknown result type (might be due to invalid IL or missing references) //IL_0303: Unknown result type (might be due to invalid IL or missing references) //IL_030d: Expected O, but got Unknown //IL_031a: Unknown result type (might be due to invalid IL or missing references) //IL_0324: Expected O, but got Unknown //IL_0324: Unknown result type (might be due to invalid IL or missing references) //IL_0325: Unknown result type (might be due to invalid IL or missing references) //IL_032c: Unknown result type (might be due to invalid IL or missing references) //IL_033a: Unknown result type (might be due to invalid IL or missing references) //IL_033b: Unknown result type (might be due to invalid IL or missing references) //IL_035d: Unknown result type (might be due to invalid IL or missing references) //IL_035e: Unknown result type (might be due to invalid IL or missing references) //IL_0368: Expected O, but got Unknown //IL_0389: Unknown result type (might be due to invalid IL or missing references) //IL_038a: Unknown result type (might be due to invalid IL or missing references) //IL_0394: Expected O, but got Unknown //IL_03b5: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_03c0: Expected O, but got Unknown StringSerializer.serializationHandlers.Add(typeof(LayerMask), new SerializationHandler { serializer = (SerializerDelegate)delegate(object obj) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) LayerMask val15 = (LayerMask)obj; return ((LayerMask)(ref val15)).value.ToString(Invariant); }, deserializer = (DeserializerDelegate)delegate(string str) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) LayerMask val14 = default(LayerMask); ((LayerMask)(ref val14)).value = int.Parse(str, Invariant); return val14; } }); StringSerializer.serializationHandlers.Add(typeof(Vector4), new SerializationHandler { serializer = (SerializerDelegate)delegate(object obj) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) Vector4 val13 = (Vector4)obj; return val13.x.ToString(Invariant) + " " + val13.y.ToString(Invariant) + " " + val13.z.ToString(Invariant) + " " + val13.w.ToString(Invariant); }, deserializer = (DeserializerDelegate)delegate(string str) { //IL_0046: Unknown result type (might be due to invalid IL or missing references) string[] array9 = StringSerializer.SplitToComponents(str, typeof(Vector4), 4); return (object)new Vector4(float.Parse(array9[0], Invariant), float.Parse(array9[1], Invariant), float.Parse(array9[2], Invariant), float.Parse(array9[3], Invariant)); } }); StringSerializer.serializationHandlers.Add(typeof(Rect), new SerializationHandler { serializer = (SerializerDelegate)delegate(object obj) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) Rect val12 = (Rect)obj; return ((Rect)(ref val12)).x.ToString(Invariant) + " " + ((Rect)(ref val12)).y.ToString(Invariant) + " " + ((Rect)(ref val12)).width.ToString(Invariant) + " " + ((Rect)(ref val12)).height.ToString(Invariant); }, deserializer = (DeserializerDelegate)delegate(string str) { //IL_0046: Unknown result type (might be due to invalid IL or missing references) string[] array8 = StringSerializer.SplitToComponents(str, typeof(Rect), 4); return (object)new Rect(float.Parse(array8[0], Invariant), float.Parse(array8[1], Invariant), float.Parse(array8[2], Invariant), float.Parse(array8[3], Invariant)); } }); StringSerializer.serializationHandlers.Add(typeof(RectInt), new SerializationHandler { serializer = (SerializerDelegate)delegate(object obj) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) RectInt val11 = (RectInt)obj; return ((RectInt)(ref val11)).x.ToString(Invariant) + " " + ((RectInt)(ref val11)).y.ToString(Invariant) + " " + ((RectInt)(ref val11)).width.ToString(Invariant) + " " + ((RectInt)(ref val11)).height.ToString(Invariant); }, deserializer = (DeserializerDelegate)delegate(string str) { //IL_0046: Unknown result type (might be due to invalid IL or missing references) string[] array7 = StringSerializer.SplitToComponents(str, typeof(RectInt), 4); return (object)new RectInt(int.Parse(array7[0], Invariant), int.Parse(array7[1], Invariant), int.Parse(array7[2], Invariant), int.Parse(array7[3], Invariant)); } }); StringSerializer.serializationHandlers.Add(typeof(char), new SerializationHandler { serializer = (SerializerDelegate)((object obj) => ((char)obj).ToString(Invariant)), deserializer = (DeserializerDelegate)((string str) => char.Parse(str)) }); StringSerializer.serializationHandlers.Add(typeof(Bounds), new SerializationHandler { serializer = (SerializerDelegate)delegate(object obj) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) Bounds val10 = (Bounds)obj; return ((Bounds)(ref val10)).center.x.ToString(Invariant) + " " + ((Bounds)(ref val10)).center.y.ToString(Invariant) + " " + ((Bounds)(ref val10)).center.z.ToString(Invariant) + " " + ((Bounds)(ref val10)).size.x.ToString(Invariant) + " " + ((Bounds)(ref val10)).size.y.ToString(Invariant) + " " + ((Bounds)(ref val10)).size.z.ToString(Invariant); }, deserializer = (DeserializerDelegate)delegate(string str) { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) string[] array6 = StringSerializer.SplitToComponents(str, typeof(Bounds), 6); Vector3 val8 = new Vector3(float.Parse(array6[0], Invariant), float.Parse(array6[1], Invariant), float.Parse(array6[2], Invariant)); Vector3 val9 = default(Vector3); ((Vector3)(ref val9))..ctor(float.Parse(array6[3], Invariant), float.Parse(array6[4], Invariant), float.Parse(array6[5], Invariant)); return (object)new Bounds(val8, val9); } }); StringSerializer.serializationHandlers.Add(typeof(BoundsInt), new SerializationHandler { serializer = (SerializerDelegate)delegate(object obj) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) BoundsInt val6 = (BoundsInt)obj; string[] array5 = new string[11]; Vector3Int val7 = ((BoundsInt)(ref val6)).position; array5[0] = ((Vector3Int)(ref val7)).x.ToString(Invariant); array5[1] = " "; val7 = ((BoundsInt)(ref val6)).position; array5[2] = ((Vector3Int)(ref val7)).y.ToString(Invariant); array5[3] = " "; val7 = ((BoundsInt)(ref val6)).position; array5[4] = ((Vector3Int)(ref val7)).z.ToString(Invariant); array5[5] = " "; val7 = ((BoundsInt)(ref val6)).size; array5[6] = ((Vector3Int)(ref val7)).x.ToString(Invariant); array5[7] = " "; val7 = ((BoundsInt)(ref val6)).size; array5[8] = ((Vector3Int)(ref val7)).y.ToString(Invariant); array5[9] = " "; val7 = ((BoundsInt)(ref val6)).size; array5[10] = ((Vector3Int)(ref val7)).z.ToString(Invariant); return string.Concat(array5); }, deserializer = (DeserializerDelegate)delegate(string str) { //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) string[] array4 = StringSerializer.SplitToComponents(str, typeof(BoundsInt), 6); Vector3Int position = default(Vector3Int); ((Vector3Int)(ref position))..ctor(int.Parse(array4[0], Invariant), int.Parse(array4[1], Invariant), int.Parse(array4[2], Invariant)); Vector3Int size = default(Vector3Int); ((Vector3Int)(ref size))..ctor(int.Parse(array4[3], Invariant), int.Parse(array4[4], Invariant), int.Parse(array4[5], Invariant)); BoundsInt val5 = default(BoundsInt); ((BoundsInt)(ref val5)).position = position; ((BoundsInt)(ref val5)).size = size; return val5; } }); StringSerializer.serializationHandlers.Add(typeof(Quaternion), new SerializationHandler { serializer = (SerializerDelegate)delegate(object obj) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) Quaternion val4 = (Quaternion)obj; return val4.x.ToString(Invariant) + " " + val4.y.ToString(Invariant) + " " + val4.z.ToString(Invariant) + " " + val4.w.ToString(Invariant); }, deserializer = (DeserializerDelegate)delegate(string str) { //IL_0046: Unknown result type (might be due to invalid IL or missing references) string[] array3 = StringSerializer.SplitToComponents(str, typeof(Quaternion), 4); return (object)new Quaternion(float.Parse(array3[0], Invariant), float.Parse(array3[1], Invariant), float.Parse(array3[2], Invariant), float.Parse(array3[3], Invariant)); } }); StringSerializer.serializationHandlers.Add(typeof(Vector2Int), new SerializationHandler { serializer = (SerializerDelegate)delegate(object obj) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) Vector2Int val3 = (Vector2Int)obj; return ((Vector2Int)(ref val3)).x.ToString(Invariant) + " " + ((Vector2Int)(ref val3)).y.ToString(Invariant); }, deserializer = (DeserializerDelegate)delegate(string str) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) string[] array2 = StringSerializer.SplitToComponents(str, typeof(Vector2Int), 2); return (object)new Vector2Int(int.Parse(array2[0], Invariant), int.Parse(array2[1], Invariant)); } }); StringSerializer.serializationHandlers.Add(typeof(Vector3Int), new SerializationHandler { serializer = (SerializerDelegate)delegate(object obj) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) Vector3Int val2 = (Vector3Int)obj; return ((Vector3Int)(ref val2)).x.ToString(Invariant) + " " + ((Vector3Int)(ref val2)).y.ToString(Invariant) + " " + ((Vector3Int)(ref val2)).z.ToString(Invariant); }, deserializer = (DeserializerDelegate)delegate(string str) { //IL_0039: Unknown result type (might be due to invalid IL or missing references) string[] array = StringSerializer.SplitToComponents(str, typeof(Vector3Int), 3); return (object)new Vector3Int(int.Parse(array[0], Invariant), int.Parse(array[1], Invariant), int.Parse(array[2], Invariant)); } }); _enumTypeHandler = new SerializationHandler { serializer = (SerializerDelegate)((object obj) => JsonUtility.ToJson((object)EnumJSONIntermediate.ToJSON((Enum)obj))), deserializer = (DeserializerDelegate)delegate(string str) { if (string.IsNullOrEmpty(str)) { return null; } EnumJSONIntermediate intermediate = JsonUtility.FromJson<EnumJSONIntermediate>(str); return EnumJSONIntermediate.ToEnum(in intermediate); } }; HookConfig val = new HookConfig { ManualApply = true }; _canSerializeTypeHook = new Hook((MethodBase)typeof(StringSerializer).GetMethod("CanSerializeType", (BindingFlags)(-1)), (Delegate)new Func<Func<Type, bool>, Type, bool>(AllowEnumSerialization), val); _deserializeHook = new Hook((MethodBase)typeof(StringSerializer).GetMethod("Deserialize", (BindingFlags)(-1)), (Delegate)new Func<Func<Type, string, object>, Type, string, object>(HandleEnumDeserialization), val); _serializeHook = new Hook((MethodBase)typeof(StringSerializer).GetMethod("Serialize", (BindingFlags)(-1)), (Delegate)new Func<Func<Type, object, string>, Type, object, string>(HandleEnumSerialization), val); } } [BepInPlugin("com.bepis.r2api.extendedStringSerializer", "R2API.ExtendedStringSerializer", "1.0.0")] internal sealed class StringSerializerExtensionsPlugin : BaseUnityPlugin { internal static ManualLogSource Logger { get; set; } private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; } private void OnEnable() { StringSerializerExtensions.ApplyHooks(); } private void OnDisable() { StringSerializerExtensions.UndoHooks(); } private void OnDestroy() { StringSerializerExtensions.FreeHooks(); } } } namespace R2API.AutoVersionGen { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] internal class AutoVersionAttribute : Attribute { } }