/// <summary>
 /// Replace logic determining item drop-in actions on garden bed objects.
 /// </summary>
 public static bool Utility_IsThereAnObjectHereWhichAcceptsThisItem_Prefix(
     ref bool __result,
     GameLocation location,
     Item item,
     int x,
     int y)
 {
     try
     {
         Vector2 tileLocation = new Vector2(x / Game1.tileSize, y / Game1.tileSize);
         if (location.Objects.TryGetValue(tileLocation, out StardewValley.Object o) && o != null && o is OutdoorPot op)
         {
             if (!OutdoorPot.CanAcceptItemOrSeed(item: item) && OutdoorPot.CanAcceptAnything(op: op))
             {
                 __result = op.performObjectDropInAction(dropInItem: (StardewValley.Object)item, probe: true, who: Game1.player);
             }
             else
             {
                 __result = false;
             }
             return(false);
         }
     }
     catch (Exception e)
     {
         HarmonyPatches.ErrorHandler(e);
     }
     return(true);
 }
        /// <summary>
        /// Replace logic for crafting objects in base game crafting menu to create the appropriate garden bed for the crafting recipe variant.
        /// </summary>
        public static bool CraftingPage_ClickCraftingRecipe_Prefix(
            CraftingPage __instance,
            int ___currentCraftingPage,
            ref Item ___heldItem,
            ClickableTextureComponent c,
            bool playSound = true)
        {
            try
            {
                // Fetch an instance of any clicked-on craftable in the crafting menu
                CraftingRecipe recipe = __instance.pagesOfCraftingRecipes[___currentCraftingPage][c];

                // Fall through to default method for any other craftables
                if (!recipe.name.StartsWith(OutdoorPot.GenericName))
                {
                    return(true);
                }

                OutdoorPot item = new OutdoorPot(
                    variantKey: OutdoorPot.GetVariantKeyFromName(recipe.name),
                    tileLocation: Vector2.Zero);

                // Behaviours as from base method
                recipe.consumeIngredients(null);
                if (playSound)
                {
                    Game1.playSound("coin");
                }
                if (___heldItem == null)
                {
                    ___heldItem = item;
                }
                else if (___heldItem.canStackWith(item))
                {
                    ___heldItem.addToStack(item);
                }
                if (Game1.player.craftingRecipes.ContainsKey(recipe.name))
                {
                    Game1.player.craftingRecipes[recipe.name] += recipe.numberProducedPerCraft;
                }
                Game1.stats.checkForCraftingAchievements();
                if (Game1.options.gamepadControls && ___heldItem != null && Game1.player.couldInventoryAcceptThisItem(___heldItem))
                {
                    Game1.player.addItemToInventoryBool(___heldItem);
                    ___heldItem = null;
                }

                return(false);
            }
            catch (Exception e)
            {
                HarmonyPatches.ErrorHandler(e);
            }
            return(true);
        }
 /// <summary>
 /// Add logic to consider new conditions for planting seeds in garden bed objects.
 /// </summary>
 public static bool Utility_IsViableSeedSpot_Prefix(
     GameLocation location,
     Vector2 tileLocation,
     Item item)
 {
     try
     {
         if (location.Objects.TryGetValue(tileLocation, out StardewValley.Object o) && o != null && o is OutdoorPot op)
         {
             return(OutdoorPot.CanAcceptItemOrSeed(item) && OutdoorPot.CanAcceptSeed(item: item, op: op) && OutdoorPot.CanAcceptAnything(op: op));
         }
     }
     catch (Exception e)
     {
         HarmonyPatches.ErrorHandler(e);
     }
     return(true);
 }
Example #4
0
        private void Initialise()
        {
            Log.T("Initialising mod data.");

            // Assets
            AssetManager assetManager = new AssetManager(helper: this.Helper);

            this.Helper.Content.AssetLoaders.Add(assetManager);
            this.Helper.Content.AssetEditors.Add(assetManager);

            // Content
            Translations.Initialise();
            this.LoadContentPacks();
            this.AddGenericModConfigMenu();

            // Patches
            HarmonyPatches.Patch(id: this.ModManifest.UniqueID);

            // Events
            this.Helper.Events.Specialized.LoadStageChanged += this.Specialized_LoadStageChanged;
            this.Helper.Events.GameLoop.SaveLoaded          += this.GameLoop_SaveLoaded;
            this.Helper.Events.GameLoop.DayStarted          += this.GameLoop_DayStarted;
            this.Helper.Events.GameLoop.DayEnding           += this.GameLoop_DayEnding;
            SpaceCore.Events.SpaceEvents.ShowNightEndMenus  += this.SpaceEvents_ShowNightEndMenus;

            // Console commands
            this.Helper.ConsoleCommands.Add(
                name: ModEntry.CommandPrefix + "eventget",
                documentation: $"Check if event has been seen.{Environment.NewLine}Optional event ID, defaults to root event.",
                callback: ModEntry.Cmd_IsEventSeen);
            this.Helper.ConsoleCommands.Add(
                name: ModEntry.CommandPrefix + "eventset",
                documentation: $"Set state for having seen any event.{Environment.NewLine}Optional event ID, defaults to root event.",
                callback: ModEntry.Cmd_ToggleEventSeen);
            this.Helper.ConsoleCommands.Add(
                name: ModEntry.CommandPrefix + "give",
                documentation: $"Give several of all currently unlocked varieties of raised beds.",
                callback: ModEntry.Cmd_Give);
            this.Helper.ConsoleCommands.Add(
                name: ModEntry.CommandPrefix + "giveall",
                documentation: "Give several of all varieties of raised beds.",
                callback: ModEntry.Cmd_GiveAll);
        }
 /// <summary>
 /// Replace logic for garden bed objects being watered by sprinklers.
 /// </summary>
 public static bool Object_ApplySprinkler_Prefix(
     GameLocation location,
     Vector2 tile)
 {
     try
     {
         if (ModEntry.Config.SprinklersEnabled &&
             location.Objects.TryGetValue(tile, out StardewValley.Object o) && o != null && o is OutdoorPot op)
         {
             if (OutdoorPot.CanAcceptAnything(op: op, ignoreCrops: true))
             {
                 op.Water();
             }
             return(false);
         }
     }
     catch (Exception e)
     {
         HarmonyPatches.ErrorHandler(e);
     }
     return(true);
 }