Health, hunger & survival
Regeneration, hunger and diet, respawn location and items kept on death.
Fields every power accepts (name, hidden, power_condition, …) are on Power basics. See also: Power basics.
Types on this page: no_natural_regen · exhaustion_filter · modify_food_nutrition · edible_item · slime_moisture · slime_level_hp · slime_death_save · modify_player_spawn · keep_inventory.
neoorigins:no_natural_regen
Cancels vanilla food-based natural regeneration only. Both regen branches (saturation-based fast regen and food-level-≥18 slow regen) are skipped. Other heal sources (Regeneration potion, beacon, totem, neoorigins:heal) still work normally. Pair with an alternate healing mechanic for “metabolism-less” origins like Automaton variants.
No fields. Presence of the power is the entire configuration.
Example:
{
"type": "neoorigins:no_natural_regen",
"name": "No Pulse",
"description": "Hunger doesn't restore HP. Only direct healing effects do."
}
neoorigins:exhaustion_filter
Cancels the hunger exhaustion vanilla charges for specific actions, leaving every other source alone. sprint is sprinting on the ground, mining is breaking a block, jump is any jump, and swim is swimming, walking underwater or wading. Imported origins-classes:no_sprint_exhaustion / no_mining_exhaustion translate onto this type. In 2.2.30 and earlier the power loaded but nothing read it, so it did nothing.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
sources | list of string | no | ["sprint"] | Exhaustion sources to cancel: sprint, mining, jump, swim |
Example:
{
"type": "neoorigins:exhaustion_filter",
"sources": ["sprint"],
"name": "Tireless",
"description": "Sprinting no longer drains hunger."
}
neoorigins:modify_food_nutrition
Overrides the nutrition (hunger) value of food the player eats. Matching food gives exactly the configured number of hunger points regardless of its original value. Saturation is scaled proportionally. Use food_item or food_tag to filter which foods are affected; if neither is set, ALL food is affected.
The override is applied at the moment of eating rather than written onto the item, so the item’s own food data is never changed. That is invisible in play but it matters to anything that reads the stack: with AppleSkin installed, NeoOrigins feeds the adjusted figures to AppleSkin’s tooltip and held-food preview so they agree with what eating will actually give. See COMPATIBILITY.md. Other mods that read DataComponents.FOOD off the stack directly will still see the vanilla value.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
nutrition | int | no | 1 | Fixed hunger points matching food gives |
food_item | Identifier | no | — | Only affect this specific item (e.g. minecraft:sweet_berries) |
food_tag | string | no | — | Only affect items in this tag (e.g. #minecraft:meat). Supports # prefix. |
Example: all food gives 1 hunger point
{
"type": "neoorigins:modify_food_nutrition",
"nutrition": 1,
"name": "Picky Eater",
"description": "Gains almost no nutrition from food."
}
Example: meat gives 8 hunger points
{
"type": "neoorigins:modify_food_nutrition",
"nutrition": 8,
"food_tag": "#minecraft:meat",
"name": "Carnivore",
"description": "Thrives on meat."
}
neoorigins:edible_item
Makes arbitrary non-food items edible. A matching item plays the normal 32-tick eating animation; when it finishes, the configured nutrition/saturation is applied, one is removed from the stack, and an action_on_event.ITEM_USE_FINISH dispatch fires with the stack as context. Items that are already food keep their vanilla values: the configured nutrition, saturation and consume_sound are ignored for anything that has a food component (raw fish, rotten flesh).
1.21.1 vs 26.x: the hidden
model_colortints the Caveborn meals drive are drawn on 1.21.1 only; on 26.x the effects and bonus powers still apply but the model is not recolored.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
items | list of Identifier | no | [] | Exact item IDs that qualify |
tags | list of Identifier | no | [] | Item tag IDs that qualify |
tiers | list of Tier | no | [] | Value bands inside the set; see below |
nutrition | int | no | 4 | Food points restored (1 shank = 2) |
saturation | float | no | 0.3 | Saturation restored |
always_edible | bool | no | true | If true, can be eaten at full hunger |
consume_sound | Identifier | no | (none) | Optional sound ID played on consume |
At least one of items, tags or tiers should be non-empty, otherwise nothing will ever match. Matching is inclusive: an item qualifies if it appears in any of the three.
Eligibility follows the game’s own rule for food (always_edible, or an unfilled hunger bar, or creative and spectator mode), so a matching item eats in creative exactly as bread does. Creative also keeps the stack, the same way vanilla food does.
Tiers
A tier gives one part of the set its own values without splitting the power in two. Each entry is an object:
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
items | list of Identifier | no | [] | Exact item IDs in this band |
tags | list of Identifier | no | [] | Item tag IDs in this band |
nutrition | int | yes | (none) | Food points for this band |
saturation | float | no | (inherits) | Saturation for this band |
The first tier whose items or tags match wins; an item matching none of them falls back to the power’s own nutrition and saturation. Order matters, so put the narrow bands first. Tiers match on top of the top-level lists rather than inside them, so a tier can introduce items the power never otherwise mentions.
Leave saturation off unless you mean to change it. Saturation is restored as nutrition × saturation × 2, so a tier that doubles both ends up granting four times the saturation, which is almost never what was intended.
{
"type": "neoorigins:edible_item",
"tags": ["neoorigins:caveborn_eat_iron"],
"nutrition": 4,
"saturation": 0.8,
"tiers": [
{ "tags": ["c:nuggets/iron"], "nutrition": 1, "saturation": 0.0 },
{ "tags": ["c:storage_blocks/iron", "c:storage_blocks/raw_iron"], "nutrition": 8 }
]
}
Example: a sea origin grazes on kelp and seagrass
{
"type": "neoorigins:edible_item",
"items": ["minecraft:kelp", "minecraft:seagrass"],
"nutrition": 2,
"saturation": 0.3,
"always_edible": true,
"name": "Grazer",
"description": "Can eat kelp and seagrass at any time."
}
Caveborn diet tags
The Caveborn’s seven eating powers each read one shipped item tag, so a datapack can extend any of them without overriding the power. A tag file lives under the namespace of the tag it extends, not your own, so declare data/neoorigins/tags/item/<name>.json inside your pack with "replace": false and append your own items.
| Tag | Backing power | Nugget | Base | Block |
|---|---|---|---|---|
neoorigins:caveborn_eat_stone | Stone Eater | (none) | 2 / 0.4 | (none) |
neoorigins:caveborn_eat_copper | Copper Palate | (none) | 3 / 0.6 | 6 / 0.6 |
neoorigins:caveborn_eat_iron | Iron Palate | 1 / 0.0 | 4 / 0.8 | 8 / 0.8 |
neoorigins:caveborn_eat_gold | Gilded Palate | 1 / 0.0 | 5 / 1.0 | 10 / 1.0 |
neoorigins:caveborn_eat_diamond | Diamond Palate | (none) | 6 / 1.2 | 12 / 1.2 |
neoorigins:caveborn_eat_emerald | Emerald Palate | (none) | 7 / 1.4 | 14 / 1.4 |
neoorigins:caveborn_eat_netherite | Netherite Palate | (none) | 8 / 1.6 | 16 / 1.6 |
The three columns are tiers on each power. The base column is what an ingot, gem, raw material or ore is worth; the block column covers both the refined and the raw storage block; the nugget column exists only where the material has a nugget. Adding an item to a tag makes it edible at that tag’s base values unless it also falls inside one of the tiers, and the tiers read the c: tags rather than the neoorigins: one, so a modded iron block dropped into caveborn_eat_iron is worth eight only if it also registers in c:storage_blocks/iron or c:storage_blocks/raw_iron, and four if it does not. To grant an amount none of the bands cover, write your own edible_item power instead.
Every one of these powers is always_edible: false, so none of them go down on a full hunger bar.
The seven tags are built out of NeoForge’s c: common tags rather than lists of vanilla item ids, so a modded metal or stone that registers itself in the usual places is eaten without the pack doing anything. The six metal and gem tags take the material’s ingots/, nuggets/, gems/, raw_materials/, ores/ and storage_blocks/ entries, which is what pulls in deepslate ore variants, nether gold ore and ancient debris. Three literal ids are left in the set. netherite_scrap is one, because NeoForge publishes no common tag for the item itself: its c:ores/netherite_scrap covers ancient debris, the ore block. The other two are on caveborn_eat_stone, which is #c:stones plus #c:cobblestones plus basalt and blackstone, and carries no ore at all.
Each material also has a bonus power that fires on finishing the meal, and those are tiered the same way: a nugget grants fifteen seconds, the base form grants the listed duration, and a block grants three times it. Copper is Water Breathing I for sixty seconds, iron Haste I for sixty, gold Speed I for two minutes, diamond Luck II for five, emerald Fire Resistance for five, and netherite Strength I with Resistance I for five. A block is worth twice the food and three times the duration rather than the nine you would get from crafting it apart, since hunger caps at twenty and the extra food would be thrown away. Each meal additionally drives a hidden model_color tint for as long as its effect runs, though that tint is not drawn on 26.1, 26.2 or 26.3 (see neoorigins:model_color); those six tints are individually switchable from power_overrides.toml.
Worth knowing for the ore and stone entries: both are placeable blocks, so aiming at a surface places one as normal. Eating one means aiming where it cannot be placed — the same rule the stone diet has always followed.
neoorigins:slime_moisture
Custom resource bar (0.0–1.0 float) that drains passively over time, faster in dry biomes (desert, badlands, savanna) and much faster when on fire. Replenished by standing in water, rain or a water cauldron, and by drinking a water bottle. Triggers threshold effects: Regeneration above 75%, armor penalty below 10%, and damage-over-time at 0%.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
drain_per_tick | float | no | 0.0004 | Base moisture drain per tick |
dry_biome_drain_multiplier | float | no | 3.0 | Drain multiplier in desert/badlands/savanna biomes |
fire_drain_multiplier | float | no | 10.0 | Drain multiplier when player is on fire |
water_refill_per_tick | float | no | 0.005 | Moisture gained per tick in water, rain or a water cauldron |
water_bottle_refill | float | no | 0.5 | Moisture restored by drinking one water bottle; 0 leaves the bar unchanged |
regen_threshold | float | no | 0.75 | Moisture level above which Regeneration I is applied |
armor_penalty_threshold | float | no | 0.10 | Below this, -4 armor is applied |
dot_threshold | float | no | 0.0 | At or below this, damage-over-time triggers |
dot_damage | float | no | 1.0 | Damage per interval when at or below dot_threshold |
dot_interval | int | no | 40 | Ticks between damage ticks |
A cauldron is checked as a block rather than as a fluid, so the player has to be standing in it. A water bottle refills on the swallow, not on the click, and where a player holds more than one moisture power the most generous water_bottle_refill among them is the one that applies. Both affordances match what breath_out_of_fluid already gives aquatic origins.
Example:
{
"type": "neoorigins:slime_moisture",
"name": "Moisture",
"description": "Must stay hydrated. Dries out faster in hot biomes."
}
neoorigins:slime_level_hp
Grants bonus max HP based on the player’s experience level. The bonus tracks your current level: it is recomputed from the level you have right now, so it falls when you lose levels and comes back when you earn them again.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
levels_per_hp | int | no | 10 | Experience levels needed per +1 max HP |
max_bonus_hp | int | no | 20 | Maximum HP bonus cap |
Example: +1 HP every 10 levels, capped at +20
{
"type": "neoorigins:slime_level_hp",
"levels_per_hp": 10,
"max_bonus_hp": 20,
"name": "Growth",
"description": "Grows tougher with experience."
}
neoorigins:slime_death_save
Death prevention mechanic for slime-themed origins. When the player would die with moisture above the threshold, they “split” instead: teleported to a random location, max HP reduced to 2 hearts, which gradually recovers over time.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
moisture_threshold | float | no | 0.75 | Moisture level required to trigger the save |
teleport_distance | int | no | 50 | Horizontal blocks to teleport |
teleport_y_range | int | no | 10 | Random Y offset range (±) |
split_max_hp | float | no | 4.0 | Max HP while “split” (2 hearts) |
recovery_ticks | int | no | 2400 | Ticks for HP to recover to normal (default: 120 seconds) |
Example:
{
"type": "neoorigins:slime_death_save",
"name": "Slime Split",
"description": "Instead of dying, splits and teleports away — but at 2 hearts."
}
Pair it with a companion
slime_moisturepower. Without one, moisture reads as 1.0 and never changes, so the save fires on every death. The save costs no moisture and has no cooldown.
neoorigins:modify_player_spawn
Overrides the player’s respawn location to a power-configured target. Unlike the origin’s spawn_location (first-join and bed-less respawn only), this power fires on every respawn except the one after leaving the End. The teleport lands a tick or more after the respawn. Optionally also overrides the bed/respawn-anchor spawn point.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
location | LocationCondition | yes | — | Target location descriptor: dimension / biome / biome_tag / structure / structure_tag. See attribute_modifier’s location_condition for the shape. |
override_bed | bool | no | false | When true, also overrides bed/respawn-anchor spawn. When false, respects a valid bed/anchor and only fires if none is set. |
Example: always respawn in an End city
{
"type": "neoorigins:modify_player_spawn",
"location": {
"dimension": "minecraft:the_end",
"structure": "minecraft:end_city"
},
"override_bed": true,
"name": "Void-Bound",
"description": "Always respawns in the nearest End city."
}
neoorigins:keep_inventory
On death, selectively retain inventory items matching the power’s filters. Matching items are removed from drops and restored on respawn into the exact slot they were taken from, trinket slots included: armour comes back worn, the hotbar keeps its layout, and a full inventory can no longer push the leftovers onto the ground.
1.21.1 vs 26.x: items worn in Accessories (Wisp Forest) slots are kept on 1.21.1 only; 26.x reads Curios slots alone, since Accessories has no 26.x build.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
slots | list of string | no | ["*"] | Slot categories to keep from: hotbar, main, armor, offhand, all (alias *). main also includes hotbar. Also accepts trinket slots: curio, accessory, or trinket cover every Curios slot, or name a specific slot id like ring or necklace. |
items | list of Identifier | no | [] | Specific items to keep |
tags | list of Identifier | no | [] | Item tags to keep |
If both items and tags are empty, every item in the configured slots is kept.
Curios: trinket slots are covered when the Curios mod is installed; without it these slot tokens simply match nothing. The wildcard */all includes trinkets too.
A kept trinket is re-equipped into its original slot on respawn. Curios rebuilds its slot counts on its own schedule after a respawn, so if the slot isn’t writable yet the trinket is held and retried for three seconds rather than given up on. Only once that window is spent does it fall back to the regular inventory, and to the ground only if the inventory is full as well. Logging out mid-retry settles it the same way instead of losing it.
Example: always keep tools
{
"type": "neoorigins:keep_inventory",
"slots": ["main", "hotbar", "offhand"],
"tags": ["minecraft:pickaxes", "minecraft:swords", "minecraft:axes", "minecraft:shovels"],
"name": "Tool Preservation",
"description": "Tools are never dropped on death."
}