Please disclose if your mod was created primarily 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 AmIPvP v1.0.0
AmIPvP.dll
Decompiled 2 hours agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("AmIPvP")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("AmIPvP")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("71a6dcb2-978c-469f-9fbd-c5a399dd913c")] [assembly: AssemblyFileVersion("1.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [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] [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 AmIPvP { [BepInPlugin("EardwulfC.valheim.AmIPvP", "AmIPvP", "1.0.0")] public sealed class AmIPvP : BaseUnityPlugin { public const string PluginGuid = "EardwulfC.valheim.AmIPvP"; public const string PluginName = "AmIPvP"; public const string PluginVersion = "1.0.0"; public static bool IsMyPvPEnabled; public static int hashPvPOff; public static int hashPvPOn; private void Awake() { hashPvPOff = StringExtensionMethods.GetStableHashCode("AmIPvP_PvPOff"); hashPvPOn = StringExtensionMethods.GetStableHashCode("AmIPvP_PvPOn"); Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "EardwulfC.valheim.AmIPvP"); } } [HarmonyPatch(typeof(ObjectDB))] internal class ObjectDBPatches { [HarmonyPatch("Awake")] [HarmonyPostfix] public static void SetupStatusEffect(ObjectDB __instance) { if (__instance.m_StatusEffects.Any((StatusEffect effect) => ((Object)effect).name == "AmIPvP_PvPOff")) { return; } string spriteRequested1 = "pvp_off"; Sprite val = ((IEnumerable<Sprite>)Resources.FindObjectsOfTypeAll<Sprite>()).FirstOrDefault((Func<Sprite, bool>)((Sprite s1) => ((Object)s1).name == spriteRequested1)); if ((Object)(object)val == (Object)null) { ZLog.Log((object)("AmIPvP: Could not find sprite " + spriteRequested1 + " in loaded game resources.")); return; } StatusEffect val2 = ScriptableObject.CreateInstance<StatusEffect>(); ((Object)val2).name = "AmIPvP_PvPOff"; val2.m_name = "PvP Off"; val2.m_tooltip = "Your PvP is currently off."; val2.m_icon = val; __instance.m_StatusEffects.Add(val2); if (!__instance.m_StatusEffects.Any((StatusEffect effect) => ((Object)effect).name == "AmIPvP_PvPOn")) { string spriteRequested2 = "pvp_on"; Sprite val3 = ((IEnumerable<Sprite>)Resources.FindObjectsOfTypeAll<Sprite>()).FirstOrDefault((Func<Sprite, bool>)((Sprite s2) => ((Object)s2).name == spriteRequested2)); if ((Object)(object)val3 == (Object)null) { ZLog.Log((object)("AmIPvP: Could not find sprite " + spriteRequested2 + " in loaded game resources.")); return; } StatusEffect val4 = ScriptableObject.CreateInstance<StatusEffect>(); ((Object)val4).name = "AmIPvP_PvPOn"; val4.m_name = "PvP On"; val4.m_tooltip = "Your PvP is currently on."; val4.m_icon = val3; __instance.m_StatusEffects.Add(val4); } } } internal class PlayerPatches { [HarmonyPatch(typeof(Player))] private static class PlayerPatch { [HarmonyPostfix] [HarmonyPatch("SetPVP")] private static void IsPvPEnabledChecker(Player __instance, bool enabled) { if (!((Object)(object)__instance != (Object)(object)Player.m_localPlayer) && AmIPvP.IsMyPvPEnabled != enabled) { AmIPvP.IsMyPvPEnabled = enabled; } } } [HarmonyPatch(typeof(Player))] private static class UpdatePatch { [HarmonyPostfix] [HarmonyPatch("Update")] private static void UpdatePvPStatus(Player __instance) { if ((Object)(object)__instance != (Object)(object)Player.m_localPlayer) { return; } SEMan sEMan = ((Character)__instance).GetSEMan(); if ((Object)(object)sEMan.m_character != (Object)(object)Player.m_localPlayer) { return; } bool flag = sEMan.HaveStatusEffect(AmIPvP.hashPvPOff); bool flag2 = sEMan.HaveStatusEffect(AmIPvP.hashPvPOn); if (AmIPvP.IsMyPvPEnabled) { if (flag2 && !flag) { return; } if (!flag2) { sEMan.AddStatusEffect(AmIPvP.hashPvPOn, false, 0, 0f); } if (flag) { sEMan.RemoveStatusEffect(AmIPvP.hashPvPOff, false); } } if (!AmIPvP.IsMyPvPEnabled && (!flag || flag2)) { if (!flag) { sEMan.AddStatusEffect(AmIPvP.hashPvPOff, false, 0, 0f); } if (flag2) { sEMan.RemoveStatusEffect(AmIPvP.hashPvPOn, false); } } } } } }