promotional bannermobile promotional banner

FoodAttributes

Makes each food give you a different attribute. This way, which food you eat actually matters.
Back to Files

foodattributes-2.0.jar

File namefoodattributes-2.0.jar
Uploader
httpedrodevhttpedrodev
Uploaded
Aug 31, 2026
Downloads
81
Size
317.0 KB
Mod Loaders
NeoForge
File ID
8777591
Type
R
Release
Supported game versions
  • 1.21.1

Curse Maven Snippet

NeoForge

implementation "curse.maven:foodattributes-1572406:8777591"

Learn more about Curse Maven

What's new

FoodAttributes 2.0

Dependencies and packaging

  • Farmer's Delight is now a hard dependency instead of optional. The mod declares it as required and loads after it, because the cooking system runs on FD's skillet and the skillet renderer registration has to replace FD's.
  • Cuisine Delight integration removed entirely. The CuisineDelightCompat handler, the cuisineDelightMultiplier / cuisineDelightDurationMultiplier / cuisineDelightOnlyMode config options, and the build dependency are all gone. The generic "procedural dish" config below takes its place.

Skillet cooking system (new, master switch cookingSystemEnabled)

FoodAttributes takes over Farmer's Delight's skillet and turns it into a freeform, fully data-driven cooking station. FD's original single-item skillet cooking still runs whenever no dish is going and the clicked item is not a registered ingredient. On a dedicated server the server's cookingSystemEnabled value wins and is synced to clients.

