Decompiled source of EPL API v6.1.0

plugins/EnhancedPrefabLoader.API/EnhancedPrefabLoader.API.dll

Decompiled 2 weeks 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;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using BepInEx;
using EnhancedPrefabLoader.API.Assets;
using EnhancedPrefabLoader.API.Behaviors;
using EnhancedPrefabLoader.API.Components;
using EnhancedPrefabLoader.API.Events;
using EnhancedPrefabLoader.API.InternalBridges;
using EnhancedPrefabLoader.API.Models;
using EnhancedPrefabLoader.API.Registry;
using EnhancedPrefabLoader.API.Services;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: ComVisible(false)]
[assembly: Guid("d64dc15b-8078-4750-8278-87e0065dc75e")]
[assembly: InternalsVisibleTo("EnhancedPrefabLoader")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: AssemblyCompany("EnhancedPrefabLoader.API")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("6.1.0.0")]
[assembly: AssemblyInformationalVersion("6.1.0+bdc38f0600a0f9317ca7b4a8bbe5c591a46e195f")]
[assembly: AssemblyProduct("Enhanced Prefab Loader API")]
[assembly: AssemblyTitle("EnhancedPrefabLoader.API")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("6.1.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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[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 EnhancedPrefabLoader.API
{
	public static class Epl
	{
		private static IEplApi? instance;

		public static IEplApi Api => instance ?? throw new InvalidOperationException("EPL is not loaded");

		public static bool IsAvailable => instance != null;

		internal static void RegisterApi(IEplApi api)
		{
			instance = api;
		}
	}
	[BepInPlugin("EnhancedPrefabLoader.API", "Enhanced Prefab Loader API", "6.1.0")]
	public class EplApiPlugin : BaseUnityPlugin
	{
		public const string PluginGuid = "EnhancedPrefabLoader.API";

		public const string PluginName = "Enhanced Prefab Loader API";

		public const string PluginVersion = "6.1.0";
	}
	public interface IEplApi
	{
		bool IsBundleLoadingComplete { get; }

		IEplAssets Assets { get; }

		IEplServices Services { get; }

		IEplEvents Events { get; }

		IBundleRegistry BundleRegistry { get; }
	}
}
namespace EnhancedPrefabLoader.API.UI
{
	public interface ICustomShopScreen
	{
	}
}
namespace EnhancedPrefabLoader.API.Services
{
	public interface IBundleMaintenanceService
	{
		bool ResetPrices(string bundleId);

		bool IsUninstalled(string bundleId);
	}
	public interface ICardExpansionService
	{
		void SetCardPriceGenerator(ECardExpansionType expansionType, ICardPriceGenerator generator);

		void SetCardExpGenerator(ECardExpansionType expansionType, ICardExpGenerator generator);

		void SetFoilChance(ECardExpansionType expansionType, float foilChance);

		float GenerateCardMarketPrice(ECardExpansionType cardExpansionType, EMonsterType monsterType, bool isFoil);

		float GenerateCardMarketPrice(CardData cardData);

		float GenerateCardExp(CardData cardData);
	}
	public interface ICardUIService
	{
		void ApplyEplCardUI(CardUI cardUI, CardData cardData);

		void RestoreOriginalCardUI(CardUI cardUI, CardData cardData);
	}
	public interface IDecoService
	{
		void SetLevelRequirement(EDecoObject decoObject, int level);

		void SetPrice(EDecoObject decoObject, float price);
	}
	public interface IEplServices
	{
		IItemService ItemService { get; }

		ICardExpansionService CardExpansionService { get; }

		ICardUIService CardUIService { get; }

		IMenuService MenuService { get; }

		IFurnitureService FurnitureService { get; }

		IDecoService DecoService { get; }

		IBundleMaintenanceService BundleMaintenanceService { get; }
	}
	public interface IFurnitureService
	{
		void SetLevelRequirement(EObjectType objectType, int level);

		void SetPrice(EObjectType objectType, float price);
	}
	public interface IItemService
	{
		void SetPackGenerator(EItemType pack, IPackGenerator generator);

		List<CardData> GeneratePackContent(EItemType pack);

		void SetItemPriceGenerator(string bundleId, IItemPriceGenerator generator);

		float GenerateItemCost(EItemType itemType);

		float GenerateItemMarketPrice(EItemType itemType, float costPrice, float minMarkup, float maxMarkup);

		void SetNormalGenerationWeight(EItemType pack, ERarity rarity, float weight);

		void SetGodGenerationWeight(EItemType pack, ERarity rarity, float weight);

		void SetSlotWeight(EItemType pack, PackSlot slot, ERarity rarity, float weight);

		void SetLicensePrice(EItemType itemType, bool isBigBox, float price);

		void SetLicenseLevel(EItemType itemType, bool isBigBox, int level);

		void SetAutoBoxPrice(EItemType itemType, EItemType followItemType);

		void SetMarketPricePercent(EItemType itemType, float min, float max);

		void SetFollowItemPrice(EItemType itemType, EItemType sourceItemType);

		void SetCanHaveGodPacks(EItemType pack, bool enabled);

		void SetGodPackPercentage(EItemType pack, float percentage);

		void SetGodPack(EItemType pack, bool enabled, float percentage);
	}
	public interface IMenuService
	{
		void AddGenericExpansionButton(string label, Action onClick);

		void AddBinderExpansionButton(string label, Action onClick);
	}
}
namespace EnhancedPrefabLoader.API.Registry
{
	public interface IBundleRegistry
	{
		IReadOnlyDictionary<string, BundleInfo> BundleInfo { get; }

		string? GetBundleIdFor<TEnum>(TEnum enumValue) where TEnum : Enum;

		string? GetBundleIdFor(DecoFlags category, string assetName);

		bool IsEplAsset<TEnum>(TEnum enumValue) where TEnum : Enum;

		bool IsEplAsset(string category, string assetName);

		bool HasRegisteredRestockData(EItemType itemType);

		IReadOnlyCollection<TEnum> GetEnumValuesForBundle<TEnum>(string bundleId) where TEnum : Enum;

		IReadOnlyCollection<string> GetNamedAssetsForBundle(string bundleId, DecoFlags category);
	}
}
namespace EnhancedPrefabLoader.API.Models
{
	public class BundleInfo
	{
		internal readonly List<string> ceilingTextures = new List<string>();

		internal readonly List<string> floorTextures = new List<string>();

		internal readonly List<string> wallTextures = new List<string>();

		internal readonly List<ECardExpansionType> expansionTypes = new List<ECardExpansionType>();

		internal readonly List<EObjectType> furnitureTypes = new List<EObjectType>();

		internal readonly List<EDecoObject> decoObjects = new List<EDecoObject>();

		internal readonly List<EItemType> itemTypes = new List<EItemType>();

		internal readonly List<string> errors = new List<string>();

		internal readonly List<string> warnings = new List<string>();

		public string BundleId { get; internal set; } = string.Empty;

		public string Name { get; internal set; } = string.Empty;

		public string JsonPath { get; internal set; } = string.Empty;

		public string BundlePath { get; internal set; } = string.Empty;

		public bool IsLoaded { get; internal set; }

		public bool IsValid { get; internal set; } = true;

		public IReadOnlyList<ECardExpansionType> ExpansionTypes => expansionTypes;

		public IReadOnlyList<EObjectType> FurnitureTypes => furnitureTypes;

		public IReadOnlyList<EDecoObject> DecoObjects => decoObjects;

		public IReadOnlyList<EItemType> ItemTypes => itemTypes;

		public IReadOnlyList<string> CeilingTextures => ceilingTextures;

		public IReadOnlyList<string> FloorTextures => floorTextures;

		public IReadOnlyList<string> WallTextures => wallTextures;

		public IReadOnlyList<string> Errors => errors;

		public IReadOnlyList<string> Warnings => warnings;
	}
	public enum DecoFlags
	{
		None,
		FloorTexture,
		WallTexture,
		CeilingTexture
	}
	public class ItemShopInfo
	{
		public string PhoneAppId { get; internal set; }

		public string AppDisplayName { get; internal set; }

		public RestockData? SmallBox { get; internal set; }

		public RestockData? BigBox { get; internal set; }
	}
	public class PackConfigData
	{
		public EItemType Pack { get; internal set; }

		public ECardExpansionType Expansion { get; internal set; }

		public ECollectionPackType PackType { get; internal set; }

		public bool CanHaveDuplicates { get; internal set; }

		public bool CanHaveGodPacks { get; internal set; }

		public float GodPackPercentage { get; internal set; }

		public string PackGenerationStrategy { get; internal set; } = string.Empty;
	}
	public class PackGeneratedEventArgs
	{
		public EItemType Pack { get; internal set; }

		public bool IsGodPack { get; internal set; }

		public List<CardData> Cards { get; internal set; }
	}
	public class PackGenerationEventArgs
	{
		public EItemType Pack { get; internal set; }

		public bool IsGodPack { get; internal set; }

		public Dictionary<ERarity, float>? NormalWeights { get; internal set; }

		public Dictionary<ERarity, float>? GodWeights { get; internal set; }

		public SortedDictionary<PackSlot, Dictionary<ERarity, float>>? SlotWeights { get; internal set; }
	}
	[Flags]
	public enum PackSlot : byte
	{
		None = 0,
		Slot1 = 1,
		Slot2 = 2,
		Slot3 = 4,
		Slot4 = 8,
		Slot5 = 0x10,
		Slot6 = 0x20,
		Slot7 = 0x40,
		All = 0x7F
	}
	public class PackWeightData
	{
		public IReadOnlyDictionary<ERarity, float> NormalWeights { get; internal set; }

		public IReadOnlyDictionary<ERarity, float> GodWeights { get; internal set; }

		public IReadOnlyDictionary<PackSlot, IReadOnlyDictionary<ERarity, float>> SlotWeights { get; internal set; }
	}
	public class ShopData
	{
		public string PhoneAppId { get; internal set; }

		public string AppDisplayName { get; internal set; }

		public IReadOnlyList<RestockData> TCG { get; internal set; }

		public IReadOnlyList<RestockData> Accessories { get; internal set; }

		public IReadOnlyList<RestockData> Figurines { get; internal set; }
	}
	public class StreamingAsset<T>(string bundlePath, string assetName) where T : Object
	{
		public string BundlePath { get; private set; } = bundlePath;

		public string AssetName { get; private set; } = assetName;

		internal string AssetKey => BundlePath + "|" + AssetName + "|" + typeof(T).Name;

		internal void GetAsync(Action<Object?> callback)
		{
			if (callback != null)
			{
				StreamingAssetsBridge.AssetLoadBridge?.StartLoadingCoroutine(BundlePath, AssetName, typeof(T), callback);
			}
		}
	}
}
namespace EnhancedPrefabLoader.API.InternalBridges
{
	internal interface IAssetLoadBridge
	{
		void StartLoadingCoroutine(string bundlePath, string assetName, Type type, Action<Object?> callback);
	}
	internal interface IAssetRefTracker
	{
		void IncrementRef(string assetKey);

		void DecrementRef(string assetKey);
	}
	internal static class StreamingAssetsBridge
	{
		internal static IAssetLoadBridge? AssetLoadBridge { get; set; }

		internal static IAssetRefTracker? AssetRefTracker { get; set; }
	}
}
namespace EnhancedPrefabLoader.API.Extensions
{
	public static class GameObjectExtensions
	{
		public static T GetOrAddComponent<T>(this GameObject obj) where T : Component
		{
			T result = default(T);
			if (!obj.TryGetComponent<T>(ref result))
			{
				return obj.AddComponent<T>();
			}
			return result;
		}
	}
	public static class StreamingAssetExtensions
	{
		private class AssetRequest
		{
			public string AssetName = string.Empty;

			public string RequestId = string.Empty;
		}

		private static readonly ConditionalWeakTable<Image, AssetRequest> activeSpriteRequests = new ConditionalWeakTable<Image, AssetRequest>();

		private static readonly ConditionalWeakTable<Material, Dictionary<string, AssetRequest>> activeTextureRequests = new ConditionalWeakTable<Material, Dictionary<string, AssetRequest>>();

		private static readonly ConditionalWeakTable<Material, Dictionary<string, string>> trackedTextureKeys = new ConditionalWeakTable<Material, Dictionary<string, string>>();

		public static void SetSpriteAsync(this Image image, StreamingAsset<Sprite>? asset)
		{
			if (asset == null)
			{
				image.CancelPendingSpriteAsync();
				image.sprite = null;
				return;
			}
			string requestId = Guid.NewGuid().ToString();
			AssetRequest orCreateValue = activeSpriteRequests.GetOrCreateValue(image);
			orCreateValue.AssetName = asset.AssetName;
			orCreateValue.RequestId = requestId;
			asset.GetAsync(delegate(Object? obj)
			{
				if (Object.op_Implicit((Object)(object)image))
				{
					Sprite val = (Sprite)(object)((obj is Sprite) ? obj : null);
					if (val != null && activeSpriteRequests.TryGetValue(image, out AssetRequest value) && !(value.RequestId != requestId) && !(value.AssetName != asset.AssetName))
					{
						((Component)image).gameObject.GetOrAddComponent<StreamingAssetTracker>().TrackImage(image, asset.AssetKey);
						image.sprite = val;
						((Graphic)image).SetAllDirty();
					}
				}
			});
		}

		public static void CancelPendingSpriteAsync(this Image image)
		{
			if (activeSpriteRequests.TryGetValue(image, out AssetRequest value))
			{
				value.RequestId = Guid.NewGuid().ToString();
				value.AssetName = string.Empty;
			}
			StreamingAssetTracker streamingAssetTracker = default(StreamingAssetTracker);
			if (((Component)image).TryGetComponent<StreamingAssetTracker>(ref streamingAssetTracker))
			{
				streamingAssetTracker.UntrackImage(image);
			}
		}

		public static void CancelPendingTextureAsync(this Material material, string propertyName)
		{
			if (activeTextureRequests.TryGetValue(material, out Dictionary<string, AssetRequest> value) && value.TryGetValue(propertyName, out var value2))
			{
				value2.RequestId = Guid.NewGuid().ToString();
				value2.AssetName = string.Empty;
			}
			UntrackTexture(material, propertyName);
		}

		public static void SetTextureAsync(this Material material, string propertyName, StreamingAsset<Texture>? asset)
		{
			if (asset == null)
			{
				material.CancelPendingTextureAsync(propertyName);
				material.SetTexture(propertyName, (Texture)null);
				return;
			}
			string requestId = Guid.NewGuid().ToString();
			Dictionary<string, AssetRequest> orCreateValue = activeTextureRequests.GetOrCreateValue(material);
			if (!orCreateValue.TryGetValue(propertyName, out var value))
			{
				value = new AssetRequest();
				orCreateValue[propertyName] = value;
			}
			value.AssetName = asset.AssetName;
			value.RequestId = requestId;
			asset.GetAsync(delegate(Object? obj)
			{
				if (Object.op_Implicit((Object)(object)material))
				{
					Texture val = (Texture)(object)((obj is Texture) ? obj : null);
					if (val != null && activeTextureRequests.TryGetValue(material, out Dictionary<string, AssetRequest> value2) && value2.TryGetValue(propertyName, out var value3) && !(value3.RequestId != requestId) && !(value3.AssetName != asset.AssetName))
					{
						TrackTexture(material, propertyName, asset.AssetKey);
						material.SetTexture(propertyName, val);
					}
				}
			});
		}

		private static void TrackTexture(Material material, string propertyName, string assetKey)
		{
			Dictionary<string, string> orCreateValue = trackedTextureKeys.GetOrCreateValue(material);
			if (orCreateValue.TryGetValue(propertyName, out string value))
			{
				StreamingAssetsBridge.AssetRefTracker?.DecrementRef(value);
			}
			orCreateValue[propertyName] = assetKey;
			StreamingAssetsBridge.AssetRefTracker?.IncrementRef(assetKey);
		}

		private static void UntrackTexture(Material material, string propertyName)
		{
			if (trackedTextureKeys.TryGetValue(material, out Dictionary<string, string> value) && value.TryGetValue(propertyName, out var value2))
			{
				StreamingAssetsBridge.AssetRefTracker?.DecrementRef(value2);
				value.Remove(propertyName);
			}
		}
	}
	public static class StringExtensions
	{
		public static T? TryParseToEnum<T>(this string value) where T : struct, Enum
		{
			if (!Enum.TryParse<T>(value, out var result))
			{
				return null;
			}
			return result;
		}

		public static string Sanitize(this string value)
		{
			if (string.IsNullOrWhiteSpace(value))
			{
				return "_Invalid";
			}
			string input = Regex.Replace(value, "\\s", "");
			input = Regex.Replace(input, "[^\\w]", "_");
			if (!string.IsNullOrEmpty(input) && !char.IsDigit(input[0]))
			{
				return input;
			}
			return "_" + input;
		}

		public static string Prettierize(this string value)
		{
			if (string.IsNullOrWhiteSpace(value))
			{
				return value;
			}
			value = value.Replace('_', ' ');
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder.Append(value[0]);
			for (int i = 1; i < value.Length; i++)
			{
				char c = value[i];
				char c2 = value[i - 1];
				if (char.IsUpper(c) && !char.IsWhiteSpace(c2) && (char.IsLower(c2) || (i < value.Length - 1 && char.IsLower(value[i + 1]))))
				{
					stringBuilder.Append(' ');
				}
				if (char.IsDigit(c) && char.IsLetter(c2))
				{
					stringBuilder.Append(' ');
				}
				stringBuilder.Append(c);
			}
			return Regex.Replace(stringBuilder.ToString(), "\\s+", " ").Trim();
		}
	}
}
namespace EnhancedPrefabLoader.API.Events
{
	public interface IBundleEvents
	{
		event Action<string> OnBundleUninstalled;
	}
	public interface IEplEvents
	{
		IShopEvents Shops { get; }

		IItemEvents Items { get; }

		IBundleEvents Bundles { get; }

		event Action OnBundleLoadingComplete;
	}
	public interface IItemEvents
	{
		event Action<PackGenerationEventArgs> OnBeforePackGenerated;

		event Action<PackGeneratedEventArgs> OnAfterPackGenerated;
	}
	public interface IShopEvents
	{
		event Action OnShopsReady;
	}
}
namespace EnhancedPrefabLoader.API.Components
{
	internal class StreamingAssetTracker : MonoBehaviour
	{
		private readonly ConditionalWeakTable<Image, string> imageTracker = new ConditionalWeakTable<Image, string>();

		internal void TrackImage(Image image, string assetKey)
		{
			if (imageTracker.TryGetValue(image, out string value))
			{
				StreamingAssetsBridge.AssetRefTracker?.DecrementRef(value);
			}
			imageTracker.AddOrUpdate(image, assetKey);
			StreamingAssetsBridge.AssetRefTracker?.IncrementRef(assetKey);
		}

		internal void UntrackImage(Image image)
		{
			if (imageTracker.TryGetValue(image, out string value))
			{
				StreamingAssetsBridge.AssetRefTracker?.DecrementRef(value);
				imageTracker.Remove(image);
			}
		}

		private void OnDestroy()
		{
			foreach (var (_, assetKey) in (IEnumerable<KeyValuePair<Image, string>>)imageTracker)
			{
				StreamingAssetsBridge.AssetRefTracker?.DecrementRef(assetKey);
			}
		}
	}
}
namespace EnhancedPrefabLoader.API.Behaviors
{
	public interface ICardExpGenerator
	{
		float CalculateExp(CardData cardData);
	}
	public interface ICardPriceGenerator
	{
		float GenerateCardMarketPrice(ECardExpansionType expansionType, EMonsterType monsterType, ECardBorderType borderType, ERarity rarity, List<ERarity> expansionRarities, bool isFoil);
	}
	public interface IItemPriceGenerator
	{
		float GenerateItemCost(EItemType itemType, float baseCost);

		float GenerateItemMarketPrice(EItemType itemType, float baseCost, float minMarkup, float maxMarkup);
	}
	public interface IPackGenerator
	{
		List<MonsterData> GeneratePack(ECardExpansionType cardExpansion, List<MonsterData> cardPool, bool hasRandomFoils);
	}
}
namespace EnhancedPrefabLoader.API.Assets
{
	public interface ICardExpansionLibrary
	{
		StreamingAsset<Texture>? GetCardExpansionCardBack(ECardExpansionType cardExpansionType);

		StreamingAsset<Sprite>? GetCardExpansionFoilMask(ECardExpansionType cardExpansionType);

		StreamingAsset<Sprite>? GetCardFoilMask(ECardExpansionType cardExpansionType, EMonsterType monsterType);

		StreamingAsset<Texture>? GetCardBack(ECardExpansionType cardExpansionType, EMonsterType monsterType);

		StreamingAsset<Sprite>? GetCardSprite(ECardExpansionType cardExpansionType, EMonsterType monsterType);

		IReadOnlyDictionary<EMonsterType, StreamingAsset<Sprite>> GetCardSprites(ECardExpansionType cardExpansionType);

		MonsterData GetMonsterData(CardData cardData);

		MonsterData GetMonsterData(ECardExpansionType expansionType, EMonsterType monsterType);

		bool IsCardExpansionUnlocked(ECardExpansionType expansionType);

		bool IsCardFoil(ECardExpansionType expansionType, EMonsterType monsterType);
	}
	public interface IDecoLibrary
	{
		StreamingAsset<Sprite>? GetIcon(EDecoObject decoObject);

		IReadOnlyDictionary<EDecoObject, StreamingAsset<Sprite>> GetIcons();

		InteractableObject? GetPrefab(EDecoObject decoObject);

		IReadOnlyDictionary<EDecoObject, InteractableObject> GetPrefabs();

		int GetLevelRequirement(EDecoObject decoObject);
	}
	public interface IEplAssets
	{
		ICardExpansionLibrary CardExpansions { get; }

		IFurnitureLibrary Furniture { get; }

		IItemLibrary Items { get; }

		IDecoLibrary Deco { get; }

		IShopLibrary Shops { get; }
	}
	public interface IFurnitureLibrary
	{
		StreamingAsset<Sprite>? GetIcon(EObjectType objectType);

		IReadOnlyDictionary<EObjectType, StreamingAsset<Sprite>> GetIcons();

		InteractableObject? GetPrefab(EObjectType objectType);

		IReadOnlyDictionary<EObjectType, InteractableObject> GetPrefabs();

		int GetLevelRequirement(EObjectType objectType);
	}
	public interface IItemLibrary
	{
		StreamingAsset<Sprite>? GetIcon(EItemType itemType);

		IReadOnlyDictionary<EItemType, StreamingAsset<Sprite>> GetIcons();

		ItemMeshData? GetItemMeshData(EItemType itemType);

		IReadOnlyDictionary<EItemType, ItemMeshData> GetAllItemMeshData();

		EItemType GetBulkBox(ECardExpansionType expansionType, int priceCutoff);

		IReadOnlyDictionary<ECardExpansionType, IReadOnlyList<(int MinPrice, EItemType ItemType)>> GetBulkBoxes();

		PackWeightData GetPackWeights(EItemType pack);

		PackConfigData GetPackConfig(EItemType pack);

		EItemType? GetSpawnedPackType(EItemType cardBox);

		IReadOnlyList<EItemType> GetPacksForExpansion(ECardExpansionType expansionType);

		ECardExpansionType? GetExpansionForPackType(ECollectionPackType packType);
	}
	public interface IShopLibrary
	{
		IReadOnlyList<string> GetPhoneAppIds();

		ShopData? GetShopDataFor(string appId);

		ItemShopInfo? GetShopInfoFor(EItemType itemType);
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		internal IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}