-
Notifications
You must be signed in to change notification settings - Fork 11
Data potions
The way potions work in vanilla is, to me, lacking. So let's tweak it to hell and back. And because I know nobody will agree on what I did is good, you can tweak it to your heart's content.
tl;dr All potions last for longer, stack to 8 and are faster to drink, but go on a short cooldown after being used.
Some general changes affecting all potions.
brewing.potion.stack_size
Positive integer. How many potions can be held in a single slot (they must contain the same effects to be stackable).
-
brewing.potion.duration_multiplier*
Number to multiply all (all) potions' durations by. Only effects gained from potions will last longer.
Keep in mind this also affects negative effect tipped arrows, so refrain from making it too high (unless you are changing these in another way).
brewing.potion.drinking_time
Positive integer. How many ticks potions take to drink (20t = 1s).
brewing.potion.cooldown
Positive integer. How many ticks potions go on a cooldown after drinking or throwing (20t = 1s).
The options explained above are nice, sure. But what beats being able to change all these values for individual potions?
By making a datapack and adding files to the potions/ folder, you can add select overrides, change a potion's effects, and add custom textures for certain potions. This system even allows you to register entirely new potions at runtime.
{
"potion": potionid,
"effects": Array,
"drinking_time": int,
"cooldown": int,
"create": boolean
}potion
The id of the potion to be modified. If it doesn't exist and create is true, will register it as a new potion.
effects
A list of effects this potion should give. If unset, the potion's effects will not be changed.
Each element of this array must be of the form
{
"effect": effectid,
"amplifier": int,
"duration": int (in ticks)
}drinking_time
Positive integer. Defaults to brewing.potion.drinking_time. Defines a custom drinking time for this potion.
cooldown
Positive integer. Defaults to brewing.potion.cooldown. Defines a custom cooldown for this potion.
create
Boolean. Defaults to false.
So yes, changing how potions act is good. But while we are at it, why not be able to change how they look too?
When rendering, potion items containing modid:potionid will attempt to look for a model and texture in assets/<modid>/models/potions/<potionid>.json.
This model must be a valid item model json file.
For splash/lingering potions, the model will be searched in the subfolder splash/lingering.
For example, the potion item containing
minecraft:long_poisonwill look forassets/minecraft/models/potions/long_poison.json, while the splash potion item containing that same potion will look forassets/minecraft/models/potions/splash/long_posion.json
If such a model exists and is found, it will be used in place of the default vanilla one.
And of course, this all works with custom data driven potions.
Additionally, long and strong potion variants have a built in model change. It is used only if no override described above is found.
