using System.IO; using System.Linq; using System.Reflection; using Easter2025.Components; using Easter2025.Customs.RestaurantSettings; using Easter2025.Utilies; using Easter2025.Views; using Kitchen; using KitchenData; using KitchenLib; using KitchenLib.Achievements; using KitchenLib.Event; using KitchenLib.Interfaces; using KitchenLib.Logging.Exceptions; using KitchenLib.References; using KitchenLib.Utils; using KitchenMods; using TMPro; using UnityEngine; using KitchenLogger = KitchenLib.Logging.KitchenLogger; namespace Easter2025 { public class Mod : BaseMod, IModSystem, IAutoRegisterAll { public const string MOD_GUID = "com.starfluxgames.easter2025"; public const string MOD_NAME = "The Great Eggscape"; public const string MOD_VERSION = "0.1.2"; public const string MOD_AUTHOR = "StarFluxGames"; public const string MOD_GAMEVERSION = ">=1.2.1"; internal static AssetBundle Bundle; internal static KitchenLogger Logger; internal static AchievementsManager achievementsManager; internal static readonly ViewType RED_BUNNY_VIEW = (ViewType)VariousUtils.GetID("RED_BUNNY_VIEW"); internal static readonly ViewType GREEN_BUNNY_VIEW = (ViewType)VariousUtils.GetID("GREEN_BUNNY_VIEW"); internal static readonly ViewType BLUE_BUNNY_VIEW = (ViewType)VariousUtils.GetID("BLUE_BUNNY_VIEW"); internal static readonly ViewType ROAMING_RED_BUNNY_VIEW = (ViewType)VariousUtils.GetID("ROAMING_RED_BUNNY_VIEW"); internal static readonly ViewType ROAMING_GREEN_BUNNY_VIEW = (ViewType)VariousUtils.GetID("ROAMING_GREEN_BUNNY_VIEW"); internal static readonly ViewType ROAMING_BLUE_BUNNY_VIEW = (ViewType)VariousUtils.GetID("ROAMING_BLUE_BUNNY_VIEW"); internal static readonly string ACHIEVEMENT_SERVE_THREE_COURSE_EGGS = "ACHIEVEMENT_SERVE_THREE_COURSE_EGGS"; internal static readonly string ACHIEVEMENT_TRIGGER_BUNNIES = "ACHIEVEMENT_TRIGGER_BUNNIES"; public static readonly bool ENABLE_ADDITIONAL_LOBBY_DISHES = false; public Mod() : base(MOD_GUID, MOD_NAME, MOD_AUTHOR, MOD_VERSION, MOD_GAMEVERSION, Assembly.GetExecutingAssembly()) { } protected override void OnInitialise() { Logger.LogWarning($"{MOD_GUID} v{MOD_VERSION} in use!"); } protected override void OnUpdate() { } protected override void OnPostActivate(KitchenMods.Mod mod) { Bundle = mod.GetPacks().SelectMany(e => e.AssetBundles).FirstOrDefault() ?? throw new MissingAssetBundleException(MOD_GUID); Logger = InitLogger(); achievementsManager = new AchievementsManager(MOD_GUID, MOD_NAME); achievementsManager.RegisterAchievement(new Achievement(ACHIEVEMENT_SERVE_THREE_COURSE_EGGS, "An Eggcellent Meal", "Serve 3 different egg courses to a single customer", Bundle.LoadAsset("EggBasketIcon")).SetHiddenState(AchievementHiddenState.NotHidden)); achievementsManager.RegisterAchievement(new Achievement(ACHIEVEMENT_TRIGGER_BUNNIES, "Bunnies?", "Complete the hidden Easter Egg for some fancy bunnies!", Bundle.LoadAsset("BunnyIcon")).SetHiddenState(AchievementHiddenState.HiddenUntilCompleted)); achievementsManager.Load(); achievementsManager.Save(); var spriteAsset = Bundle.LoadAsset("SearchingIcon"); TMP_Settings.defaultSpriteAsset.fallbackSpriteAssets.Add(spriteAsset); spriteAsset.material = Object.Instantiate(TMP_Settings.defaultSpriteAsset.material); spriteAsset.material.mainTexture = Bundle.LoadAsset("SearchingIcon_Tex"); // RefGenerator.GenerateGDOReferences(Assembly.GetExecutingAssembly(), Path.Combine(Application.persistentDataPath, "GeneratedReferences.cs")); Events.BuildGameDataEvent += (sender, args) => { if (args.firstBuild) { // Adding Carrot Checker if (args.gamedata.TryGet(ItemReferences.Carrot, out Item carrot) && args.gamedata.TryGet(ItemReferences.CarrotChopped, out Item carrotChopped)) { carrot.Properties.Add(new CCanTriggerOrangeOrbs()); carrotChopped.Properties.Add(new CCanTriggerOrangeOrbs()); } // Adding Bunny Ears if (args.gamedata.TryGet(PlayerCosmeticReferences.BunnyEarHat, out PlayerCosmetic BunnyEarHat)) { BunnyEarHat.CustomerSettings.Add((RestaurantSetting)GDOUtils.GetCustomGameDataObject().GameDataObject); BunnyEarHat.CustomerSettings.Add((RestaurantSetting)GDOUtils.GetCustomGameDataObject().GameDataObject); } // Adding Orbs to Bin if (args.gamedata.TryGet(ApplianceReferences.Bin, out Appliance Bin)) { GameObject Orbs = GameObject.Instantiate(Bundle.LoadAsset("Orb Container")); Orbs.transform.SetParent(Bin.Prefab.transform); Orbs.transform.localPosition = Vector3.zero; Orbs.SetActive(true); BinOrbView view = Bin.Prefab.AddComponent(); view.GreenOrbs = Orbs.GetChild("GreenOrbs"); view.OrangeOrbs = Orbs.GetChild("OrangeOrbs"); view.GreenOrbs.SetActive(false); view.OrangeOrbs.SetActive(false); } if (args.gamedata.TryGet(ApplianceReferences.Countertop, out Appliance Countertop)) { // Adding Processes to Egg Mould Provider if (args.gamedata.TryGet(GDOReferences.EggMouldProvider.ID, out Appliance EggMouldProvider)) { foreach (Appliance.ApplianceProcesses process in Countertop.Processes) { bool found = false; foreach (Appliance.ApplianceProcesses process2 in EggMouldProvider.Processes) { if (process.Process == process2.Process) { found = true; break; } } if (!found) { EggMouldProvider.Processes.Add(process); } } } // Adding Processes to Wrapper Provider if (args.gamedata.TryGet(GDOReferences.WrapperProvider.ID, out Appliance WrapperProvider)) { foreach (Appliance.ApplianceProcesses process in Countertop.Processes) { bool found = false; foreach (Appliance.ApplianceProcesses process2 in WrapperProvider.Processes) { if (process.Process == process2.Process) { found = true; break; } } if (!found) { WrapperProvider.Processes.Add(process); } } } // Adding Processes to EggBasket Provider if (args.gamedata.TryGet(GDOReferences.EggBasketProvider.ID, out Appliance EggBasketProvider)) { foreach (Appliance.ApplianceProcesses process in Countertop.Processes) { bool found = false; foreach (Appliance.ApplianceProcesses process2 in WrapperProvider.Processes) { if (process.Process == process2.Process) { found = true; break; } } if (!found) { EggBasketProvider.Processes.Add(process); } } } } } }; } } }