Enjoy Stardew Valley with Bush Bloom Mod, the mod that improves the game with more features. With Bush Bloom Mod Stardew Valley Mod, you can change your gameplay to match your style. Follow our detailed guide below to know how to install and use it.


Mod Description

Allows creating custom bush blooming schedules to support whatever seasons, days, locations, and items you may want.

Do you like running around areas clicking on colorful bushes and getting free items? Do you wish you could do that more often, and get things other than Salmonberries and Blackberries?

Me too!

This mod doesn't really do that, but it allows you (or someone else) to make that dream come alive with content packs.

This started as a way to get Juniper Berries to bloom in my other mod Copper Still and grew into a generic framework over time.

General features:

  1. Create your own bush blooming schedules;
  2. Shake off whatever item you choose;
  3. Supports multiple schedules active at the same time;
  4. Supports custom berry textures for each schedule;
  5. Supports custom blooming chance;
  6. Supports only blooming in specific locations;
  7. Schedules can be as short as a single day, or as long as all year;
  8. Allows other mods to check for custom blooming schedules;
  9. Config options to toggle some features depending on your other mods.
  10. Built-in support for Deluxe Grabber Redux
  11. Built-in support for Almanac


Configuration options:
You can edit these configuration files in-game using the Generic Mod Config Menu interface, or directly in the config.json file.

Enable Default Blooming: (true|false) Enable the game's default spring and fall bush blooming schedules. Disabling them does not modify any other game logic, bundles, quests, or storytelling in the game. Do so at your own risk!

Use Spring Bush for Summer: (true|false) The default summer blooming bush does not have berries. This reuses the spring bush to accommodate blooming in summer. Disable if you are using another mod that adds a summer berry bush sprite.

Use Custom Winter Berry: (true|false) The default winter blooming bush does not exist. This uses a custom sprite to accommodate blooming in winter. Disable if you are using another mod that adds a winter blooming bush sprite.
                   
Support Deluxe Grabber Redux: (true|false) When using that mod, allows the grabber to harvest custom items from bushes.

Support Almanac: (true|false) When using that mod, allows the almanac to show custom gathering schedules. When enabled, it's highly recommended to disable that mod's option ‘Page: Local Notices' > ‘Show Gathering' in order to not show duplicates of the default gathering schedules.

Content pack details:
This mod includes an example directory that contains a manifest.json, content.json, and assets/berry.png. These can serve as a template for creating additional content packs. Below are some examples of what the content.json can contain.

You can also review my other mod as an example: Ore Berries

Example full schedule config:

[{
// Optional; Default is true if missing
"Enabled": true,

// Required; Value can be the item ID or Name, but must exist
"ShakeOff": 0,

// Required; Value must be 'spring', 'summer', 'fall', or 'winter'
"StartSeason": "spring",

// Required; Value must be from 1 to 28
"StartDay": 1,

// Optional; Default is StartSeason value if missing
"EndSeason": "winter",

// Optional; Default is StartDay value if missing
"EndDay": 28,

// Optional; Default is built-in texture if missing
"Texture": "assets\berry.png", 

// Optional; Default is 0.2 if missing; Value must be between 0.0 and 1.0
"Chance": 0.2,

// Optional; Default is all locations if missing or empty
"Locations": [ "Forest", "Mountain" ]}]

Example minimal default schedules:

[{
"ShakeOff": 296,
"StartSeason": "spring",
"StartDay": 15,
"EndDay": 18
}, {
"ShakeOff": 410,
"StartSeason": "fall",
"StartDay": 8,
"EndDay": 11
}]

Integration details:
If you are making a different mod and want to integrate with this mods features, familiarize yourself with this: Modding:Modder Guide/APIs/Integrations

To incorporate this mod's logic into your own mod, create this interface in your project, including the specific method(s) you will actually need:

public interface IBushBloomModApi {
///

/// Returns an array of (item_id, first_day, last_day) for all possible active blooming
/// schedules on the given season and day, optionally within the given location.
///

public (int, WorldDate, WorldDate)[] GetActiveSchedules(string season, int dayofMonth, GameLocation? location = null);

///

/// Returns the chosen shake off item id, or -1 if none, for the given bush.
/// Must be called after calling bush.inBloom(season, dayOfMonth).
///

public int GetShakeOffId(Bush bush);
}

Then call for the API in your Entry method:

var bbm = helper.ModRegistry.GetApi("NCarigon.BushBloomMod");
You will need to update your bush checking logic to include calling the API.

