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 JanooBalance v1.0.5
JanooBalance.dll
Decompiled 10 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; 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.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("JanooBalance")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("JanooBalance")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("987DE4A8-C340-4AE7-80A7-B27AC864F76B")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] [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 JanooBalance { public class CraftingRange : BaseUnityPlugin { [HarmonyPatch(typeof(ObjectDB), "Awake")] public static class Workbench_Patch { [Serializable] private struct CraftingStationRange { public float RangeBuild; public float DiscoverRange; public float ProjectionRadius; } private static readonly Dictionary<CraftingStation, CraftingStationRange> _originalCraftingStationRanges = new Dictionary<CraftingStation, CraftingStationRange>(); private static void Prefix(ref ObjectDB __instance) { if (_originalCraftingStationRanges.Count == 0) { GetOriginalValues(); } if (Main.configCraftingRangeMulti == null) { Main.logger.LogError((object)"configCraftingRangeMulti is null, cannot subscribe to setting changes."); return; } Main.configCraftingRangeMulti.SettingChanged -= OnRangeSettingChanged; Main.configCraftingRangeMulti.SettingChanged += OnRangeSettingChanged; } private static void Postfix(ref ObjectDB __instance) { UpdateStations(); } private static void GetOriginalValues() { _originalCraftingStationRanges.Clear(); CraftingStation[] array = Resources.FindObjectsOfTypeAll<CraftingStation>(); CraftingStation[] array2 = array; foreach (CraftingStation val in array2) { CircleProjector componentInChildren = ((Component)val).GetComponentInChildren<CircleProjector>(); _originalCraftingStationRanges.Add(val, new CraftingStationRange { RangeBuild = val.m_rangeBuild, DiscoverRange = val.m_discoverRange, ProjectionRadius = (Object.op_Implicit((Object)(object)componentInChildren) ? componentInChildren.m_radius : 0f) }); } } private static void OnRangeSettingChanged(object sender, EventArgs args) { Main.logger.LogInfo((object)"Crafting range setting changed, updating stations."); UpdateStations(); } private static void UpdateStations() { float multiplier = Main.configCraftingRangeMulti.Value; CraftingStation[] array = Resources.FindObjectsOfTypeAll<CraftingStation>(); CraftingStation[] array2 = array; foreach (CraftingStation craftingStation2 in array2) { UpdateStation(craftingStation2); } CraftingStation[] array3 = Object.FindObjectsByType<CraftingStation>((FindObjectsInactive)1, (FindObjectsSortMode)0); CraftingStation[] array4 = array3; foreach (CraftingStation craftingStation3 in array4) { UpdateStation(craftingStation3); } void UpdateStation(CraftingStation craftingStation) { if (_originalCraftingStationRanges.TryGetValue(craftingStation, out var value)) { craftingStation.m_rangeBuild = value.RangeBuild * multiplier; craftingStation.m_discoverRange = value.DiscoverRange * multiplier; CircleProjector componentInChildren = ((Component)craftingStation).GetComponentInChildren<CircleProjector>(); if (Object.op_Implicit((Object)(object)componentInChildren)) { componentInChildren.m_radius = value.ProjectionRadius * multiplier; } } } } } } [BepInPlugin("com.Janooba.JanooBalance", "JanooBalance", "1.0.4")] public class Main : BaseUnityPlugin { public const string pluginGUID = "com.Janooba.JanooBalance"; public const string pluginName = "JanooBalance"; public const string pluginVersion = "1.0.4"; private readonly Harmony _harmony = new Harmony("com.Janooba.JanooBalance"); public static ManualLogSource logger = Logger.CreateLogSource("JanooBalance"); private static string ConfigFileName = "com.Janooba.JanooBalance.cfg"; private static string ConfigFileFullPath; public static ConfigEntry<float> configRestedMinutes; public static ConfigEntry<float> configStaminaRegen; public static ConfigEntry<float> configDeathsquitoDamage; public static ConfigEntry<int> configMudpileDropMin; public static ConfigEntry<int> configMudpileDropMax; public static ConfigEntry<float> configMudpileDropChance; public static ConfigEntry<float> configCraftingRangeMulti; public static ConfigEntry<int> configStoneWall_4x2; public static ConfigEntry<int> configStoneWall_2x1; public static ConfigEntry<int> configStoneWall_1x1; public static ConfigEntry<int> configStoneFloor_2x2; public static ConfigEntry<int> configStoneArch; public static ConfigEntry<int> configStonePillar; public static ConfigEntry<int> configStoneStair; public static ConfigEntry<int> configBronzeOutput; public static ConfigEntry<int> configBronze5Output; public static ConfigEntry<float> configBoarTameTime; public static ConfigEntry<float> configWolfTameTime; public static ConfigEntry<float> configLoxTameTime; private void Awake() { logger.LogWarning((object)"Binding Configs for JanooBalance..."); ((BaseUnityPlugin)this).Config.SaveOnConfigSet = false; BindConfig(); ((BaseUnityPlugin)this).Config.Save(); ((BaseUnityPlugin)this).Config.SaveOnConfigSet = true; SetupWatcher(); Assembly executingAssembly = Assembly.GetExecutingAssembly(); _harmony.PatchAll(executingAssembly); } private void OnDestroy() { ((BaseUnityPlugin)this).Config.Save(); } private void SetupWatcher() { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ConfigFileName); fileSystemWatcher.Changed += ReadConfigValues; fileSystemWatcher.Created += ReadConfigValues; fileSystemWatcher.Renamed += ReadConfigValues; fileSystemWatcher.IncludeSubdirectories = true; fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject; fileSystemWatcher.EnableRaisingEvents = true; } private void ReadConfigValues(object sender, FileSystemEventArgs e) { if (!File.Exists(ConfigFileFullPath)) { return; } try { logger.LogDebug((object)"Attempting to reload configuration..."); ((BaseUnityPlugin)this).Config.Reload(); } catch { logger.LogError((object)("There was an issue loading " + ConfigFileName)); } } private void BindConfig() { configRestedMinutes = ((BaseUnityPlugin)this).Config.Bind<float>("Player", "RestedMinutes", 5f, "How many minutes each level of rested provides. Vanilla is 1"); configStaminaRegen = ((BaseUnityPlugin)this).Config.Bind<float>("Player", "StaminaRegen", 14f, "How fast to regenerate stamina. Vanilla is 5"); configDeathsquitoDamage = ((BaseUnityPlugin)this).Config.Bind<float>("Enemy", "DeathsquitoDamage", 60f, "How much pierce damage a deathsquito attack deals. Vanilla is 90"); configMudpileDropMin = ((BaseUnityPlugin)this).Config.Bind<int>("Drops", "MudPileDropMin", 1, "Minimum dropped items. Vanilla is 1"); configMudpileDropMax = ((BaseUnityPlugin)this).Config.Bind<int>("Drops", "MudPileDropMax", 2, "Maximum dropped items. Vanilla is 1"); configMudpileDropChance = ((BaseUnityPlugin)this).Config.Bind<float>("Drops", "MudPileDropChance", 1f, "Item drop chance, 0 to 1. Vanilla is 0.5"); configStoneWall_4x2 = ((BaseUnityPlugin)this).Config.Bind<int>("Stone Costs", "StoneWall4x2", 8, "The cost of the StoneWall4x2 piece. Vanilla is 6."); configStoneWall_2x1 = ((BaseUnityPlugin)this).Config.Bind<int>("Stone Costs", "StoneWall2x1", 2, "The cost of the StoneWall2x1 piece. Vanilla is 6."); configStoneWall_1x1 = ((BaseUnityPlugin)this).Config.Bind<int>("Stone Costs", "StoneWall1x1", 1, "The cost of the StoneWall1x1 piece. Vanilla is 3."); configStoneFloor_2x2 = ((BaseUnityPlugin)this).Config.Bind<int>("Stone Costs", "StoneFloor2x2", 4, "The cost of the StoneFloor2x2 piece. Vanilla is 6."); configStoneArch = ((BaseUnityPlugin)this).Config.Bind<int>("Stone Costs", "StoneArch", 2, "The cost of the StoneArch piece. Vanilla is 4."); configStonePillar = ((BaseUnityPlugin)this).Config.Bind<int>("Stone Costs", "StonePillar", 2, "The cost of the StonePillar piece. Vanilla is 5."); configStoneStair = ((BaseUnityPlugin)this).Config.Bind<int>("Stone Costs", "StoneStair", 4, "The cost of the StoneStair piece. Vanilla is 8."); configCraftingRangeMulti = ((BaseUnityPlugin)this).Config.Bind<float>("Stations", "CraftingRangeMultiplier", 3f, "Value to multiply the crafting station range by."); configBronzeOutput = ((BaseUnityPlugin)this).Config.Bind<int>("Bronze Output", "BronzeOutput", 2, "The amount of bronze a single craft results in. Vanilla is 1"); configBronze5Output = ((BaseUnityPlugin)this).Config.Bind<int>("Bronze Output", "Bronze5Output", 10, "The amount of bronze the bulk craft results in. Vanilla is 5"); configBoarTameTime = ((BaseUnityPlugin)this).Config.Bind<float>("Taming", "BoarTameTime", 30f, "The time to tame a boar, in minutes. Vanilla is 30"); configWolfTameTime = ((BaseUnityPlugin)this).Config.Bind<float>("Taming", "WolfTameTime", 30f, "The time to tame a boar, in minutes. Vanilla is 30"); configLoxTameTime = ((BaseUnityPlugin)this).Config.Bind<float>("Taming", "LoxTameTime", 30f, "The time to tame a boar, in minutes. Vanilla is 30"); } static Main() { string configPath = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName; } } public class Patch : BaseUnityPlugin { [HarmonyPatch(typeof(SE_Rested), "UpdateTTL")] public static class Rested_Patch { private static void Prefix(ref float ___m_TTLPerComfortLevel) { ___m_TTLPerComfortLevel = 60f * Main.configRestedMinutes.Value; } } [HarmonyPatch(typeof(Player), "UpdateStats", new Type[] { typeof(float) })] public static class StaminaRegen_Patch { private static void Prefix(ref float ___m_staminaRegen) { ___m_staminaRegen = Main.configStaminaRegen.Value; } } [HarmonyPatch(typeof(ObjectDB), "Awake")] public static class Resources_Patch { private static void Postfix(ref ObjectDB __instance) { Main.logger.LogInfo((object)"Applying Deathsquito sting damage"); ItemDrop[] array = Resources.FindObjectsOfTypeAll<ItemDrop>(); ItemDrop[] array2 = array; foreach (ItemDrop val in array2) { if (val.m_itemData.IsWeapon() && ((Object)val).name == "Deathsquito_sting") { val.m_itemData.m_shared.m_damages.m_pierce = Main.configDeathsquitoDamage.Value; } } Main.logger.LogInfo((object)"Applying Mudpile drop changes"); MineRock[] array3 = Resources.FindObjectsOfTypeAll<MineRock>(); MineRock[] array4 = array3; foreach (MineRock val2 in array4) { if (((Object)val2).name == "mudpile_old") { val2.m_dropItems.m_dropMin = Main.configMudpileDropMin.Value; val2.m_dropItems.m_dropMax = Main.configMudpileDropMax.Value; val2.m_dropItems.m_dropChance = Main.configMudpileDropChance.Value; } } Main.logger.LogInfo((object)"Applying Stone piece costs"); Piece[] array5 = Resources.FindObjectsOfTypeAll<Piece>(); Piece[] array6 = array5; foreach (Piece val3 in array6) { if (val3.m_resources != null && val3.m_resources.Length != 0) { Requirement val4 = val3.m_resources[0]; string name = ((Object)val3).name; if (1 == 0) { } int amount = name switch { "stone_wall_4x2" => Main.configStoneWall_4x2.Value, "stone_wall_2x1" => Main.configStoneWall_2x1.Value, "stone_wall_1x1" => Main.configStoneWall_1x1.Value, "stone_floor_2x2" => Main.configStoneFloor_2x2.Value, "stone_arch" => Main.configStoneArch.Value, "stone_pillar" => Main.configStonePillar.Value, "stone_stair" => Main.configStoneStair.Value, _ => val3.m_resources[0].m_amount, }; if (1 == 0) { } val4.m_amount = amount; } } Main.logger.LogInfo((object)"Applying Bronze output changes"); Recipe[] array7 = Resources.FindObjectsOfTypeAll<Recipe>(); Recipe[] array8 = array7; foreach (Recipe val5 in array8) { Recipe val6 = val5; string name2 = ((Object)val5).name; if (1 == 0) { } int amount = ((name2 == "Bronze") ? Main.configBronzeOutput.Value : ((!(name2 == "Bronze5")) ? val5.m_amount : Main.configBronze5Output.Value)); if (1 == 0) { } val6.m_amount = amount; } Main.logger.LogInfo((object)"Applying Tameable taming time changes"); Tameable[] array9 = Resources.FindObjectsOfTypeAll<Tameable>(); Tameable[] array10 = array9; foreach (Tameable val7 in array10) { Tameable val8 = val7; string name3 = ((Object)val7).name; if (1 == 0) { } float tamingTime = name3 switch { "Boar" => 60f * Main.configBoarTameTime.Value, "Wolf" => 60f * Main.configWolfTameTime.Value, "Lox" => 60f * Main.configLoxTameTime.Value, _ => val7.m_tamingTime, }; if (1 == 0) { } val8.m_tamingTime = tamingTime; } } } } public class Raid : BaseUnityPlugin { public static class RaidDifficulty_Patch { private static void Prefix(ref List<RandomEvent> ___m_events) { foreach (RandomEvent ___m_event in ___m_events) { if (!___m_event.m_name.Contains("army_")) { continue; } Main.logger.LogWarning((object)("Applying Raid difficulty changes for event: " + ___m_event.m_name)); foreach (SpawnData item in ___m_event.m_spawn) { Main.logger.LogInfo((object)("- Prefab Name: " + ((Object)item.m_prefab).name + "\n" + $" - Group Size Min: {item.m_groupSizeMin}\n" + $" - Group Size Max: {item.m_groupSizeMax}\n" + $" - Spawn Interval: {item.m_spawnInterval}\n" + $" - Max Spawned: {item.m_maxSpawned}\n")); } } } } } }