Decompiled source of JGFOOD v0.1.0

BepInEx/plugins/JGFOOD.dll

Decompiled a week ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using Jotunn;
using Jotunn.Entities;
using Jotunn.Extensions;
using Jotunn.Managers;
using Jotunn.Utils;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("JGFOOD")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("JGFOOD")]
[assembly: AssemblyCopyright("Copyright ©  2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")]
[assembly: AssemblyFileVersion("0.1.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.1.0.0")]
namespace JGFOOD;

internal static class FoodManager
{
	private class FoodConfig
	{
		public SharedData Shared;

		public ConfigEntry<float> Health;

		public ConfigEntry<float> Stamina;

		public ConfigEntry<float> Eitr;
	}

	private static readonly Dictionary<string, float> DefaultEitrBonuses = new Dictionary<string, float>
	{
		{ "Honey", 25f },
		{ "Raspberry", 20f },
		{ "Blueberries", 35f },
		{ "DeerStew", 40f },
		{ "ShocklateSmoothie", 50f },
		{ "TurnipStew", 55f },
		{ "Eyescream", 65f },
		{ "OnionSoup", 60f },
		{ "Cloudberry", 70f },
		{ "Bread", 75f }
	};

	private static readonly Dictionary<string, FoodConfig> FoodConfigs = new Dictionary<string, FoodConfig>();

	public static void SetupFoods()
	{
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: Invalid comparison between Unknown and I4
		Logger.LogInfo((object)"JGFOOD: Beginning vanilla food scan.");
		int num = 0;
		foreach (KeyValuePair<string, Object> prefab in Cache.GetPrefabs(typeof(ItemDrop)))
		{
			Object value = prefab.Value;
			ItemDrop val = (ItemDrop)(object)((value is ItemDrop) ? value : null);
			if ((Object)(object)val == (Object)null || val.m_itemData == null)
			{
				continue;
			}
			SharedData shared = val.m_itemData.m_shared;
			if (shared == null || (int)shared.m_itemType != 2 || (shared.m_food <= 0f && shared.m_foodStamina <= 0f && shared.m_foodEitr <= 0f))
			{
				continue;
			}
			string name = ((Object)((Component)val).gameObject).name;
			if (ModQuery.GetPrefab(name) != null)
			{
				Logger.LogDebug((object)("JGFOOD: Skipping modded food prefab " + name + "."));
				continue;
			}
			float num2 = shared.m_foodEitr;
			if (DefaultEitrBonuses.TryGetValue(name, out var value2))
			{
				num2 += value2;
			}
			if (!FoodConfigs.TryGetValue(name, out var value3))
			{
				string text = "Food - " + name;
				value3 = new FoodConfig
				{
					Shared = shared,
					Health = ConfigFileExtensions.BindConfig<float>(((BaseUnityPlugin)JGFOODPlugin.Instance).Config, text, "Health", shared.m_food, "Health provided by " + name + ".", true, (int?)null, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null),
					Stamina = ConfigFileExtensions.BindConfig<float>(((BaseUnityPlugin)JGFOODPlugin.Instance).Config, text, "Stamina", shared.m_foodStamina, "Stamina provided by " + name + ".", true, (int?)null, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null),
					Eitr = ConfigFileExtensions.BindConfig<float>(((BaseUnityPlugin)JGFOODPlugin.Instance).Config, text, "Eitr", num2, "Eitr provided by " + name + ".", true, (int?)null, (AcceptableValueBase)null, (Action<ConfigEntryBase>)null, (ConfigurationManagerAttributes)null)
				};
				FoodConfigs.Add(name, value3);
			}
			else
			{
				value3.Shared = shared;
			}
			num++;
		}
		ApplyConfiguredValues();
		((BaseUnityPlugin)JGFOODPlugin.Instance).Config.Save();
		Logger.LogInfo((object)$"JGFOOD: Applied food configuration to {num} vanilla food items.");
	}

	public static void ApplyConfiguredValues()
	{
		foreach (FoodConfig value in FoodConfigs.Values)
		{
			if (value.Shared != null)
			{
				value.Shared.m_food = value.Health.Value;
				value.Shared.m_foodStamina = value.Stamina.Value;
				value.Shared.m_foodEitr = value.Eitr.Value;
			}
		}
		Logger.LogInfo((object)$"JGFOOD: Applied synchronized food configuration to {FoodConfigs.Count} food items.");
	}
}
[BepInPlugin("com.jgmods.jgfood", "JGFOOD", "0.1.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
internal class JGFOODPlugin : BaseUnityPlugin
{
	public const string PluginGUID = "com.jgmods.jgfood";

	public const string PluginName = "JGFOOD";

	public const string PluginVersion = "0.1.0";

	public static CustomLocalization Localization = LocalizationManager.Instance.GetLocalization();

	public static JGFOODPlugin Instance { get; private set; }

	private void Awake()
	{
		Instance = this;
		ModQuery.Enable();
		PrefabManager.OnVanillaPrefabsAvailable += FoodManager.SetupFoods;
		SynchronizationManager.OnConfigurationSynchronized += delegate
		{
			FoodManager.ApplyConfiguredValues();
		};
		Logger.LogInfo((object)"JGFOOD has landed");
	}
}