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 InfiniteStamina v1.0.0
BepInEx\plugins\InfiniteStamina\InfiniteStamina.dll
Decompiled a week agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyCompany("InfiniteStamina")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("InfiniteStamina")] [assembly: AssemblyTitle("InfiniteStamina")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [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 InfiniteStamina { [HarmonyPatch(typeof(Player))] internal static class PlayerPatches { private static readonly FieldRef<Player, float> StaminaField = AccessTools.FieldRefAccess<Player, float>("m_stamina"); private static readonly FieldRef<Player, float> MaxStaminaField = AccessTools.FieldRefAccess<Player, float>("m_maxStamina"); private static readonly FieldRef<Player, float> RegenTimerField = AccessTools.FieldRefAccess<Player, float>("m_staminaRegenTimer"); private static bool _loggedUseStamina; private static bool _loggedHaveStamina; private static bool _loggedUpdate; [HarmonyPatch("UseStamina")] [HarmonyPrefix] private static bool UseStamina_Prefix(Player __instance) { if (!InfiniteStaminaPlugin.IsActive || !IsLocalPlayer(__instance)) { return true; } if (!_loggedUseStamina) { _loggedUseStamina = true; InfiniteStaminaPlugin.Log.LogInfo((object)"Patch greift: Player.UseStamina wird blockiert."); } Refill(__instance); return false; } [HarmonyPatch("HaveStamina")] [HarmonyPrefix] private static bool HaveStamina_Prefix(Player __instance, ref bool __result) { if (!InfiniteStaminaPlugin.IsActive || !IsLocalPlayer(__instance)) { return true; } if (!_loggedHaveStamina) { _loggedHaveStamina = true; InfiniteStaminaPlugin.Log.LogInfo((object)"Patch greift: Player.HaveStamina liefert immer true."); } Refill(__instance); __result = true; return false; } [HarmonyPatch("Update")] [HarmonyPostfix] private static void Update_Postfix(Player __instance) { if (InfiniteStaminaPlugin.IsActive && InfiniteStaminaPlugin.KeepBarFull.Value && IsLocalPlayer(__instance)) { if (!_loggedUpdate) { _loggedUpdate = true; InfiniteStaminaPlugin.Log.LogInfo((object)"Patch greift: Player.Update fuellt die Ausdauer jede Frame auf."); } Refill(__instance); } } private static bool IsLocalPlayer(Player player) { if ((Object)(object)player != (Object)null) { return (Object)(object)player == (Object)(object)Player.m_localPlayer; } return false; } private static void Refill(Player player) { float num = MaxStaminaField.Invoke(player); if (num > 0f && StaminaField.Invoke(player) < num) { StaminaField.Invoke(player) = num; } RegenTimerField.Invoke(player) = 0f; } } [BepInPlugin("com.kevin.valheim.infiniteStamina", "Infinite Stamina", "1.0.0")] public sealed class InfiniteStaminaPlugin : BaseUnityPlugin { public const string Guid = "com.kevin.valheim.infiniteStamina"; public const string ModName = "Infinite Stamina"; public const string ModVersion = "1.0.0"; internal static ConfigEntry<bool> Enabled; internal static ConfigEntry<bool> KeepBarFull; internal static ManualLogSource Log; private Harmony _harmony; internal static bool IsActive { get { if (Enabled != null) { return Enabled.Value; } return false; } } private void Awake() { //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; Enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Enabled", true, "Unendlich Ausdauer an/aus. Wirkt sofort, ohne Spielneustart."); KeepBarFull = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "KeepBarFull", true, "Ausdauer-Leiste jede Frame auf Maximum halten."); _harmony = new Harmony("com.kevin.valheim.infiniteStamina"); _harmony.PatchAll(typeof(PlayerPatches)); LogPatchState("UseStamina"); LogPatchState("HaveStamina"); LogPatchState("Update"); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Infinite Stamina v1.0.0 geladen - unendliche Ausdauer aktiv."); } private void OnDestroy() { if (_harmony != null) { _harmony.UnpatchSelf(); _harmony = null; } ((BaseUnityPlugin)this).Logger.LogInfo((object)"Infinite Stamina entladen."); } private void LogPatchState(string methodName) { MethodBase methodBase = AccessTools.Method(typeof(Player), methodName, (Type[])null, (Type[])null); if (methodBase == null) { ((BaseUnityPlugin)this).Logger.LogWarning((object)("Patch-Ziel nicht gefunden: Player." + methodName)); return; } Patches patchInfo = Harmony.GetPatchInfo(methodBase); int num = 0; if (patchInfo != null) { if (patchInfo.Prefixes != null) { num += patchInfo.Prefixes.Count; } if (patchInfo.Postfixes != null) { num += patchInfo.Postfixes.Count; } } if (num > 0) { ((BaseUnityPlugin)this).Logger.LogInfo((object)("Harmony-Patch registriert: Player." + methodName + " (" + num + ")")); } else { ((BaseUnityPlugin)this).Logger.LogWarning((object)("Harmony-Patch NICHT registriert: Player." + methodName)); } } } }