Using the pan

  • Works as a placed block on a heat source, or held in one hand while you act with the other.
  • Right-click with a registered ingredient to add it, with a served dish to merge it back in, with a bowl (tag #foodattributes:dish_containers) to serve.
  • Empty-handed right-click stirs (stir-mode food) and flips (sided food).
  • Sneak plus empty-handed right-click wipes the pan. Ingredients cannot be pulled back out once added.
  • Held pans cook from any heat source in the 3x3x3 volume around you, or while you are on fire. Cooking pauses whenever the pan is away from heat, including in your inventory or a chest.
  • Cold dishes work: an ingredient whose cook window starts at 0 is already 100% quality raw.
  • A shovel in the main hand lets you sneak plus scroll to pick which ingredient the next right-click stirs or flips.

Quality model

  • Every ingredient has a cook window [min, max] in ticks. Quality rises from 0% at raw to 100% at min, holds at 100% through the window, then falls back to 0% at burnt_multiplier * max (default 2x).
  • Labels come from the percentage: Raw or Undercooked below the window, Perfect inside, Overcooked or Burnt past it. Thresholds are configurable.
  • Three cook modes: stir (a cook timer plus a stir interval; going unstirred makes it cook too fast), sided (total timer plus a timer per side, flip to switch sides, quality is the time-weighted mix), and none (always 100%, for spices and synergy-only items).
  • Heat sources cook at different speeds. Defaults ship for stove (1.0x), campfires (0.9x), magma block (0.5x), lava (1.4x), lava cauldron (1.3x), and fire (1.2x).

Serving and the dish item

  • New foodattributes:dish item. Its nutrition, saturation, and food attributes are computed from what is actually in the pan, each ingredient scaled by its own quality and by synergies.
  • A plate has multiple servings (size based), is eaten in several bites, and returns its container when finished. Serving also drops a little XP scaled by quality and plate size.
  • The plate borrows the model and particle of whichever datapack-listed candidate item its contents most resemble, scored by matching the contents against every recipe that produces each candidate. Defaults cover vanilla and Farmer's Delight foods.
  • Served plates can be tipped back into another pan and keep their cooked progress, their quality at serve time (pre-cook), and how long they rested. That is what synergies read.

Synergies

  • Datapack rules that let ingredients affect each other while cooked together: spices, aromatics, multi-stage dishes.
  • A rule targets an ingredient and applies effects while conditions hold: conditions on the target itself (cooked percent, pre-cook percent, rest time, absolute cook time) and a list of conditions on other entries in the pan (same bounds plus a count, all must be met).
  • Effects can multiply or add hunger, saturation, required cook time, and cook speed; multiply all of the target's attributes; multiply or add one specific attribute; and inject brand-new food attributes.
  • A rule can override the cooked percent used for the math on the target or on its matched partners, so for example raw fish next to cooked rice can count as fully prepared sushi.
  • Conditions are checked against pre-synergy values so rules never recurse.

New datapack folders under data/<namespace>/foodattributes/

  • cooking_source/ heat sources (block id or tag, multiplier, requires_lit).
  • cooking_ingredient/ cook profiles (mode, cook/side/stir times as numbers or {min,max} windows, optional nutrition and saturation, size, and quality-band attribute injections).
  • synergy/ synergy rules.
  • dish_texture/ model candidates for the plate.
  • Ingredient fields accept a string shorthand: "minecraft:cod" is an item, "#c:fishes" is a tag, an array matches any.
  • Attribute injections in cooking files use the same friendly JSON shape as the rest of the mod.
  • Crafting-table and cutting-board results inherit the cook profile of their single dish-ingredient input via a new foodattributes:inherited_ingredient component, so a golden carrot can still be cooked like the carrot it came from.

Shipped cooking content

  • Default cook profiles for vanilla foods, Farmer's Delight foods, seasonings, and Diversity Delight.
  • Synergy packs: default, combos, spices, clashes, and apothic_extras. Named dishes include Sugar Glaze, Salt-Cured, Sushi, Lantern Stew (partial night vision), Floating Feast, Blood Pudding, Trail Mix, Fajita, Fugu, and clash rules like Over-Seasoned, Fugu Poisoning, and Nutty Fish Clash.

Config (cookingSystem block)

  • cookingSystemEnabled (true), cookingBurntMultiplier (2.0), cookingRawThreshold (0.25), cookingBurntThreshold (0.25), cookingUnstirredPenalty (1.0), cookingMaxIngredients (8).
  • proceduralDish block: proceduralDishMultiplier (2.0), proceduralDishDurationMultiplier (2.5), proceduralDishHungerMultiplier (2.5), proceduralDishSaturationMultiplier (2.0), proceduralDishServingsMultiplier (0.5, concentrates an 8-bite dish into 4 bites).
  • diminishingReturnsEnabled (true) and diminishingReturnsFactor (0.5): repeating the same ingredient in one dish gives less nutrition and saturation each time. Quality, servings, and attributes are untouched.

Effect system rework

The old flat list of attribute injections per food is replaced by a typed effect system. Each mechanic is its own effect type with its own JSON shape, tooltip, and behaviour.

  • Data component renamed from consumable_attribute_giver to consumable_effects. The classes ConsumableAttributeGiver, FoodInjections, and ConsumableAttributeGiverSetter are gone, replaced by ConsumableEffects, FoodEffects, and ConsumableEffectSetter.
  • The classic food_attribute / food_inject / food_injection operation still works and now builds a GiveAttributeEffect under the hood, so existing datapacks keep working.
  • New remove_food_attributes operation (aliases food_attributes_remove, nofoodattribute, and more, plus a bare shorthand token) strips the whole effects component that another datapack or this mod added.
  • AttributeSetter can assign effects through server-only default components. Those are now synced to clients via a new intrinsic-effects payload so remote clients still see the tooltip.

Melee "on hit" effects (temporary riders stored on the eater, active for a duration after eating):

  • on_hit_fire (Searing), on_hit_frost (Frostbite), on_hit_lightning (Stormtouched), on_hit_lifesteal (Lifesteal), on_hit_leech (Feasting, restores hunger), on_hit_absorption (Bulwark), on_hit_execute (Executioner, scales with missing health), on_hit_giant_slayer (Giant Slayer, scales with max health), on_hit_momentum (Charge, scales with speed), on_hit_smite (Smite, vs undead).
  • mob_effect_on_hit: apply any status effect on hit, with amplifier, duration, and chance. Replaces the old fixed on_hit_poison and on_hit_wither attributes.
  • mob_effect_cloud_on_hit: leave a lingering area-effect cloud at the target's feet. Generalises the old poison-only venom cloud; effect, amplifier, size, particle, and durations are all configurable.
  • on_hit_disarm (Disarming): interrupts what the target is using, knocks a shield down, cancels a bow draw or an eat, puts the item on cooldown. The classic shield break.
  • on_hit_damage (Rupture): a follow-up hit of a chosen damage type, magnitude amount + multiplier * damage dealt.
  • on_hit_modify_damage (Damage Dealt): scales outgoing damage as amount * multiplier + offset, with an optional damage-type tag filter.

New "on attacked" effects (react when the eater is hurt by a living attacker):

  • on_attacked_mob_effect (Retaliation): apply a status effect to the attacker.
  • on_attacked_fire (Scorching Hide): set the attacker on fire.
  • on_attacked_knockback (Repulsion): shove the attacker away.
  • on_attacked_modify_damage (Damage Taken): scale incoming damage, with an optional damage-type filter, for example a fire-resistance buff.

Other effect types

  • give_mob_effect: grant a plain status effect (Night Vision, Water Breathing, etc.) on consume, carried through craft inheritance where the vanilla minecraft:food component cannot.

Effect config (onHitEffects block)

  • projectileOnHitEnabled (true) and projectileOnHitMultiplier (0.5): on-hit effects also fire on projectile hits from the eater, at reduced strength.
  • onHitCooldownMultiplier (1.0) and onHitCooldownMinTicks (0): scale or floor every on-hit effect's proc cooldown server-wide.

New attributes

The old on_hit_* attributes are removed (their behaviour moved into the effect system above). Added instead, all syncable and usable as foodattributes:<id>:

  • explosion_resistance (0 to 1 fraction of explosion damage ignored)
  • projectile_resistance (0 to 1 fraction of projectile damage ignored)
  • reflect_damage (0 to 1 of damage taken bounced back as armor-bypassing magic, skips magic and thorns sources so two reflecting foods cannot ping-pong)
  • second_wind (health per second while below half health)
  • passive_regen (health per second regardless of health)
  • item_attraction_range (blocks within which loose items are pulled toward the player each tick)
  • sprint_exhaustion (0 to 1 of exhaustion ignored, but only while sprinting)
  • night_vision (gradual 0 to 1 night vision that feeds vanilla's light-texture scale directly, no tint or expiry flash, works without the status effect)

natural_absorption_max and natural_absorption_regen are now syncable too. Note: the README's Custom Attributes table still lists only the original six.

Hunger replacement (hunger block)

  • hungerSystemDisabled (false): hides the hunger bar, stops hunger drain, starvation, and vanilla's hunger-driven regen. Food heals you over time instead. Synced from the server.
    • Health banked = food nutrition times foodHealMultiplier (0.5).
    • Heal speed = food saturation times foodHealSpeedMultiplier (0.2), floored at foodHealMinSpeed (0.5) health per second.
    • Banked health caps at foodHealMaxStored (40), only drains while you are hurt, persists across relog and dimension change, clears on death.
  • alwaysEdible (false): lifts vanilla's "only when hungry" rule. Implied by hungerSystemDisabled. Synced.

Food poisoning (badFoodPenalty block)

  • badFoodPenaltyEnabled (false): eating badly-cooked food can poison and hurt you. Based on this mod's cook state, not an item list, so it covers undercooking and overcooking.
  • Every ingredient of the dish you just ate whose state is in badFoodStates (raw, undercooked, overcooked, burnt) rolls badFoodChance (0.5) on its own, so a fully burnt plate is near-certain and hits several times.
  • Each proc adds badFoodPoisonSeconds (7.0) of Poison at badFoodPoisonLevel (1) and badFoodDamage (2.0) health.
  • Damage is dealt as the new foodattributes:food_poisoning type, tagged to bypass armor, enchantments, and i-frames. Deaths read "died of food poisoning".
  • Applies to this mod's dishes and to Cuisine Delight plates, not to plain raw items.

Interrupt eating and drinking (interruptConsume block)

  • interruptConsumeOnHit (false): taking damage mid-bite cancels the eat or drink, item not consumed, progress lost. Works on foods, potions, milk, honey.
  • interruptConsumeMinDamage (0.0): damage after armor a hit must deal to interrupt.
  • interruptConsumePlayersOnly (true): set false to interrupt mobs too.

Buff HUD

  • New top-left HUD showing one row per active food buff: name, a draining bar, and a live M:SS countdown. Covers the otherwise-invisible attribute injections and combat riders.
  • Server pushes an update only when the set of buffs changes; the client extrapolates the countdown from each buff's absolute expiry tick, so a steady set of buffs costs no traffic.
  • HUD state is wiped on logout so stale buffs from the previous server do not bleed into the next world.

Client and rendering

  • Cooking HUD (center-left) with a red to green to red doneness gauge per ingredient, a stir countdown that flashes when overdue, and per-side flip markers.
  • Skillet renders its dish ingredients laid flat in the pan, both as a block and held in hand, delegating to FD's renderer for the vanilla single-item case.
  • Dish item renders as its borrowed model, falling back to its container.
  • Tooltips: live pan contents on a skillet stack, shift-held cook info on any registered ingredient, and per-effect tooltip lines for the new effect types.
  • Debug screen listing every loaded cooking_ingredient on a shared time axis, opened with a new unbound keybind ("Open Cooking Ingredients List").
  • Vanilla hunger bar is hidden client-side while the server has hunger replaced.
  • Two client mixins feed the night_vision attribute into vanilla's light texture.

Data rebalance and mod compat

  • meats, vegetables, fruits, fish, ingredients, and composite attribute sets were reworked. The big structural change: raw foods now carry the attribute and cooked variants inherit it through the cooking pipeline (scaled by smeltingMultiplier), instead of every cooked variant being listed by hand. JSON keys op and id are normalised to modifier_operation and modifier_id.
  • Some tuning: beef attack-damage bonus 0.5 to 1.0, chicken attack-speed 0.05 to 0.08, egg berserk bonus 0.25 to 0.15, and more.
  • New diversitydelight attribute set (about 390 lines).
  • New compat entries for My Nether's Delight (hoglin loin, fungus colonies), No Man's Land (horse, venison, pear, glowshroom), Biomes O' Plenty, and The Undergarden.
  • New item tags: citrus, common_fish, fish, fruits, tropical_fruits, glowshrooms, grains, nether_fungi, nuts, salty, sweet, dish_containers.
  • New damage type food_poisoning plus bypasses_armor, bypasses_cooldown, and bypasses_enchantments tag entries for it.

Config defaults changed

  • globalDurationMultiplier 1.0 to 2.5
  • smeltingMultiplier 1.0 to 1.25
  • smeltingDurationMultiplier 1.0 to 1.25

Thorns fix

Thorns and the new reflect-damage share one damage handler. Thorns still skips the retaliation hit when its value is 0 or below, so attackers no longer eat a 0-damage strike (with its i-frames, knockback, and sound) on every hit.

Item Stacking Fix

Some items were not stacking, even though they were the same item. This is fixed now.

This mod has no additional files