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 MineshaftRescaler v1.2.0
Tomatobird.MineshaftRescaler.dll
Decompiled a month agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using Dawn; using DunGen.Graph; using HarmonyLib; using Microsoft.CodeAnalysis; using MineshaftRescaler.Patches; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: IgnoresAccessChecksTo("com.github.teamxiaolan.dawnlib")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Tomatobird.MineshaftRescaler")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.2.0.0")] [assembly: AssemblyInformationalVersion("1.2.0+b5b14e2ea6c5fc2d24a7a667ec34d931031de979")] [assembly: AssemblyProduct("MineshaftRescaler")] [assembly: AssemblyTitle("Tomatobird.MineshaftRescaler")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.2.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [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] [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] [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 MineshaftRescaler { [BepInPlugin("Tomatobird.MineshaftRescaler", "MineshaftRescaler", "1.2.0")] public class MineshaftRescaler : BaseUnityPlugin { public static bool applyMineshaftSizeChanges; public static ConfigEntry<int> minLength; public static ConfigEntry<int> maxLength; public static ConfigEntry<int> minBranches; public static ConfigEntry<int> maxBranches; public static ConfigEntry<float> mainLength; public static ConfigEntry<float> cavesLength; public static ConfigEntry<float> fireLength; public static bool changeMineshaftLootBonus; public static ConfigEntry<int> lootAmountBonus; internal static bool isDawnLibLoaded; public static MineshaftRescaler Instance { get; private set; } internal static ManualLogSource Logger { get; private set; } internal static Harmony? Harmony { get; set; } private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; Instance = this; applyMineshaftSizeChanges = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "ApplyMineshaftSizeChanges", true, "Applies the mineshaft size changes listed below.").Value; minLength = ((BaseUnityPlugin)this).Config.Bind<int>("General", "MinLength", 14, "Minimum generation length"); maxLength = ((BaseUnityPlugin)this).Config.Bind<int>("General", "MaxLength", 18, "Maximum generation length"); minBranches = ((BaseUnityPlugin)this).Config.Bind<int>("General", "MinBranches", 14, "Minimum amount of branches to generate"); maxBranches = ((BaseUnityPlugin)this).Config.Bind<int>("General", "MaxBranches", 18, "Maximum amount of branches to generate"); mainLength = ((BaseUnityPlugin)this).Config.Bind<float>("General", "MainLength", 0.25f, "Relative length of the Main side section."); cavesLength = ((BaseUnityPlugin)this).Config.Bind<float>("General", "CavesLength", 0.6f, "Relative length of the caves section."); fireLength = ((BaseUnityPlugin)this).Config.Bind<float>("General", "FireLength", 0.15f, "Relative length of the Fire side section."); changeMineshaftLootBonus = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "ChangeMineshaftLootBonus", false, "Change the bonus amount of loot to spawn in the mineshaft interior.").Value; lootAmountBonus = ((BaseUnityPlugin)this).Config.Bind<int>("General", "LootAmountBonus", 6, "Amount of extra loot to spawn in mineshaft."); isDawnLibLoaded = Chainloader.PluginInfos.ContainsKey("com.github.teamxiaolan.dawnlib"); Logger.LogInfo((object)$"Dawnlib installed: {isDawnLibLoaded}"); Patch(); Logger.LogInfo((object)"Tomatobird.MineshaftRescaler v1.2.0 has loaded!"); } internal static void Patch() { //IL_000d: 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_0018: Expected O, but got Unknown if (Harmony == null) { Harmony = new Harmony("Tomatobird.MineshaftRescaler"); } if (applyMineshaftSizeChanges) { Logger.LogDebug((object)"Patching... MineshaftScalePatch"); Harmony.PatchAll(typeof(MineshaftScalePatch)); } if (changeMineshaftLootBonus) { if (isDawnLibLoaded) { Logger.LogDebug((object)"Patching... RoundManagerDawnLibSupportPatch"); Harmony.PatchAll(typeof(RoundManagerDawnLibSupportPatch)); } else { Logger.LogDebug((object)"Patching... RoundManager"); Harmony.PatchAll(typeof(RoundManagerPatch)); } } Logger.LogDebug((object)"Finished patching!"); } internal static void Unpatch() { Logger.LogDebug((object)"Unpatching..."); Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } Logger.LogDebug((object)"Finished unpatching!"); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "Tomatobird.MineshaftRescaler"; public const string PLUGIN_NAME = "MineshaftRescaler"; public const string PLUGIN_VERSION = "1.2.0"; } } namespace MineshaftRescaler.Patches { [HarmonyPatch(typeof(RoundManager))] public class MineshaftScalePatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void Start_Postfix(RoundManager __instance) { for (int i = 0; i < __instance.dungeonFlowTypes.Length; i++) { if (((Object)__instance.dungeonFlowTypes[i].dungeonFlow).name == "Level3Flow") { MineshaftRescaler.Logger.LogDebug((object)"Level3Flow found! Applying dungeon generation changes."); DungeonFlow dungeonFlow = __instance.dungeonFlowTypes[i].dungeonFlow; dungeonFlow.Length.Min = MineshaftRescaler.minLength.Value; dungeonFlow.Length.Max = MineshaftRescaler.maxLength.Value; dungeonFlow.BranchCount.Min = MineshaftRescaler.minBranches.Value; dungeonFlow.BranchCount.Max = MineshaftRescaler.maxBranches.Value; float num = MineshaftRescaler.mainLength.Value + MineshaftRescaler.cavesLength.Value + MineshaftRescaler.fireLength.Value; float num2 = MineshaftRescaler.mainLength.Value / num; float num3 = MineshaftRescaler.cavesLength.Value / num; float length = MineshaftRescaler.fireLength.Value / num; dungeonFlow.Lines[0].Length = num2; dungeonFlow.Lines[1].Position = num2; dungeonFlow.Lines[1].Length = num3; dungeonFlow.Lines[2].Position = num2 + num3; dungeonFlow.Lines[2].Length = length; break; } } } } [HarmonyPatch(typeof(RoundManager))] public class RoundManagerDawnLibSupportPatch { [HarmonyPatch("Start")] [HarmonyPostfix] public static void Start_Postfix() { bool flag = false; for (int i = 0; i < RoundManager.Instance.dungeonFlowTypes.Length; i++) { if (((Object)RoundManager.Instance.dungeonFlowTypes[i].dungeonFlow).name == "Level3Flow") { DawnDungeonInfo dawnInfo = DungeonFlowExtensions.GetDawnInfo(RoundManager.Instance.dungeonFlowTypes[i].dungeonFlow); dawnInfo.ExtraScrapGeneration = MineshaftRescaler.lootAmountBonus.Value; flag = true; MineshaftRescaler.Logger.LogInfo((object)$"Level3Flow found! Bonus of {MineshaftRescaler.lootAmountBonus} has been applied."); break; } } if (!flag) { MineshaftRescaler.Logger.LogWarning((object)"Level3Flow was not found! Scrap amount bonus won't be applied."); } } } [HarmonyPatch(typeof(RoundManager))] internal class RoundManagerPatch { [HarmonyPatch("SpawnScrapInLevel")] [HarmonyTranspiler] internal static IEnumerable<CodeInstruction> ChangeMinshaftLootBonus(IEnumerable<CodeInstruction> instructions) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Expected O, but got Unknown //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Expected O, but got Unknown CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null); CodeMatch[] array = (CodeMatch[])(object)new CodeMatch[3] { new CodeMatch((OpCode?)OpCodes.Ldloc_1, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldc_I4_6, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Add, (object)null, (string)null) }; val.MatchForward(false, array).ThrowIfNotMatch("Couldn't find targetPattern for patching mineshaft bonus!", Array.Empty<CodeMatch>()).Advance(1) .SetAndAdvance(OpCodes.Ldc_I4_S, (object)(sbyte)MineshaftRescaler.lootAmountBonus.Value); return val.InstructionEnumeration(); } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }