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 ControlTime v1.0.0
plugins/ControlTime.dll
Decompiled a year agousing System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using Jotunn; using Jotunn.Entities; using Jotunn.Managers; using Jotunn.Utils; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("ControlTime")] [assembly: AssemblyDescription("Valheim mod")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ControlTime")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("Ujhik")] [assembly: ComVisible(false)] [assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")] [assembly: AssemblyFileVersion("1.0.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")] namespace ControlTime; [BepInPlugin("ujhik.ControlTime", "ControlTime", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] internal class JotunnModStub : BaseUnityPlugin { [HarmonyPatch(typeof(EnvMan), "Awake")] public static class EnvMan_Awake_Patch { private static void Postfix(ref long ___m_dayLengthSec, ref List<EnvSetup> ___m_environments, ref EnvMan ___s_instance) { ___m_dayLengthSec = getFullDaySecondsLength(); } } [HarmonyPatch(typeof(EnvMan), "FixedUpdate")] public static class EnvMan_Update_Patch { private static void Prefix(ref long ___m_dayLengthSec, ref EnvMan ___s_instance) { ___m_dayLengthSec = getFullDaySecondsLength(); if (Time.frameCount % 30 == 0 && debugLogging) { Logger.LogInfo((object)("isAdmin?: " + SynchronizationManager.Instance.PlayerIsAdmin)); Logger.LogInfo((object)("isNight?: " + EnvMan.s_isNight)); Logger.LogInfo((object)("Seconds full day: " + getFullDaySecondsLength())); Logger.LogInfo((object)("isRemoveRain: " + isRemoveRain.Value)); Logger.LogInfo((object)("isSkipNight: " + isSkipNight.Value)); Logger.LogInfo((object)("smoothDayFraction: " + ___s_instance.m_smoothDayFraction)); Logger.LogInfo((object)("ZNet time: " + ZNet.instance.m_netTime)); } if (isSkipNight.Value && EnvMan.s_isNight && !isForceTimeOfDay.Value) { Logger.LogInfo((object)("isNight?: " + EnvMan.s_isNight)); double timeSeconds = ZNet.instance.GetTimeSeconds(); double num = timeSeconds - (double)((float)___s_instance.m_dayLengthSec * 0.15f); int day = ___s_instance.GetDay(num); double morningStartSec = ___s_instance.GetMorningStartSec(day + 1); ___s_instance.m_skipTime = true; ___s_instance.m_skipToTime = morningStartSec; ___s_instance.m_timeSkipSpeed = skipTimeStep.Value; ZLog.Log((object)("Time " + timeSeconds + ", day:" + day + " nextm:" + morningStartSec + " skipspeed:" + ___s_instance.m_timeSkipSpeed)); } else { ___s_instance.m_skipTime = false; ___s_instance.m_timeSkipSpeed = 1.0; } if (isRemoveRain.Value && ___s_instance.IsEnvironment(new List<string> { "Rain", "LightRain", "ThunderStorm" })) { ___s_instance.QueueEnvironment("Twilight_Clear"); ___s_instance.QueueEnvironment("Clear"); } if (isForceTimeOfDay.Value) { ___s_instance.m_debugTimeOfDay = true; ___s_instance.m_debugTime = forcedTimeOfDayFraction.Value; } else { ___s_instance.m_debugTimeOfDay = false; } } } public const string PluginGUID = "ujhik.ControlTime"; public const string PluginName = "ControlTime"; public const string PluginVersion = "1.0.0"; private static bool debugLogging = false; private static ConfigEntry<long> configMinutesFullDayLength; private static ConfigEntry<bool> isRemoveRain; private static ConfigEntry<bool> isSkipNight; private static ConfigEntry<int> skipTimeStep; private static ConfigEntry<bool> isForceTimeOfDay; private static ConfigEntry<float> forcedTimeOfDayFraction; private Harmony _harmony; public static CustomLocalization Localization = LocalizationManager.Instance.GetLocalization(); private void Awake() { CreateConfigValues(); _harmony = Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "ujhik.ControlTime"); } private void CreateConfigValues() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Expected O, but got Unknown //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Expected O, but got Unknown //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Expected O, but got Unknown //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Expected O, but got Unknown //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Expected O, but got Unknown //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Expected O, but got Unknown ConfigurationManagerAttributes val = new ConfigurationManagerAttributes { IsAdminOnly = true }; AcceptableValueRange<float> val2 = new AcceptableValueRange<float>(0f, 1f); configMinutesFullDayLength = ((BaseUnityPlugin)this).Config.Bind<long>("General", "minutesFullDayLength", 60L, new ConfigDescription("How much minutes a day lasts (From the \"day n\" to the \"day n-1\", so includes daylight/night)", (AcceptableValueBase)null, new object[1] { val })); isRemoveRain = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "isRemoveRain", false, new ConfigDescription("Disable rain weather", (AcceptableValueBase)null, new object[1] { val })); isSkipNight = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "isRemoveNight", false, new ConfigDescription("Skip night", (AcceptableValueBase)null, new object[1] { val })); skipTimeStep = ((BaseUnityPlugin)this).Config.Bind<int>("General", "skipTimeStep", 1, new ConfigDescription("Skip time step", (AcceptableValueBase)null, new object[1] { val })); isForceTimeOfDay = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "isForceTimeOfDay", false, new ConfigDescription("Force the status of sun/moon fixed in time", (AcceptableValueBase)null, new object[1] { val })); forcedTimeOfDayFraction = ((BaseUnityPlugin)this).Config.Bind<float>("General", "forcedTimeOfDayFraction", 0.5f, new ConfigDescription("Number between 0 and 1 that represents the time of day. 0-> Night, 0.26 -> Sunrise, 0.5-> Midday, 0.9-> Midnight", (AcceptableValueBase)(object)val2, new object[1] { val })); } private void OnDestroy() { Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } } public static long getFullDaySecondsLength() { return configMinutesFullDayLength.Value * 60; } }