Item / stabling

Tickets

A ticket sends a horse home. Right-click one of your horses with one and it goes to its stall; the ticket is spent. The tier decides how far apart the two are allowed to be.

The mirror of a whistle

A whistle brings a horse to you; a ticket sends a horse to its stall. Two directions, two items, no overlap — which is how the two were settled against each other.

Using one

Right-click your horse with the ticket. It has to be your horse, it has to have a stall, and you have to be off its back. One use; nothing is spent unless the horse actually moved, and every refusal says which of those it was.

A ticket is not bound to a horse. The horse you click is the horse that travels, so one in your pocket covers whichever animal has got itself stuck on the wrong side of a river. The horse arrives standing in its stall — the middle of the floor if that is standing room, otherwise the first spot in the stall that is.

The four tiers

ItemReachRecipe (shapeless)
Blank ticket None — it is the base the others are made from, and says so if you try it on a horse. paper + horse hair
Basic ticket Within the overworld. Both the horse and its stall have to be there. blank ticket + horse hair
Bound ticket Within any one world, the horse dimension included — but the stall must be in the same world as the horse. basic ticket + horse hair + ender pearl
Interdimensional ticket Anywhere to anywhere. The only ticket that crosses between worlds. bound ticket + horse hair + eye of ender + blaze powder

“Bound” is a name from when the tickets were going to be bound to one horse each. They are not; the tier is reach, and the recipe ladder is what says so — an ender pearl to leave the overworld, an eye and blaze powder to leave the world you are in.

All four share one texture.

The holding pen ticket, and its sign

A horse you tamed a minute ago has no stall, so no ticket above can send it anywhere. The holding pen is for that horse. Hang a holding pen sign (a spruce sign and horse hair) on the wall of a pen - it measures the room behind it the way a stall sign does - and that pen is yours. Then right-click any horse you own with a holding pen ticket (a blank ticket and wheat) and it arrives in the middle of your pen, from any world.

  • One pen per player. Hanging a second sign moves your pen there; the old sign stays up as an ordinary sign.
  • Breaking the sign releases the pen.
  • Like every ticket it is one use, and it refuses - and is not spent - when the horse is not yours, you have no pen yet, or the pen has no room to stand.

Where it lives

item/TicketItem is the item and its Tier — the tier and the tooltip words, nothing else. The interaction is server/TicketHandler, on EntityInteract, following the same shape as every other horse interaction in the mod: cancelled on both sides so the client does not predict a mount, and everything done server-side (see API notes).

The destination comes from StallData.forHorse, but the stall is measured again, live, from the sign rather than read back from the record. Two reasons, and the first one cost a horse: the stored span is a bounding box, and a box around any room that is not a plain cuboid contains the walls inside it. The second is that people rebuild stalls, so re-running the detector means a stall that has been widened or re-fenced since the sign went up is the stall the horse arrives in. The chunk is pulled in first, because a horse teleported into unloaded terrain is the failure that looks exactly like a horse that was deleted.

If there is nowhere to stand, the ticket refuses and is not spent. The version before this scanned the bounding volume and, finding nothing, fell through to the sign’s own block — flush against a wall, with wall material at head height, and the one position in the routine never checked for anything. The horse suffocated. A refusal the player can read beats a horse in a wall.

The holding pen is the same machinery pointed at a player instead of a horse: item/HoldingPenSignItem writes a PenRecord (owner, dimension, sign) into StallData, keyed by the player so a second sign replaces the first, and item/HoldingPenTicketItem is handled in TicketHandler.sendToPen - the same live measure, the same dead-centre StallDetector.landingSpot, the same arrive. Breaking the sign goes through StallSignHandler.onSignBroken, which now releases a pen as well as a stall. The ticket’s texture is the ticket’s art hue-rotated, as a placeholder.

Known gaps

  • Never played. Shipped in 0.3.7 and not once used in-game — see To be verified.
  • The cross-dimension teleportTo signature is the same one the hay portal uses, which is itself listed as unverified.
  • All four share one texture.
item/TicketItem.java, server/TicketHandler.java.