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 Crafting Station Level Range v1.5.1
CraftingStationLevelRange.dll
Decompiled 2 years 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 BepInEx.Logging; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("CraftingStationLevelRange")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("CraftingStationLevelRange")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("f070453f-a62d-4fa2-8bab-64b29bfa0ead")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] [BepInPlugin("smallo.mods.craftingstationlevelrange", "Crafting Station Level Range", "1.5.1")] internal class CraftingStationLevelRangePlugin : BaseUnityPlugin { [HarmonyPatch(typeof(CraftingStation), "UpdateKnownStationsInRange")] private static class UpdateKnownStationsInRange_Patch { private static void Postfix(Player player) { foreach (CraftingStation item in (List<CraftingStation>)AccessTools.Field(typeof(CraftingStation), "m_allStations").GetValue(null)) { if (item.m_name == "$piece_cauldron") { continue; } int level = item.GetLevel(true); if (level > 1) { int num = stationDefaultRange.Value + stationAmountIncrease.Value * (level - 1); ChangeStationRange(item, num); continue; } if (parentInheritance.Value && (item.m_name == "$piece_stonecutter" || item.m_name == "$piece_artisanstation")) { ChangeChildStationRange(item); } if (item.m_name == "$piece_workbench" || item.m_name == "$piece_forge") { ChangeStationRange(item, stationDefaultRange.Value); } } } } private static ManualLogSource logger; private static ConfigEntry<bool> enableMod; private static ConfigEntry<int> stationAmountIncrease; private static ConfigEntry<int> stationDefaultRange; private static ConfigEntry<double> stationSearchRange; private static ConfigEntry<bool> parentInheritance; private static ConfigEntry<double> inheritanceAmount; private void Awake() { logger = ((BaseUnityPlugin)this).Logger; enableMod = ((BaseUnityPlugin)this).Config.Bind<bool>("1 - Global", "EnableMod", true, "Enable or disable this mod"); stationDefaultRange = ((BaseUnityPlugin)this).Config.Bind<int>("2 - General", "DefaultRange", 20, "The range of a level 1 workbench (vanilla game is 20)"); stationAmountIncrease = ((BaseUnityPlugin)this).Config.Bind<int>("2 - General", "IncreaseAmount", 10, "Amount to increase the station by for each level"); stationSearchRange = ((BaseUnityPlugin)this).Config.Bind<double>("3 - Advanced", "SearchRange", 120.0, "The range to search for crafting stations while holding a hammer. Warning: larger numbers may potentially cause lag, only increase the number if your stations will ever get above this build range."); parentInheritance = ((BaseUnityPlugin)this).Config.Bind<bool>("4 - Range Inheritance", "ParentInheritance", true, "Allow secondary Crafting Stations (Stonecutter or Artisans Table) to inherit the range of their parent stations (Workbench or Forge) if they are within range"); inheritanceAmount = ((BaseUnityPlugin)this).Config.Bind<double>("4 - Range Inheritance", "InheritanceAmount", 1.0, "Amount to multiply the inheritance value by. You may want the secondary station to have a lesser value. (Example: 0.5 would be 50% the amount of the IncreaseAmount variable)"); if (enableMod.Value) { Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null); } } public static (bool, CraftingStation) IsParentWorkbenchInRange(CraftingStation station, string workbenchType, float searchRange) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) CraftingStation val = CraftingStation.FindClosestStationInRange(workbenchType, ((Component)station).transform.position, searchRange); if ((Object)(object)val == (Object)null) { return (false, val); } Vector2 val2 = new Vector2(((Component)val).transform.position.x, ((Component)val).transform.position.z); Vector2 val3 = default(Vector2); ((Vector2)(ref val3))..ctor(((Component)station).transform.position.x, ((Component)station).transform.position.z); if (Vector2.Distance(val2, val3) <= val.m_rangeBuild) { return (true, val); } return (false, val); } public static void ChangeStationRange(CraftingStation station, float newRange) { if (station.m_rangeBuild != newRange) { CraftingStation component = ((Component)((Component)station).GetComponent<ZNetView>()).GetComponent<CraftingStation>(); component.m_rangeBuild = newRange; component.m_areaMarker.GetComponent<CircleProjector>().m_radius = newRange; component.m_areaMarker.GetComponent<CircleProjector>().m_nrOfSegments = (int)Math.Ceiling(Math.Max(5f, 4f * newRange)); logger.LogInfo((object)$"{station.m_name} ({((Object)station).GetInstanceID()}) set to {newRange} range"); } } public static void ChangeChildStationRange(CraftingStation station) { var (flag, val) = IsParentWorkbenchInRange(station, "$piece_workbench", (float)stationSearchRange.Value); if (!flag) { ChangeStationRange(station, stationDefaultRange.Value); } if (flag && val.GetLevel(true) > 1) { float newRange = (float)stationDefaultRange.Value + (float)stationAmountIncrease.Value * (float)(val.GetLevel(true) - 1) * (float)inheritanceAmount.Value; ChangeStationRange(station, newRange); } else if (flag && val.GetLevel(true) == 1) { ChangeStationRange(station, stationDefaultRange.Value); } } }