Appearance
File Structure
Customizing bounty objectives in Bountiful can be done in two different ways:
- Data Packs
- Configs
It is recommended that you read up on both methods, because knowing how one system works will aid you with the other.
Data Packs
You can create your own data pack using instructions from the Minecraft wiki. You should come to an understanding that data packs override data from the vanilla game, and from other mods. In this case, you want to create a data pack that overrides Bountiful's data files, which can be found right here.
An example data pack can be found on Modrinth.
To aid in the creation of Data Packs, you may want to use a mod such as Open Loader that allows global data pack loading across all worlds.
Config Pack
A "config pack", as I call it, is nearly identical to a data pack, except the folder structure exists inside of the config folder. In the config folder, you will find two subfolders:
bounty_decrees
bounty_pools
Just like with data packs, you can create Pools and Decrees, and add them here. However, unlike data packs, you do not need to create a subfolder for each mod you are adding compatibility for, since we are modifying the pool and decree data after it has already been loaded.
E.g.:
config
bountiful
bounty_pools
- new_pool.json
- toolsmith_objs.json
By default, adding a new file will add all of the file's elements into the game data. If you instead wish to replace the datapack/game data with your config data, you can add "replace": true
to the top of your file's json object.
Changing Content
Bountiful tries to balance itself against the vanilla game, but inevitably it's understandable that you've got some mods. Perhaps you want to make some things more expensive, or replace emeralds with a different type of currency. In that case, we can do what we call a "patch".
Entry Patching
Lets say we want to take the farmer objective that asks the player to bring back some saplings, and make the saplings worth more. Maybe 50 is too low, and we want to increase it to 100. To do that, we would create a new file at config/bountiful/bounty_pools/farmer_objs.json
and put this in it:
json
{
"content": {
"farmer_obj_oak_sapling": {
"unitWorth": 100
}
}
}
When Bounty data loads, Bountiful will look for the ID farmer_obj_oak_sapling
in the farmer_objs
pool, and overwrite the old unitWorth
with the new one. Any JSON key can be patch-overwritten for any pool entry.
We could use this method to do any sort of updates we want, such as:
- Increase the worth of a reward or objective
- Make a reward more or less rare
- Change how many of the objective/reward can be asked for / given
Removing Content
Removing a Single Entry
If we wanted to take the earlier example, and instead completely remove the oak sapling from the farmer objective pool, we just need to refer to it by its ID and set it to null in config/bountiful/bounty_pools/farmer_objs.json
:
json
{
"content": {
"farmer_obj_oak_sapling": null
}
}
Entire Pool Wipes
Removing all entries from a pool is simple. If you want to completely remove all entries from farmer_objs.json
, write this text a new file at config/bountiful/bounty_pools/farmer_objs.json
:
json
{
"replace" true,
"content": {}
}
This uses the replace
key we mentioned earlier and replaces the entire contents of the farmer_objs
pool with an empty list.
Bulk Removals
If you want to remove certain decrees and pools from the game, Bountiful's config allows you to specify certain datapack/game data files which you would like to exclude from loading. For example:
bounty_pools/bountiful/*
will exclude all Bountiful pools from loadingbounty_pools/*
will exclude all pools from loadingbounty_*
or just*
would exclude all pools and decrees from loading
Localizing Content
Some content (namely, decrees or objectives/rewards with custom translation keys) may require you to contribute a localization to the game. This can be done via a resource pack. If you'd like a more simple approach, then something such as Open Loader (mentioned above) will also work wonderfully.