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 ClanheimFoods v1.0.4
plugins\ClanheimFoods\ClanheimFoods.dll
Decompiled 6 days agousing System; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using BepInEx; using Jotunn.Configs; using Jotunn.Entities; using Jotunn.Managers; using Jotunn.Utils; using UnityEngine; [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: AssemblyVersion("0.0.0.0")] namespace ClanheimFoods; [BepInPlugin("com.clanheim.foods", "ClanheimFoods", "1.0.4")] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class ClanheimFoodsPlugin : BaseUnityPlugin { private class FoodRequirement { public string Item; public int Amount; public FoodRequirement(string item, int amount) { Item = item; Amount = amount; } } private class FoodDefinition { public string Prefab; public string BasePrefab; public string IconResource; public string Name; public string Description; public float Health; public float Stamina; public float Duration; public float Regen; public int Stack; public float Weight; public string Station; public int CraftAmount; public List<FoodRequirement> Requirements = new List<FoodRequirement>(); public FoodDefinition(string prefab, string basePrefab, string iconResource, string name, string description, float health, float stamina, float duration, float regen, int stack, float weight, string station, int craftAmount) { Prefab = prefab; BasePrefab = basePrefab; IconResource = iconResource; Name = name; Description = description; Health = health; Stamina = stamina; Duration = duration; Regen = regen; Stack = stack; Weight = weight; Station = station; CraftAmount = craftAmount; } public FoodDefinition Require(string item, int amount) { Requirements.Add(new FoodRequirement(item, amount)); return this; } } public const string PluginGuid = "com.clanheim.foods"; public const string PluginName = "ClanheimFoods"; public const string PluginVersion = "1.0.4"; private bool registered; private void Awake() { PrefabManager.OnVanillaPrefabsAvailable += RegisterFoods; ((BaseUnityPlugin)this).Logger.LogInfo((object)"ClanheimFoods 1.0.4 loaded."); } private void RegisterFoods() { if (registered) { return; } try { List<FoodDefinition> list = CreateFoodDefinitions(); for (int i = 0; i < list.Count; i++) { RegisterFood(list[i]); } registered = true; ((BaseUnityPlugin)this).Logger.LogInfo((object)("Registered " + list.Count + " Clanheim foods with custom embedded icons.")); } catch (Exception ex) { ((BaseUnityPlugin)this).Logger.LogError((object)("ClanheimFoods registration failed: " + ex)); } finally { PrefabManager.OnVanillaPrefabsAvailable -= RegisterFoods; } } private void RegisterFood(FoodDefinition food) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Expected O, but got Unknown ItemConfig val = new ItemConfig(); val.Name = food.Name; val.Description = food.Description; val.CraftingStation = food.Station; val.Amount = food.CraftAmount; val.Enabled = true; for (int i = 0; i < food.Requirements.Count; i++) { FoodRequirement foodRequirement = food.Requirements[i]; val.AddRequirement(foodRequirement.Item, foodRequirement.Amount, 0); } CustomItem val2 = new CustomItem(food.Prefab, food.BasePrefab, val); val2.ItemDrop.m_itemData.m_shared.m_food = food.Health; val2.ItemDrop.m_itemData.m_shared.m_foodStamina = food.Stamina; val2.ItemDrop.m_itemData.m_shared.m_foodBurnTime = food.Duration; val2.ItemDrop.m_itemData.m_shared.m_foodRegen = food.Regen; val2.ItemDrop.m_itemData.m_shared.m_maxStackSize = food.Stack; val2.ItemDrop.m_itemData.m_shared.m_weight = food.Weight; Sprite val3 = LoadEmbeddedIcon(food.IconResource); if ((Object)(object)val3 != (Object)null) { val2.ItemDrop.m_itemData.m_shared.m_icons = (Sprite[])(object)new Sprite[1] { val3 }; } if (!ItemManager.Instance.AddItem(val2)) { throw new Exception("Jotunn rejected item " + food.Prefab); } ((BaseUnityPlugin)this).Logger.LogInfo((object)("Added " + food.Name + " (" + food.Prefab + ")")); } private Sprite LoadEmbeddedIcon(string logicalName) { //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Expected O, but got Unknown //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) string text = "ClanheimFoods.Icons." + logicalName + ".png"; try { Assembly executingAssembly = Assembly.GetExecutingAssembly(); using Stream stream = executingAssembly.GetManifestResourceStream(text); if (stream == null) { ((BaseUnityPlugin)this).Logger.LogWarning((object)("Embedded icon not found: " + text)); return null; } byte[] array = new byte[stream.Length]; int num; for (int i = 0; i < array.Length; i += num) { num = stream.Read(array, i, array.Length - i); if (num <= 0) { break; } } Texture2D val = new Texture2D(2, 2, (TextureFormat)4, false); ((Object)val).name = logicalName + "_Icon"; ((Texture)val).wrapMode = (TextureWrapMode)1; if (!ImageConversion.LoadImage(val, array)) { ((BaseUnityPlugin)this).Logger.LogWarning((object)("Could not decode icon: " + text)); Object.Destroy((Object)(object)val); return null; } val.Apply(false, false); Sprite val2 = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f), 100f); ((Object)val2).name = logicalName + "_Icon"; return val2; } catch (Exception ex) { ((BaseUnityPlugin)this).Logger.LogWarning((object)("Failed loading icon " + text + ": " + ex.Message)); return null; } } private List<FoodDefinition> CreateFoodDefinitions() { List<FoodDefinition> list = new List<FoodDefinition>(); list.Add(new FoodDefinition("Clanheim_HuntersBroth", "DeerStew", "HuntersBroth", "Hunter's Broth", "A warming venison broth for hunters returning from the wilds.", 35f, 30f, 1200f, 2f, 10, 1f, "piece_cauldron", 1).Require("CookedDeerMeat", 1).Require("Carrot", 1).Require("Mushroom", 2)); list.Add(new FoodDefinition("Clanheim_HighlandStew", "DeerStew", "HighlandStew", "Highland Stew", "A thick Highland venison stew made to keep a warrior on his feet.", 45f, 25f, 1500f, 2f, 10, 1f, "piece_cauldron", 1).Require("CookedDeerMeat", 2).Require("Carrot", 2).Require("Mushroom", 1)); list.Add(new FoodDefinition("Clanheim_HeatherBerryPudding", "QueensJam", "HeatherBerryPudding", "Heather Berry Pudding", "Sweet berries and honey mashed into a travelling pudding.", 25f, 45f, 1200f, 2f, 10, 0.5f, "piece_cauldron", 1).Require("Raspberry", 4).Require("Blueberries", 4).Require("Honey", 2)); list.Add(new FoodDefinition("Clanheim_Haggis", "Sausages", "ClanheimHaggis", "Clanheim Haggis", "A fearless mix of entrails, turnip and thistle. Better than it sounds.", 50f, 30f, 1500f, 3f, 10, 1f, "piece_cauldron", 1).Require("Entrails", 4).Require("Turnip", 2).Require("Thistle", 2)); list.Add(new FoodDefinition("Clanheim_DraugrStew", "Sausages", "DraugrStew", "Draugr Stew", "Dark, rich and slightly suspicious. Nobody asks what went into the pot.", 55f, 25f, 1500f, 3f, 10, 1f, "piece_cauldron", 1).Require("Entrails", 2).Require("Turnip", 2).Require("Bloodbag", 1)); list.Add(new FoodDefinition("Clanheim_WolfOnionStew", "WolfJerky", "WolfOnionStew", "Wolf & Onion Stew", "Rich mountain wolf simmered with onions until the cold becomes somebody else's problem.", 60f, 30f, 1800f, 3f, 10, 1f, "piece_cauldron", 1).Require("WolfMeat", 2).Require("Onion", 2).Require("Mushroom", 1)); list.Add(new FoodDefinition("Clanheim_MountainBroth", "OnionSoup", "MountainBroth", "Mountain Broth", "A hot broth built for long climbs and frozen nights.", 40f, 45f, 1500f, 3f, 10, 1f, "piece_cauldron", 1).Require("WolfMeat", 1).Require("Onion", 2).Require("Carrot", 2)); list.Add(new FoodDefinition("Clanheim_HeatherHoneyLoaf", "Bread", "HeatherHoneyLoaf", "Heather Honey Loaf", "A sweet barley loaf glazed with honey and cloudberries.", 30f, 55f, 1500f, 3f, 20, 0.5f, "piece_cauldron", 2).Require("BarleyFlour", 8).Require("Honey", 4).Require("Cloudberry", 2)); list.Add(new FoodDefinition("Clanheim_Cranachan", "QueensJam", "Cranachan", "Queen's Cranachan", "Cloudberries, honey and barley turned into a feast-worthy Highland dessert.", 40f, 60f, 1800f, 3f, 10, 0.5f, "piece_cauldron", 1).Require("Cloudberry", 6).Require("Honey", 2).Require("BarleyFlour", 2)); list.Add(new FoodDefinition("Clanheim_ClanFeast", "MeatPlatter", "ClanFeast", "Clanheim Feast", "A table-filling meat feast made for an entire warband.", 65f, 45f, 1800f, 4f, 5, 2f, "piece_cauldron", 1).Require("LoxMeat", 2).Require("HareMeat", 2).Require("ChickenMeat", 2) .Require("BarleyFlour", 4)); list.Add(new FoodDefinition("Clanheim_OdinsSupper", "MisthareSupreme", "OdinsSupper", "Odin's Supper", "A mythic supper fit for the All-Father and the longest of raids.", 70f, 50f, 1800f, 4f, 5, 2f, "piece_cauldron", 1).Require("HareMeat", 2).Require("MushroomMagecap", 2).Require("MushroomJotunPuffs", 3) .Require("Onion", 2)); return list; } }