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 FoodSorting v1.2.1
FoodSorting.dll
Decompiled a year agousing System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("FoodSorting")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("FoodSorting")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("d42527f5-8915-4a40-905d-8d0290701c5c")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace FoodSorting; [BepInPlugin("shalopay.FoodSorting", "FoodSorting", "1.2.1")] [BepInProcess("valheim.exe")] public class FoodSorting : BaseUnityPlugin { [HarmonyPatch(typeof(InventoryGui), "UpdateRecipeList")] private class UpdateRecipeListPatch { private static void Postfix(ref InventoryGui __instance, ref List<RecipeDataPair> ___m_availableRecipes) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_00e9: Unknown result type (might be due to invalid IL or missing references) ManualLogSource val = new ManualLogSource("FoodSorting"); Logger.Sources.Add((ILogSource)(object)val); if (!Object.op_Implicit((Object)(object)Player.m_localPlayer)) { val.LogInfo((object)"Patch skipped, not local player."); return; } Dictionary<RecipeDataPair, int> originalOrder = ___m_availableRecipes.Select((RecipeDataPair recipe, int index) => new { recipe, index }).ToDictionary(x => x.recipe, x => x.index); ___m_availableRecipes.Sort(delegate(RecipeDataPair a, RecipeDataPair b) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Invalid comparison between Unknown and I4 //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Invalid comparison between Unknown and I4 bool canCraft = a.CanCraft; bool canCraft2 = b.CanCraft; if (canCraft != canCraft2) { return canCraft2.CompareTo(canCraft); } bool flag = (int)a.Recipe.m_item.m_itemData.m_shared.m_itemType == 2; bool flag2 = (int)b.Recipe.m_item.m_itemData.m_shared.m_itemType == 2; if (flag != flag2) { return flag2.CompareTo(flag); } if (flag && flag2) { float value = a.Recipe.m_item.m_itemData.m_shared.m_food + a.Recipe.m_item.m_itemData.m_shared.m_foodStamina + a.Recipe.m_item.m_itemData.m_shared.m_foodEitr; int num = (b.Recipe.m_item.m_itemData.m_shared.m_food + b.Recipe.m_item.m_itemData.m_shared.m_foodStamina + b.Recipe.m_item.m_itemData.m_shared.m_foodEitr).CompareTo(value); if (num != 0) { return num; } } return originalOrder[a].CompareTo(originalOrder[b]); }); for (int i = 0; i < ___m_availableRecipes.Count; i++) { Transform transform = ___m_availableRecipes[i].InterfaceElement.transform; ((RectTransform)((transform is RectTransform) ? transform : null)).anchoredPosition = new Vector2(0f, (float)i * (0f - __instance.m_recipeListSpace)); } val.LogInfo((object)"Succesfully patched recipes list!"); } } private readonly Harmony harmony = new Harmony("shalopay.FoodSorting"); private void Awake() { harmony.PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"FoodSorting plugin has started!"); } } public struct RecipeDataPair { public Recipe Recipe { get; private set; } public ItemData ItemData { get; private set; } public GameObject InterfaceElement { get; private set; } public bool CanCraft { get; private set; } public RecipeDataPair(Recipe recipe, ItemData data, GameObject element, bool canCraft) { Recipe = recipe; ItemData = data; InterfaceElement = element; CanCraft = canCraft; } }