using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; 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: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = "")] [assembly: AssemblyCompany("BulkSmelt")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Bulk Smelter Loading Mod")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("BulkSmelt")] [assembly: AssemblyTitle("BulkSmelt")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.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.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace BulkSmelt { [BepInPlugin("offChuma.BulkSmelt", "BulkSmelt", "2.1.0")] public class Plugin : BaseUnityPlugin { [HarmonyPatch(typeof(Smelter), "OnAddFuel")] private static class FuelPatch { private static bool Prefix(Smelter __instance, Humanoid user) { //IL_0012: 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) if (ModEnabled.Value) { KeyboardShortcut value = FillShortcut.Value; if (((KeyboardShortcut)(ref value)).IsPressed() && !_isProcessing) { _isProcessing = true; try { string name = __instance.m_fuelItem.m_itemData.m_shared.m_name; int num = (name.ToLower().Contains("wood") ? MaxWood.Value : MaxCoal.Value); if (num <= 0) { num = __instance.m_maxFuel; } ZNetView component = ((Component)__instance).GetComponent(); int num2 = 0; MethodInfo method = typeof(Smelter).GetMethod("OnAddFuel", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); int num3 = method.GetParameters().Length; while (component.GetZDO().GetFloat("fuel", 0f) < (float)num && num2 < 100) { object[] array = new object[num3]; if (num3 == 3) { array[0] = null; array[1] = user; array[2] = null; } else { array[0] = user; array[1] = null; } if (!(bool)method.Invoke(__instance, array)) { break; } num2++; } if (num2 > 0) { ((Character)user).Message((MessageType)1, $"Bulk added: {num2} fuel", 0, (Sprite)null); } } finally { _isProcessing = false; } return false; } } return true; } } [HarmonyPatch(typeof(Smelter), "OnAddOre")] private static class OrePatch { private static bool Prefix(Smelter __instance, Humanoid user) { //IL_0012: 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) if (ModEnabled.Value) { KeyboardShortcut value = FillShortcut.Value; if (((KeyboardShortcut)(ref value)).IsPressed() && !_isProcessing) { _isProcessing = true; try { int num = 0; foreach (ItemConversion item in __instance.m_conversion) { string name = ((Object)item.m_from.m_itemData.m_dropPrefab).name; if (OreConfigs.ContainsKey(name)) { num = OreConfigs[name].Value; break; } } if (num <= 0) { num = __instance.m_maxOre; } ZNetView component = ((Component)__instance).GetComponent(); int num2 = 0; MethodInfo method = typeof(Smelter).GetMethod("OnAddOre", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); int num3 = method.GetParameters().Length; while (component.GetZDO().GetInt("queued", 0) < num && num2 < 100) { object[] array = new object[num3]; if (num3 == 3) { array[0] = null; array[1] = user; array[2] = null; } else { array[0] = user; array[1] = null; } if (!(bool)method.Invoke(__instance, array)) { break; } num2++; } if (num2 > 0) { ((Character)user).Message((MessageType)1, $"Bulk inserted: {num2} items", 0, (Sprite)null); } } finally { _isProcessing = false; } return false; } } return true; } } public static ConfigEntry ModEnabled; public static ConfigEntry ToggleKey; public static ConfigEntry FillShortcut; public static ConfigEntry MaxWood; public static ConfigEntry MaxCoal; public static Dictionary> OreConfigs = new Dictionary>(); private static bool _isProcessing = false; private void Awake() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) InitConfigs(); new Harmony("offChuma.BulkSmelt").PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"BulkSmelt 2.1.0: Final Build Loaded!"); } private void InitConfigs() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Expected O, but got Unknown //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Expected O, but got Unknown //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Expected O, but got Unknown //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Expected O, but got Unknown //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Expected O, but got Unknown string text = "0. System"; string text2 = "1. Fuel"; string text3 = "2. Furnaces"; string text4 = "3. Farming"; ModEnabled = ((BaseUnityPlugin)this).Config.Bind(text, "Mod Enabled", true, "Enable or disable the mod"); ToggleKey = ((BaseUnityPlugin)this).Config.Bind(text, "Toggle Key", new KeyboardShortcut((KeyCode)0, Array.Empty()), "Key to toggle mod status in-game"); FillShortcut = ((BaseUnityPlugin)this).Config.Bind(text, "Modifier Key", new KeyboardShortcut((KeyCode)101, (KeyCode[])(object)new KeyCode[1] { (KeyCode)304 }), "Hold this + E to bulk fill."); MaxWood = ((BaseUnityPlugin)this).Config.Bind(text2, "Wood_Limit", 25, new ConfigDescription("Kiln limit. 0 = Full.", (AcceptableValueBase)(object)new AcceptableValueRange(0, 25), Array.Empty())); MaxCoal = ((BaseUnityPlugin)this).Config.Bind(text2, "Coal_Limit", 20, new ConfigDescription("Smelter limit. 0 = Full.", (AcceptableValueBase)(object)new AcceptableValueRange(0, 20), Array.Empty())); string[] array = new string[6] { "CopperOre", "TinOre", "IronScrap", "SilverOre", "BlackMetalScrap", "FlametalOre" }; string[] array2 = array; foreach (string text5 in array2) { OreConfigs[text5] = ((BaseUnityPlugin)this).Config.Bind(text3, text5, 10, new ConfigDescription(text5 + " limit. 0 = Full.", (AcceptableValueBase)(object)new AcceptableValueRange(0, 20), Array.Empty())); } OreConfigs["Barley"] = ((BaseUnityPlugin)this).Config.Bind(text4, "Barley", 50, new ConfigDescription("Windmill limit. 0 = Full.", (AcceptableValueBase)(object)new AcceptableValueRange(0, 50), Array.Empty())); OreConfigs["Flax"] = ((BaseUnityPlugin)this).Config.Bind(text4, "Flax", 40, new ConfigDescription("Spinning wheel limit. 0 = Full.", (AcceptableValueBase)(object)new AcceptableValueRange(0, 40), Array.Empty())); } private void Update() { //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) KeyboardShortcut value = ToggleKey.Value; if (((KeyboardShortcut)(ref value)).IsDown()) { ModEnabled.Value = !ModEnabled.Value; Player localPlayer = Player.m_localPlayer; if (localPlayer != null) { ((Character)localPlayer).Message((MessageType)2, "BulkSmelt: " + (ModEnabled.Value ? "Enabled" : "Disabled"), 0, (Sprite)null); } } } } }