For example, if your original method is:

private void Harvest(Bush bush) {
var season = (bush.overrideSeason.Value == -1) ? Game1.GetSeasonForLocation(bush.currentLocation) : Utility.getSeasonNameFromNumber(bush.overrideSeason.Value);
if (bush.size.Value == 1 && bush.inBloom(season, Game1.dayOfMonth)) {
var shakeOff = -1;
if (season == "spring") shakeOff = 296; //Salmonberry
else if (season == "fall") shakeOff = 410; //Blackberry;
if (shakeOff != -1) {
bush.tileSheetOffset.Value = 0;
Game1.player.addItemToInventory(new SObject(shakeOff, 1));
}
}
}

Updated it to include the API call, with a fallback for when the mod is not installed:

private void Harvest(Bush bush) {
var season = (bush.overrideSeason.Value == -1) ? Game1.GetSeasonForLocation(bush.currentLocation) : Utility.getSeasonNameFromNumber(bush.overrideSeason.Value);
if (bush.size.Value == 1 && bush.inBloom(season, Game1.dayOfMonth)) {
var shakeOff = bbm?.GetShakeOffId(bush) ?? -1;
if (shakeOff == -1) {
if (season == "spring") shakeOff = 296; //Salmonberry
else if (season == "fall") shakeOff = 410; //Blackberry;
}
if (shakeOff != -1) {
bush.tileSheetOffset.Value = 0;
Game1.player.addItemToInventory(new SObject(shakeOff, 1));
}
}
}

For another example, if you want to enumerate the blooming items for a given date, your orignal code might look like this:

private IEnumerable<(Item, WorldDate, WorldDate)> GetBloomSchedules(Bush bush, WorldDate date) {
if (bush.inBloom(date.Season, date.DayOfMonth)) {
int id = -1;
if (date.Seasjavascript-event-stripped= 0) id = 296; // Salmonberry
else if (date.Seasjavascript-event-stripped= 2) id = 410; // Blackberry
if (id != -1) {
if (date.DayOfMonth == 1 || !bush.inBloom(date.Season, date.DayOfMonth - 1)) {
int last = date.DayOfMonth;
for (int d = date.DayOfMonth + 1; d <= 28; d++) {
if (!bush.inBloom(date.Season, d))
break;
last = d;
}
yield return (new SObject(id, 1), new WorldDate(date.Year, date.Season, date.DayOfMonth), new WorldDate(date.Year, date.Season, last));
}
}
}
}

And the integrated code would look like this:

private IEnumerable<(Item, WorldDate, WorldDate)> GetBloomSchedules(Bush bush, WorldDate date) {
if (bbm is not null) {
foreach (var sched in bbm.GetActiveSchedules(date.Season, date.DayOfMonth)) {
yield return (new SObject(sched.Item1, 1), sched.Item2, sched.Item3);
}
} else if (bush.inBloom(date.Season, date.DayOfMonth)) {
int id = -1;
if (date.Seasjavascript-event-stripped= 0) id = 296; // Salmonberry
else if (date.Seasjavascript-event-stripped= 2) id = 410; // Blackberry
if (id != -1) {
if (date.DayOfMonth == 1 || !bush.inBloom(date.Season, date.DayOfMonth - 1)) {
int last = date.DayOfMonth;
for (int d = date.DayOfMonth + 1; d <= 28; d++) {
if (!bush.inBloom(date.Season, d))
break;
last = d;
}
yield return (new SObject(id, 1), new WorldDate(date.Year, date.Season, date.DayOfMonth), new WorldDate(date.Year, date.Season, last));
}
}
}
}

Source: ncarigon/StardewValleyMods (github.com)

My mods:
Copper Still
Garden Pot – Automate
Passable Crops
Bush Bloom Mod
Ore Berries

MOD Download

NEXUSFILE

MediaFire, Mega, GoFile, GGdrive… Coming soon.

File information

Last updated: 11 March 2023 1:43AM | Original upload: 10 March 2023 9:11PM | Created by: ncarigon | Uploaded by: ncarigon | Virus scan: Safe to use

Screenshots

Bush Bloom Mod Gameplay Mechanics

Bush Bloom Mod Gameplay Mechanics

Bush Bloom Mod Gameplay Mechanics

Bush Bloom Mod Gameplay Mechanics

Bush Bloom Mod Gameplay Mechanics

Share this mod to your friend

Leave a Reply

Your email address will not be published. Required fields are marked *