Skip to main content

Cultivation Profile (cultivation)

A cultivation profile is the cultivation behaviour of one stored value. The resource itself only stores a number and displays it; the profile points at that value and adds everything the cultivation systems need: the realm chain it enters, how it regenerates, which aura it carries, how it exchanges with cultivation progress, whether it can be used and whether it is shown in the information panel.

The relationship is one to one: one value has at most one profile, and the server rejects a second profile for the same value when its cache is built. A value without a profile is a plain counter — it still has bounds, bars, costs and formulas, but no cultivation.

File Location

Cultivation profile files go in data/<namespace>/mxt/cultivation/ within your datapack.

The filename corresponds to its ID, which is independent of the value it describes. For example, data/example/mxt/cultivation/qi.json has the ID example:qi and points at example:qi in the resource registry.

Fields

FieldTypeDefaultDescription
resourceHolder<resource>requiredThe stored value this profile describes.
first_realmHolder<realm_stage>noneThe first realm of the realm chain this value 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_expNumberProvider0The 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_conditionsCultivateConditionsempty objectConditions 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_resourceObjectmultiplier=1,max_per_tick=1Draws resource recovery from the cultivation progress counter.
resource_to_cultivationObjectmultiplier=1,max_per_tick=1Converts the resource back into cultivation progress, only while in cultivation mode.
regenNumberProvider0Natural 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_typeHolder<element>noneThe element 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 name, for example by /mxt aura query.
burst_amountNumberProvider0When greater than 0 the value 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 value with this greater than 0.
use_conditionEntityConditionmxt:always_trueControls whether the entity can actively consume the value 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.

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 value 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:

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/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/cultivation/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", "resource": "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 both conversion directions are evaluated on the server; the client takes no part in the settlement.

Realm chains

The chain belongs to the profile: every realm_stage names the profile it belongs to through its own cultivation field, and the profile names the stored value through resource. The server walks the chain from this profile's first_realm while it builds its index, and rejects a stage that names another profile, a cycle, or a stage that does not exist.