Skip to main content

Aura (aura)

resource only stores one number per entity: its bounds and how it is shown. An aura definition hangs an aura identity and cultivation behaviour on one value — which element it belongs to, which realm chain it enters through, how it regenerates on its own, how it converts back and forth with cultivation progress, and when it can be spent on purpose. The two are one to one: a value has at most one aura definition, and the server rejects a duplicate outright while it builds its cache.

File Location​

Aura files go in data/<namespace>/mxt/aura/ within your datapack.

Purpose: The aura definition of a single value: what it is (element marker, spirit power ray amount), its realm chain entry, regeneration, conversions and availability.

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​

FieldTypeDefaultDescription
resourceValue IDrequiredThe value this aura describes.
first_realmRealm IDnoneThe first realm of the realm chain of this value; it determines the target realm of a mortal's first breakthrough, and the mortal stage's threshold and cap are read from that stage's own breakthrough_exp / max_experience. Omitted, there is no realm chain and no cultivation.
start_cultivate_conditionsCultivateConditionsempty objectConditions checked when a mortal starts cultivating and before the first breakthrough, useful for conflict or identity restrictions. All definitions that carry a first_realm have to be satisfied before cultivation can start.
cultivation_to_resourceObjectmultiplier=1,max_per_tick=1Draws value recovery out of the cultivation progress counter.
resource_to_cultivationObjectmultiplier=1,max_per_tick=1Converts the value back into cultivation progress, only in cultivation mode.
regenNumberProvider0Natural recovery per tick; it applies while the cultivation behaviour has not taken the value over, and the formula can read this value's realm variables.
aura_typeElement IDnoneThe aura marker of this value. It is used for aura type checks (spirit roots, creature element preferences, environment aura rendering) and shown next to the value's name, for example by /mxt aura query.
burst_amountNumberProvider0When greater than 0 the value can be spent by the Fire Spirit Power keybind and is the amount of each spirit power ray. A datapack should configure only one default spirit power value with this greater than 0.
use_conditionEntityConditionmxt:alwaysControls whether an entity can spend the value on purpose and decides whether its resource bars are shown; it does not affect cultivation, environmental absorption, natural regeneration or breakthrough.
show_cultivation_infoBooleantrueWhether the character information panel shows the realm and cultivation progress of this value.

aura_type is also what a spirit burst depends on: an aura without this marker cannot be fired by a spirit burst, and both firing paths require it to exist.

The value's own bounds (min / max / default_value), icon, ray colour and resource bars all live on the resource side and are not written out a second time here. A value with no matching aura definition is a plain counter: it can still be spent, compared and read by formulas, but it cannot be stored in an item — the access interfaces exchange auras, and a plain counter has no aura identity.

resource takes a single value ID only: no #tag, and no array — one aura describes one value.

A CultivateConditions object contains conditions, an optional triggers and an optional action. Starting cultivation and the breakthrough entry point check conditions immediately (all of them); only after the breakthrough stage is reached does the current value register runtime subscriptions from triggers, and a matching event then makes it attempt a breakthrough. Subscriptions are never serialised directly: they are rebuilt from the cultivation state after a save is loaded or the registries are loaded.

The two fields of cultivation_to_resource and resource_to_cultivation are:

FieldTypeDefaultDescription
multiplierNumberProvider1Multiplier that converts the source value into the target value.
max_per_tickNumberProvider1Maximum source value consumed per tick; the limit applies to the source, not the target.

Example​

// data/example/saturn/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",
"regen": 0.25,
"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
}
Server-authoritative

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 resource.max are both evaluated on the server; the client takes no part in the settlement.

Realm chains

The chain belongs to this aura definition: every realm_stage points back at it with its aura field, and the chain's entry is given by first_realm, so reading realm state never has to look the value up again. first_realm must be a stage on that value's chain, and the server checks this while it builds the realm index. An aura without first_realm has no chain, and only regen's natural recovery is left.

An aura definition stores no text: its name and description are always derived from the registered id (aura.mxt.<definition namespace>.<path>, the description adding .description), so giving this aura words means translating those two keys. The generation rules and how to write the language files are in Datapack Overview.

burst_amount supports finite positive fractions: 0.25 is retained through payment, projectile synchronization, persistence and insertion on impact without flooring. Displayed amounts use two decimal places.