Aura (aura)
An aura definition is the aura identity and the cultivation behaviour of one stored value. The resource itself only stores a number and displays it; the aura points at that value through resource and adds everything the cultivation systems need: the realm chain it enters, how it regenerates, which element it carries, how it exchanges with cultivation progress, whether it can be used and whether it is shown in the information panel. This registry was called mxt:cultivation in earlier versions and is now mxt:aura; cultivate_action is a separate registry that still exists.
The relationship is one to one: one value has at most one aura definition, and the server rejects a second definition for the same value when its cache is built. A value without a definition is a plain counter — it still has bounds, bars, costs and formulas, but no cultivation. It also cannot be stored in an item: the aura exchange interfaces (AuraAccess/ItemAuraAccess) exchange auras, and a plain counter has no aura identity.
File Location
Aura files go in data/<namespace>/mxt/aura/ within your datapack.
The filename corresponds to its ID, which is independent of the value it describes. For example, data/example/mxt/aura/qi.json has the ID example:qi and points at example:qi in the resource registry.
Fields
| Field | Type | Default | Description |
|---|---|---|---|
resource | Holder<resource> | required | The stored value this aura describes. |
first_realm | Holder<realm_stage> | none | The first realm of the realm chain this aura belongs to; it is only used to determine the target realm of a mortal's first breakthrough. Without it the value has no chain and cannot be cultivated. |
start_exp | NumberProvider | 0 | The cultivation progress required for a mortal's first breakthrough, and at the same time the cultivation progress cap of the mortal stage; once reached it no longer increases and only a breakthrough can be attempted. |
start_cultivate_conditions | CultivateConditions | empty object | Conditions checked when a mortal starts cultivating and before the first breakthrough; useful for conflict or identity restrictions. Every value that has a first realm must be satisfied before cultivation can start. |
cultivation_to_resource | Object | multiplier=1,max_per_tick=1 | Draws resource recovery from the cultivation progress counter. |
resource_to_cultivation | Object | multiplier=1,max_per_tick=1 | Converts the resource back into cultivation progress, only while in cultivation mode. |
regen | NumberProvider | 0 | Natural regeneration per tick, applied while the value is not being regenerated by the cultivation action itself. Its formula can read the realm variables of this value. |
aura_type | Holder<element> | none | The element marker of this aura. It is used for aura type checks — spirit roots, creature element preferences, environment aura rendering — and shown next to the aura name, for example by /mxt aura query. The mxt:element registry holds elements only; an aura names one here. |
burst_amount | NumberProvider | 0 | When greater than 0 the aura can be consumed by the Fire Spirit Power keybind and is used as the amount of each spirit power ray. Each datapack should configure only one default spirit power aura with this greater than 0. |
use_condition | EntityCondition | mxt:always_true | Controls whether the entity can actively consume the aura and decides whether its resource bars are shown; it does not affect cultivation, environmental absorption, natural regeneration or breakthrough. |
show_cultivation_info | Boolean | true | Whether the character information panel shows the realm and cultivation progress of this aura. |
A CultivateConditions object contains conditions, optional triggers and an optional action. Starting cultivation and the breakthrough entry point check conditions immediately (all of them must be satisfied); only after the breakthrough stage is reached does the current aura register runtime subscriptions from triggers and attempt a breakthrough once a matching event fires. Subscriptions are never serialised directly: they are rebuilt from the cultivation state after a save is loaded or the data tables are loaded.
cultivation_to_resource and resource_to_cultivation use the following two fields:
| Field | Type | Default | Description |
|---|---|---|---|
multiplier | NumberProvider | 1 | Multiplier that converts the source value into the target value. |
max_per_tick | NumberProvider | 1 | Maximum source value consumed per tick; the limit applies to the source, not the target. |
Example
// data/example/mxt/resource/qi.json
{
"default_value": 0,
"max": "100 + realm_rank * 20 + absorbed_aura * 0.1",
"bars": [{"context": "mxt:self_hud", "anchor": "left", "order": 0, "renderer": {"type": "mxt:boss_bar", "bar_index": 1}}]
}
// data/example/mxt/aura/qi.json
{
"resource": "example:qi",
"first_realm": "example:foundation",
"start_exp": 100,
"regen": "0.25 + realm_rank * 0.05",
"aura_type": "example:common",
"burst_amount": 10,
"cultivation_to_resource": {"multiplier": 1, "max_per_tick": 2},
"resource_to_cultivation": {"multiplier": 0.5, "max_per_tick": 1},
"use_condition": {"type": "mxt:has_realm", "aura": "example:qi"},
"show_cultivation_info": true
}
Cultivation absorption by default only restores the value that belongs to the current realm, and reverse conversion is allowed only while in the cultivation state. regen and both conversion directions are evaluated on the server; the client takes no part in the settlement.
The chain belongs to the aura definition: every realm_stage names the aura it belongs to through its own aura field, and the aura names the stored value through resource. The server walks the chain from this definition's first_realm while it builds its index, and rejects a stage that names another aura, a cycle, or a stage that does not exist. Auras that have no first_realm have no chain at all.
Data-driven definitions do not fill in a translation_key — that field does not exist. A definition's display name is generated from its identifier as <category>.<namespace>.<path>, where the category is the registry's own path, so mxt:common in mxt:aura is aura.mxt.common. The one override is mxt:item_quality, which is translated under quality. A / in the path is kept as written rather than turned into ., so avoid subdirectories in definition filenames. Registry titles use mxt.registry.<registry path>, for example mxt.registry.aura.