Magical gene / no coat effect

Potion milk

A mare who can be milked into a glass bottle rather than a bucket, and hands back a potion. One allele per effect. It does not touch the ordinary milk locus — a horse can have both, and which you get depends on what you are holding.

Built, and not yet seen in game

The gene, its inheritance and its founder table exist and are covered by the test suite; the translator that turns it into behaviour was written against the 26.1.2 sources and is flagged unverified in its own comments. Nothing on this page has been watched happening to a horse. What to look at, and what is most likely to be wrong, is on To be verified.

What it does

Right-click a tamed, grown mare with an empty glass bottle. A horse expressing this locus hands back a potion of whatever its alleles say. A bucket still gets you milk, if it has the milk gene; a bottle on a horse without this gene does nothing.

Hold a bottle out to a stallion carrying it and he rears and kicks you, and tells you only a mare gives potion milk. A foal tells you it has nothing to give yet.

CombinationOutcome
two copies of one effectthat potion, at the stronger grade
one copy of one effectthat potion, weak
two different effectsboth effects, both weak, in one bottle
anything with an nthe single effect, weak

How often

Governed by the same milk volume locus that governs everything else the horse can be milked for, without either gene knowing about the other.

Health

None to the horse. Like the plain milk gene, a mare has to be at her own full health: a hurt one refuses, and says she won’t give anything until she has healed (owner’s call, 2026-09-10 — before that, potion milk ignored health entirely).

Gene key
horsegenetics.potion_milk
Alleles
one per mob effect, plus n
Inheritance
incomplete dominance — one copy weak, two copies strong
Reaches the game as
a yield effect consuming minecraft:glass_bottle
Yield kind
potion — so milk volume governs it
Coat effect
none, ever
Same-kind yields must merge, or the gene silently lies

A compound heterozygote carries two yield abilities, both triggered by a glass bottle. Today the first matching yield fires and the second is ignored — which would hand back a single-effect potion while this page promises two. The translator needs to merge yields of the same kind into one item before producing it. This is the one part of the gene that is not already built, and it is the part that will be forgotten.

Everything else already exists

yield already takes consumes, so minecraft:glass_bottle is expressible today. minDose already gates the stronger half on two copies — its javadoc names incomplete dominance as the reason it exists. And declaring kind: potion hands governance to milk volume for free.

Unknown effect ids must be skipped, not produced

Effect ids are resolved against the live registry, following lycan's rule that an id this game version has never heard of simply does nothing. An unrecognised id must make the yield not fire at all — producing a potion with no contents is worse than producing nothing, because it consumes the bottle.

Why the compound gives both

The alternative was lycan's rule — a mismatched pair yields nothing — and it was considered and rejected here. Lycan needs mismatch to bite because a shifting horse is a whole animal and picking one of two shapes is incoherent. A potion is not a shape; two effects in one bottle is a thing that already exists in the game, so the honest reading of two half-doses is two half-doses.

Two milk loci, deliberately

This gene does not extend or override milk. They are different loci with different alleles and different containers, and a horse may express both. The container is the disambiguator, which is why the trigger carries the item rather than the gene carrying a mode.

Incomplete dominance without an expression language

This locus is the clearest demonstration of what minDose is for. A gene file has no way to write “if homozygous”, so the format gives every effect a minimum dose instead: the weak potion declares 1, the strong one declares 2, and the horse’s own genotype decides which is active. No expression language, no per-gene Java, and the same trick is available to anyone writing a gene file.

Planned source: common/genetics/genes/PotionMilkGene.java