From farm and pasture to a shared table in TF-Minecraft.
Cooking makes food an interactive part of everyday life. Players grow and gather ingredients, care for livestock, prepare meals using kitchen furniture, and serve dishes whose quality, freshness, and variety matter to their character's diet.
- Working kitchens — fry, boil, prepare sauces and soups, and bake with cookware, heat sources, and fuelled ovens. Leaving food cooking too long can burn it. The frying pan fries eggs, grills mushrooms and pops chopped corn into popcorn: a cooking option can name the food a piece turns into once it is done (
outputintypes.yml). - Popcorn machine — put up to 16 corn (one per right-click) and up to two toppings (caramel, sugar, butter, salt, honey) in a popcorn machine and start it with an empty hand: the kettle rattles, kernels pop out and land on a rising heap behind the glass. Once it stops, a right-click takes out 4 popcorn per corn, each with its corn's stars and every topping (Salted Caramel Popcorn) (
popcorn-machines.yml). Caramel is sugar and butter boiled in a cup of water in the saucepan and bottled (condiments.yml). - Chocolate — cocoa beans roast in the frying pan and are ground on the milling stone into cocoa powder. Boil a cup of milk with cocoa powder and a sweetener in the saucepan and fill an empty cup with hot chocolate, which you drink and keep the cup (
returnsintypes.yml). Add butter and take it out with a bowl as melted milk chocolate (a cup of water makes it dark), pour it into a chocolate mould and cut it into 4 bars with the knife (crafting-stations.yml). Vanilla, cinnamon and nutmeg boiled in with them flavour and name them, Cinnamon Hot Chocolate or Vanilla Milk Chocolate Bar (extrasandcontaineron the saucepan'sbottlesincondiments.yml); cinnamon and vanilla also top popcorn. - Food preparation — milling stones, mixing bowls, butter churns, sausage makers, and baking trays provide different ways to transform ingredients.
- Sandwiches — lay a slice of bread on a cutting board, add spreads, cheese and vegetables, close it with another slice and pick it up. Its fillings name it, and its food, quality and freshness come from its layers (
sandwiches.yml). Its layers also earn it bonuses such as Hearty, Buttered or Well-Rounded (bonusesinsandwiches.yml). Fried meat goes in too: fried beef makes it a Hamburger (a Cheeseburger with cheese), and fried pork with lettuce and tomato a BLT (kindsinsandwiches.yml). - Pizzas — place a pizza peel, put dough on it, spread a paste and add cheese, vegetables, fruit, sausage and spices, then carry the peel into a lit oven to bake. A baked pizza is taken off a slice at a time. Its toppings name it, and its food, quality and freshness come from its layers (
pizzas.yml). Its toppings also earn it bonuses such as Saucy, Extra Cheesy or Well Seasoned (bonusesinpizzas.yml). - Salads — right-click a placed bowl with chopped or cooked veg, fruit, cheese or meat, add a dressing or seasoning, and toss it with an empty hand. Each ingredient lies in the bowl as a small heap of its pieces, in its own look for every origin and state (
modelsandspread-radius); the tossed salad stays in the bowl with them and is eaten from it. Its ingredients name it, its kind (fruit, greek, carrot, mixed) gives it its look, and it earns bonuses such as Dressed or Crisp (salads.yml). - Stock and mashed potatoes — boil two bones in a cup of water in the saucepan and bottle the stock (
condiments.yml); a soup started with stock instead of water is Rich. Put four boiled cut potatoes and a butter (with milk or salt if you like) in an empty pot, mash them without water or heat, and ladle the mash onto a plate beside the other food (pot.yml). - Thick sauce — cook flour in a buttered frying pan until it turns into a roux (without butter it burns, and a burnt roux spoils a sauce). A roux put into a saucepan of water, milk or a brew takes one of its two ingredient places and makes the sauce Thick: the tag names it (Thick Garlic Sauce), so a dish it is ladled onto lists a Thick sauce too. Raw flour is refused with a hint (
types.ymlflouroutput,naming.ymlthickener,tags.ymlsauce_thickness). - Pies — line a pie tin with dough, fill it with fruit, meat, mashed potato, vegetables or cheese, and bake it in the oven like the bread tray. The whole pie comes out of the tin with an empty hand and is cut into four slices on the cutting board. Its fillings make its kind (Apple, Key Lime, Mixed Berry, Pumpkin, Meat, Shepherd's) and name, and its food, quality and freshness come from its dough and fillings (
pies.yml). - Sweet berries, sugar cane and beetroot — sweet berries become Cooking fruit on pickup (
conversions.yml), so they go into salads, pies (Mixed Berry) and jam sandwiches (Sweet Berry Jam). The milling stone holds several recipes (milling-recipes.yml): 8 wheat grind into flour, and 8 sugar cane into 8 sugar, the same sweetener vanilla sugar becomes on pickup; each recipe sets its result's category, origin and amount, what the stone shows, and what a broken stone gives back. A soup that is at least half beetroot is ladled as Borscht:pot.ymlkindsname a soup from its boiled pieces, aspies.ymlkinds name pies. - Pumpkin — a pie of nothing but cut or chopped pumpkin bakes into a Pumpkin Pie (
pies.ymlkinds), and a soup that is at least half pumpkin is ladled as Pumpkin Soup (pot.ymlkinds). - Rice — harvested rice boils in the soup pot into boiled rice (a pot option can name an
outputtoo, as the pan's can). Boiled rice fries into fried rice in the frying pan, and taken out it stirs in the other fried pieces beside it: a fried egg, cut vegetables, mushrooms, meat or fish, which name it (Egg Fried Rice) and add their food (frying-pan.ymlstir-ins). Two boiled rice, a cup of milk and a sweetener make rice pudding in an empty pot (pot.yml), and a boiled rice and a raw fish filet roll into two pieces of sushi named for the fish on the cutting board (Salmon Sushi): acombinerecipe takes one of each input whatever their origins (crafting-stations.yml). - Mushrooms and hidden poison — grilled mushrooms go into sandwiches and salads, raw or grilled ones onto pizzas and into pies, and raw ones boil into soup; in a dish both kinds are just "Mushroom". Each red mushroom poisons the dish a step further (Tainted, Poisoned, Deadly: less and less nutrition, the same food, and nausea, then poison, then weakness for whoever eats it). In a dish of 3 stars or more with its red mushrooms grilled (or its own bake cooked, its soup boiled) the poison is hidden: the lore shows no tag and the Food and Nutrition it would have without it, but eating applies it. Any dish bonus can count an origin and hide its tag this way (
count: origin,hide-at-stars,hide-tags,hide-dish-tagsin the dishes'bonuses;tags.ymlpoison). Any tag step can make the eater ill witheffects("poison 10 1": effect, seconds, level), hidden or not. - Octopus, jellyfish and seafood soups — octopus and jellyfish come from warm-water catches cut on the cutting board like fish. Octopus grilled in the frying pan becomes Grilled Octopus; jellyfish cubes cut again on the board become Jellyfish Strips (raw, fried or boiled as the cubes were), and both go into salads. Boiled seafood mashed in the pot with a potato makes a Seafood Chowder, with other vegetables or another seafood a Seafood Stew (
kindsinpot.yml). - Honey and glazed roasts — a honey bottle picked up becomes Cooking honey, a sweetener like sugar: it sweetens dough in the mixing bowl, sauces and catsup in the saucepan and popcorn, and the station gives back the empty bottle (
returnsintypes.yml). Drunk from the bottle it still feeds a little and cures poison, as in vanilla, and Brewery recipes still take it as a honey bottle. Right-click the roast on a fire pit or a meat hook with honey to glaze it: it becomes Honey-Glazed (more food and nutrition), shows a glossy glazed look once cooked, and every cut carved from it is glazed too (glazes.yml). - Serving and sharing — plate dishes, ladle soup into bowls, and carve foods into portions for the table.
- Quality and freshness — ingredient quality and composition influence finished dishes, while aging and food tags carry preparation history through the kitchen.
- Farming and husbandry — crop fertility and harvest quality sit alongside animal care, breeding, genetics, and produce collection.
- Fish and seafood — turn supported catches into cooking ingredients that keep their catch size; fish of one kind and quality stack whatever their size.
- Character nutrition — meals feed a character's food reserve and influence diet quality, with variety rewarding a broader selection of ingredients.
- MMOItems crafting stations — the
cooking{item="seafood(type=seafood_whole;origin=Salmon)",amount=64,display="Salmon"}ingredient takes Cooking food, plus the plain items Cooking converts on pickup (a fresh catch counts as the salmon it becomes).itemis ac.path without the prefix and must name a foodtype; quality and tags filters work too. Cooking claims those items before MMOItems'vanilla{}type, so usecooking{}for salmon, wheat, sugar, beef and the other converted foods. Cancelling a queued craft refunds the least the line accepts: its lowest quality, aged out unless the line pins that tag.
Crops are planted outdoors under open sky, beneath the glass roof of a greenhouse, or under a low pergola of slabs, stairs and signs. A harvest can become flour, dough, bread, or part of a cooked dish. Milk and meat enter their own preparation chains, and the result can be served through furniture as well as carried as food items. Cooking connects these activities into a shared system for farmers, cooks, and diners.
Technical documentation is maintained in TF-Minecraft/Docs.
With Java 21 and the build dependencies prepared, run:
mvn -B --no-transfer-progress clean verifyThe JUnit 5 suite covers food parsing and items, crops, husbandry, nutrition,
fishing and configuration loading, using MockBukkit and Mockito where Bukkit or
plugin APIs are involved. Build and release CI run the same verification. The
Build workflow uploads Surefire results from target/surefire-reports/. JaCoCo
requires 100% line coverage across all production classes, with no coverage
exclusions. HTML and XML
reports are target/site/jacoco/index.html and target/site/jacoco/jacoco.xml,
and the Build workflow uploads that directory.
The tests do not replace checking kitchens, crops and livestock on a live Paper
server with the pinned integrations.
Copyright (c) 2026 TF-Minecraft contributors.
TF-Minecraft-authored material in this repository is licensed under the Artistic License 2.0. Third-party dependencies and bundled material retain their own licenses.