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 ExtendedCraftingRange v1.0.2
TTC.ExtendedCraftingRange.dll
Decompiled 5 days agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using HarmonyLib; 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("ExtendedCraftingRadius")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ExtendedCraftingRadius")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("3f73b5c1-0470-4c09-9fb3-1f4d16f13398")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] [BepInPlugin("TTC.ExtendedCraftingRange", "TTC Extended Crafting Range", "1.0.0")] public class ExtendedCraftingRange : BaseUnityPlugin { [HarmonyPatch(typeof(CraftingStation), "Start")] public static class Patch_CraftingStationStart { private static void Postfix(CraftingStation __instance) { if (__instance.m_name == "$piece_workbench") { if (!originalWorkbenchBuild.ContainsKey(__instance)) { originalWorkbenchBuild[__instance] = __instance.m_rangeBuild; } if (!originalWorkbenchDiscover.ContainsKey(__instance)) { originalWorkbenchDiscover[__instance] = __instance.m_discoverRange; } __instance.m_rangeBuild = originalWorkbenchBuild[__instance]; __instance.m_discoverRange = originalWorkbenchDiscover[__instance] * workbenchDiscoverRangeMultiplier.Value; } } } [HarmonyPatch(typeof(CraftingStation), "GetStationBuildRange")] public static class Patch_GetStationBuildRange { private static void Postfix(CraftingStation __instance, ref float __result) { if (__instance.m_name == "$piece_workbench") { __result *= workbenchRangeMultiplier.Value; } else if (__instance.m_name == "$piece_stonecutter") { __result *= stonecutterRangeMultiplier.Value; } else if (__instance.m_name == "$piece_forge") { __result *= forgeRangeMultiplier.Value; } else if (__instance.m_name == "$piece_artisanstation") { __result *= artisanTableRangeMultiplier.Value; } else if (__instance.m_name == "$piece_blackforge") { __result *= blackForgeRangeMultiplier.Value; } } } [HarmonyPatch(typeof(CraftingStation), "CheckUsable")] public static class Patch_DisableRoofRequirement { private static void Prefix(CraftingStation __instance) { if ((__instance.m_name == "$piece_workbench" && !workbenchRoofRequirement.Value) || (__instance.m_name == "$piece_stonecutter" && !stonecutterRoofRequirement.Value) || (__instance.m_name == "$piece_forge" && !forgeRoofRequirement.Value) || (__instance.m_name == "$piece_artisanstation" && !artisanTableRoofRequirement.Value) || (__instance.m_name == "$piece_blackforge" && !blackForgeRoofRequirement.Value)) { __instance.m_craftRequireRoof = false; } } } [HarmonyPatch(typeof(CraftingStation), "UpdateKnownStationsInRange")] public static class Patch_UpdateKnownStationsInRange { private static void Postfix(Player player) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) Vector3 position = ((Component)player).transform.position; List<CraftingStation> list = new List<CraftingStation>(); CraftingStation.FindStationsInRange("$piece_workbench", position, 999f, list); CraftingStation.FindStationsInRange("$piece_stonecutter", position, 999f, list); CraftingStation.FindStationsInRange("$piece_forge", position, 999f, list); CraftingStation.FindStationsInRange("$piece_artisanstation", position, 999f, list); CraftingStation.FindStationsInRange("$piece_blackforge", position, 999f, list); foreach (CraftingStation item in list) { if (Object.op_Implicit((Object)(object)item.m_areaMarker)) { CircleProjector component = item.m_areaMarker.GetComponent<CircleProjector>(); if (Object.op_Implicit((Object)(object)component)) { component.m_radius = item.GetStationBuildRange(); } } } } } [HarmonyPatch(typeof(CraftingStation), "ShowAreaMarker")] public static class Patch_ShowAreaMarker { private static void Prefix(CraftingStation __instance) { if (Object.op_Implicit((Object)(object)__instance.m_areaMarker)) { CircleProjector component = __instance.m_areaMarker.GetComponent<CircleProjector>(); if (Object.op_Implicit((Object)(object)component)) { component.m_radius = __instance.GetStationBuildRange(); } } } } private static ConfigEntry<float> workbenchRangeMultiplier; private static ConfigEntry<float> workbenchDiscoverRangeMultiplier; private static ConfigEntry<float> stonecutterRangeMultiplier; private static ConfigEntry<float> forgeRangeMultiplier; private static ConfigEntry<float> artisanTableRangeMultiplier; private static ConfigEntry<float> blackForgeRangeMultiplier; private static ConfigEntry<bool> workbenchRoofRequirement; private static ConfigEntry<bool> stonecutterRoofRequirement; private static ConfigEntry<bool> forgeRoofRequirement; private static ConfigEntry<bool> artisanTableRoofRequirement; private static ConfigEntry<bool> blackForgeRoofRequirement; private static Dictionary<CraftingStation, float> originalWorkbenchBuild; private static Dictionary<CraftingStation, float> originalWorkbenchDiscover; private void Awake() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Expected O, but got Unknown //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Expected O, but got Unknown //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Expected O, but got Unknown //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Expected O, but got Unknown //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Expected O, but got Unknown //IL_0305: Unknown result type (might be due to invalid IL or missing references) workbenchRangeMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Workbench Settings", "Build Range Multiplier", 2f, new ConfigDescription("Multiplier for workbench build radius (1x - 5x)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 5f), Array.Empty<object>())); workbenchDiscoverRangeMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Workbench Settings", "Spawnblock Range Multiplier", 2f, new ConfigDescription("Multiplier for the spawn blocking radius (1x - 5x)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 5f), Array.Empty<object>())); stonecutterRangeMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Stonecutter Settings", "Build Range Multiplier", 2f, new ConfigDescription("Multiplier for stonecutter build radius (1x - 5x)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 5f), Array.Empty<object>())); forgeRangeMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Forge Settings", "Build Range Multiplier", 2f, new ConfigDescription("Multiplier for forge build radius (1x - 5x)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 5f), Array.Empty<object>())); artisanTableRangeMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Artisan Table Settings", "Build Range Multiplier", 2f, new ConfigDescription("Multiplier for artisan table build radius (1x - 5x)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 5f), Array.Empty<object>())); blackForgeRangeMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Black Forge Settings", "Build Range Multiplier", 2f, new ConfigDescription("Multiplier for black forge build radius (1x - 5x)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 5f), Array.Empty<object>())); workbenchRoofRequirement = ((BaseUnityPlugin)this).Config.Bind<bool>("Workbench Settings", "Roof Requirement", false, "Disable to allow the workbench to function without a roof"); stonecutterRoofRequirement = ((BaseUnityPlugin)this).Config.Bind<bool>("Stonecutter Settings", "Roof Requirement", false, "Disable to allow the stonecutter to function without a roof"); forgeRoofRequirement = ((BaseUnityPlugin)this).Config.Bind<bool>("Forge Settings", "Roof Requirement", false, "Disable to allow the forge to function without a roof"); artisanTableRoofRequirement = ((BaseUnityPlugin)this).Config.Bind<bool>("Artisan Table Settings", "Roof Requirement", false, "Disable to allow the artisan table to function without a roof"); blackForgeRoofRequirement = ((BaseUnityPlugin)this).Config.Bind<bool>("Black Forge Settings", "Roof Requirement", false, "Disable to allow the black forge to function without a roof"); workbenchRangeMultiplier.SettingChanged += OnConfigChanged; workbenchDiscoverRangeMultiplier.SettingChanged += OnConfigChanged; stonecutterRangeMultiplier.SettingChanged += OnConfigChanged; forgeRangeMultiplier.SettingChanged += OnConfigChanged; artisanTableRangeMultiplier.SettingChanged += OnConfigChanged; blackForgeRangeMultiplier.SettingChanged += OnConfigChanged; workbenchRoofRequirement.SettingChanged += OnConfigChanged; stonecutterRoofRequirement.SettingChanged += OnConfigChanged; forgeRoofRequirement.SettingChanged += OnConfigChanged; artisanTableRoofRequirement.SettingChanged += OnConfigChanged; blackForgeRoofRequirement.SettingChanged += OnConfigChanged; new Harmony("TTC.ExtendedCraftingRange").PatchAll(); } private void OnConfigChanged(object sender, EventArgs e) { UpdateAllStations(); } private void UpdateAllStations() { foreach (IMonoUpdater instance in CraftingStation.Instances) { CraftingStation val = (CraftingStation)(object)((instance is CraftingStation) ? instance : null); if ((Object)(object)val == (Object)null) { continue; } if (val.m_name == "$piece_workbench") { if (originalWorkbenchBuild.TryGetValue(val, out var value)) { val.m_rangeBuild = value * workbenchRangeMultiplier.Value; } if (originalWorkbenchDiscover.TryGetValue(val, out var value2)) { val.m_discoverRange = value2 * workbenchDiscoverRangeMultiplier.Value; } } if (Object.op_Implicit((Object)(object)val.m_areaMarker)) { CircleProjector component = val.m_areaMarker.GetComponent<CircleProjector>(); if (Object.op_Implicit((Object)(object)component)) { component.m_radius = val.GetStationBuildRange(); } } } } static ExtendedCraftingRange() { originalWorkbenchBuild = new Dictionary<CraftingStation, float>(); originalWorkbenchDiscover = new Dictionary<CraftingStation, float>(); } }