Skip to main content

Aura Zone (aura_zone)

An aura_zone is an environment aura template: how much of each aura is here to begin with, its maximum, regeneration and colour, which dimensions and biomes it matches, how it fluctuates over time, which cultivation rules it applies, and the fog, particles and HUD bars the client sees. The template stores no quantities itself — consumable aura lives on the chunk attachment, so every system at the same position reads the same inventory.

File Location​

Aura zone files go in data/<namespace>/mxt/aura_zone/ within your data pack.

Purpose: Environment aura templates.

The filename corresponds to its ID. For example, data/example/mxt/aura_zone/spirit_land.json has the ID example:spirit_land.

Fields​

FieldTypeDefaultDescription
auraMap of aura ID to value{}Which auras this template holds, and each one's initial amount, maximum, regeneration and colour.
distributionEnumequalHow aura is shared when it is insufficient for several players in one chunk: random, equal, realm_weighted.
cultivate_conditionEntityConditionmxt:alwaysThe condition under which this environment allows cultivation; checked together with the current realm stage condition.
dimensionsarray of dimension IDs or #tags[]Dimension matching.
biomesarray of biome IDs or #tags[]Biome matching.
fluctuationObjectstatic / 0Day-night or moon phase fluctuation.
rulesObjectall offCultivation suppression, tribulation, spirit herb and alchemy environment rules.
element_fit_bonusDouble0Spirit root element fit bonus: added by this much when this root's own aura is present here.
element_conflict_penaltyDouble0Element conflict penalty: multiplied by the opposition concentration.
noiseObjectoffTwo-dimensional noise distribution with a seed.
particleParticleEffectnoneOptional server-controlled particles.
client_renderObjectwhite, 64, 0.35Client fog colour and fog strength.
client_hudObjectboth hiddenThe current inventory bar and the sensed concentration bar.
priorityInteger0Selection priority when several templates overlap within the same level (biome or dimension).

Opposition concentration is the sum of the concentrations of every other element in the zone that has an overcomes / adapted_to relation with the spirit root element, so an empty zone is never treated as an opposing one.

Each aura Entry​

Every value of aura has the same shape, and block_aura uses it too:

FieldTypeDefaultDescription
amountDouble0Initial inventory of this aura; must be non-negative. On the block side it is the base amount each block contributes.
maxMaximuminitial_multiplier, multiplier 1The aura's maximum; see Aura Maximum Types.
regen_per_tickDouble0How much is restored per tick.
colorRGBColor#FFFFFFColour, used for environment rendering only.

A natural environment takes each aura's amount as its initial inventory, and noise and fluctuation act on that. max is this aura's maximum; when it is omitted the maximum follows the initial inventory. The forms it takes, their fields and their algorithms are on Aura Maximum Types.

What you write here is the environment base maximum. Block aura raises the effective capacity of the matching aura on top of it without consuming this maximum, and a formation can add more. element_fit_bonus and element_conflict_penalty must be finite numbers, and both maximum values under client_hud must be finite and greater than 0; anything else is a load error.

fluctuation​

FieldTypeDefaultDescription
enableBooleanfalseWhether fluctuation is enabled.
cycle_typeEnumstaticday, moon or static.
amplitudeDouble0Fluctuation amplitude.
offset_tickLong0Cycle sampling offset.

Fluctuation only affects the queried environment concentration and never rewrites the chunk inventory; the inventory is restored by regen_per_tick × elapsed ticks, on the period set by Server Config → Aura → Block Aura Period (every 10 ticks by default).

rules​

FieldTypeDefaultDescription
cultivate_suppressBooleanfalseWhether cultivation is forbidden or aborted.
tribulation_modifyDouble0Tribulation difficulty modifier; a positive value makes it harder.
spirit_plant_bonusDouble0Spirit herb growth bonus. Must be finite and at least -1.
alchemy_env_bonusBooleanfalseStands in for a pill recipe's environment gate minimum_aura. It does not pay a furnace's fuel.

rules.cultivate_suppress aborts cultivation that is already running. tribulation_modify injects the formula variable aura_tribulation_modifier.

spirit_plant_bonus multiplies the growth a spirit herb settles once every 20 ticks: growth.growth_rate from spirit_herb is evaluated first, then multiplied once by max(0, 1 + spirit_plant_bonus), so do not multiply it again inside the expression. The value must be finite and at least -1; anything outside that is a load error.

With alchemy_env_bonus on, a pill recipe whose position falls inside the zone counts as satisfying minimum_aura outright — it is a switch with no scalable quantity, so it can only stand in for the requirement rather than enlarge the pool, and it supplies no heat to the furnace; with it off, every entry is still compared against the recipe's own minimum.

noise​

FieldTypeDefaultDescription
enableBooleanfalseWhether two-dimensional noise is enabled.
seedLong0A reproducible seed controlled by the data pack.
scaleDouble640Sampling scale; the larger it is, the smoother the result.
amplitudeDouble0Noise amplitude.

When a chunk is loaded for the first time it is initialised as max(0, (that aura's amount + Perlin noise) / 10 - 5), with negative values clamped to zero; noise.seed is fully controlled by the data pack, which lets modpacks reproduce a distribution. The larger noise.scale, the smoother the spatial variation; built-in environments use roughly 640 to 960. For an ordinary environment keep noise.amplitude at 5, which corresponds to a noise disturbance of roughly -5 to 5 before truncation.

client_render​

FieldTypeDefaultDescription
fog_colorRGBColor#FFFFFFFog colour; written as #RRGGBB (an integer or an [r,g,b] float array is accepted too); always treated as opaque.
render_distanceInteger64Distance the fog affects, range 8..256.
fog_strengthFloat0.35Proportion by which the vanilla fog is overridden, range 0..1.

client_render covers client fog only; particles are not part of it. fog_strength controls the proportion by which the fog colour and the fog distance override the vanilla values, where 0 is no override and 1 is a full override. Fog strength is also scaled by the environment concentration, so low-concentration areas look fainter.

particle​

FieldTypeDefaultDescription
particleParticleOptionsrequiredA vanilla particle type and its parameters.
countInteger16Number sent per emission; 0 keeps the vanilla directed-particle semantics.
speedFloat0Vanilla particle speed parameter.
forceBooleanfalseWhether the particle is forced to clients.
spreadVec3[0.5,0.5,0.5]Spread range on the three axes.
offset_x / offset_y / offset_zFloat0,0.5,0Spawn position offset.

particle is the optional particle effect at the top level of an aura zone, parsed as a vanilla particle type; the particle type is written as an object:

"particle": { "type": "minecraft:glow" }

For light beam particles, use "type": "mxt:light_beam" and "spread": true inside the inner particle object to broaden streaks and taper their upper and lower ends. radius controls the distribution disk radius, density sets flow channels per unit of cross-sectional area, and width sets individual streak size. The inner boolean controls shape; the outer spread array still controls emission scatter. bottom_effect and top_effect independently enable horizontal inward or outward flow at each terminal. Both default to false and follow flow_direction.

filled defaults to true; setting it to false places streaks only on the whole column's surface. glow defaults to false and adds a static glow of the same colour inside the vertical column, without extending onto the terminal planes.

Particles are only not sent when the field is omitted. count, speed, spread, offset_* and force are passed through unchanged to the vanilla particle send API; count: 0 keeps the vanilla special directed-particle semantics. Aura particles refresh on the sync period, every 5 ticks by default.

aura_zone.client_hud​

stored_aura and sensed_concentration may both be omitted, and either one may be written on its own; each entry has these fields:

FieldTypeDefaultDescription
maximumDoublerequiredThe aura value that fills the bar; must be greater than 0.
bar_indexInteger0Origins-style texture row.
invertedBooleanfalseWhether the bar is displayed inverted.
anchorleft / rightleftHUD left or right column.
orderInteger0Ordering within the same side.

stored_aura shows the actual inventory in the chunk attachment, and sensed_concentration shows the environment template concentration at the current position. Both use the Origins-style 71x8 texture: maximum is the concentration that fills the bar and must be greater than zero; bar_index selects the texture row and the icon; inverted is optional and defaults to false. anchor is left or right, and order controls the bottom-to-top order of aura bars on the same side; aura bars are automatically placed above the resource bars on the same side. The resource bar context additionally provides mxt:environment_concentration and mxt:actual_concentration, for the environment value and the actual value from all sources.

How the Environment Is Resolved​

Environment resolution priority is fixed: biome binding < dimension binding < permanent manual area < active formation. Each later level replaces the aura types, element values, rules and display template of the one before it wholesale. The consumable aura of an ordinary chunk is still stored in the chunk attachment, so every system at the same position shares one aura inventory.

  • dimensions and biomes may both be filled in; dimension matching takes precedence over biome matching. An empty list only means the template takes no part in static binding — a manual area or a formation can still reference it.
  • priority is only compared inside the same level. When several biome templates match at once, or several dimension templates match at once, the largest priority wins; ties take the first template in ascending template ID order, so the choice between overlapping definitions is stable and reproducible after every load. Dimension bindings always outrank biome bindings, and a higher biome priority never crosses into the dimension level.
  • cultivate_condition is the entity condition under which this environment allows cultivation, defaulting to mxt:always. mxt:aura_range, for example, can require the current final concentration to lie within min..max; once the environment condition passes, each realm_stage.cultivate_condition is judged independently along its resource chain, and a chain that fails only skips its own regeneration and conversion.
  • Players whose cultivation is due inside the same chunk share the aura inventory in the chunk attachment. distribution controls how it is handed out when the inventory is short: random shuffles and then satisfies requests in that order; equal (the default) splits it with max-min fairness and redistributes unused shares; realm_weighted weights by the current realm's aura_share_weight and redistributes unused shares. When overlapping dynamic aura zones exist inside a shared chunk, the policy of the environment of the first requester after a stable sort is used.
  • The cultivation progress and aura_gains obtained are multiplied by the concentration multiplier at the current position. A finite maximum uses concentration / maximum, an unlimited environment uses concentration / (concentration + 1); when the allocated aura falls short of the requested amount, the gain is reduced further in proportion to the actual quota.
  • There is no environment kind field here: which auras a place has is exactly the key set of its aura map. Asking for a place where cultivation or alchemy is possible is written as a condition (the start_condition / cultivate_condition / tick_condition of a cultivation) or as minimum_aura (alchemy), and both speak in aura IDs or #tags.
  • block_aura does not consume the environment base maximum: it adds an equal amount of storable aura capacity to the current chunk at the same time. With an environment maximum of 100 and a total block contribution of 30, the effective maximum of that chunk is 130. A position query uses a bounded sub-chunk algorithm: within 3 sub-chunks of the current one, blocks are computed at their real positions, further out they are approximated by the sub-chunk centre and attenuated by 1 / max(1, distance squared); a source sub-chunk is roughly split by the number of players currently visiting it, and the chunk inventory is still shared between players.
  • Stock regeneration is controlled by Server Config → Aura → Block Aura Period, with a default target interval of 10 ticks and a range of 1 to 1200 ticks. Chunks run at staggered phases and recover for the actual elapsed ticks since stock initialization; a partial first cycle pays only its elapsed time, and unloaded time earns nothing. Visitor counts update incrementally every tick; stationary players do not rebuild their coverage. Each section's block cache has an independent random rescan target interval of 600..1199 ticks. Rescans run in batches each tick, may be delayed by queued work, and are not gated by that setting.
  • A recommended natural aura template sets every aura's amount to 0 and enables positive and negative noise. After the / 10 - 5 handling, large areas have no natural aura; block contributions accumulate on top of that by the number of blocks in the chunk, so a spirit stone vein can be configured far above the natural value.
  • The keys of aura are aura IDs from the mxt:aura registry. Each aura stores its amount, maximum, regeneration speed and environment colour independently; its element marker is the aura_type of that same mxt:aura definition (an optional mxt:element).

Example​

{
"aura": {
"example:spirit_power": {
"amount": 120.0,
"max": { "type": "mxt:initial_multiplier", "multiplier": 2.0 },
"regen_per_tick": 0.05,
"color": "#88ffdd"
}
},
"distribution": "realm_weighted",
"cultivate_condition": {
"type": "mxt:aura_range",
"aura": { "example:spirit_power": { "min": 20, "max": 200 } }
},
"dimensions": ["minecraft:the_nether"],
"biomes": ["minecraft:badlands"],
"fluctuation": {
"enable": true,
"cycle_type": "day",
"amplitude": 0.3,
"offset_tick": 0
},
"rules": {
"cultivate_suppress": false,
"tribulation_modify": 0.15,
"spirit_plant_bonus": 0.2,
"alchemy_env_bonus": true
},
"element_fit_bonus": 0.25,
"element_conflict_penalty": 0.2,
"noise": {
"enable": true,
"seed": 739430,
"scale": 640.0,
"amplitude": 5.0
},
"particle": {
"particle": { "type": "minecraft:glow" },
"count": 4,
"speed": 0.01,
"force": false,
"spread": [0.5, 0.5, 0.5],
"offset_x": 0.0,
"offset_y": 0.5,
"offset_z": 0.0
},
"client_render": {
"fog_color": "#88ffdd",
"render_distance": 64,
"fog_strength": 0.35
},
"client_hud": {
"stored_aura": {
"maximum": 200.0,
"bar_index": 1,
"anchor": "left",
"order": 4
},
"sensed_concentration": {
"maximum": 200.0,
"bar_index": 2,
"anchor": "left",
"order": 5
}
}
}

What the Client Sees​

The server syncs the actual and environment concentration at the current position to players on Server Config → Aura → Sync Period, once every 5 ticks by default. In the sync, actual contains every source — environment, chunk inventory, blocks and formations — while environment contains only the environment template; stored_aura still shows the actual inventory, and sensed_concentration and the fog only show the value computed from the environment template. Environment fluctuation does not rewrite the displayed inventory directly, but block contributions, cultivation consumption and inventory regeneration still change the actual concentration. The client only draws; it decides neither the deductions nor the gains.

Formation Interaction​

A formation definition can carry an mxt:aura function module to override the zone its ground resolves to:

{
"structure_template": "example:gathering_array",
"radius": 8,
"actions": [
{
"type": "mxt:aura",
"max_bonus": { "example:spirit_power": 50 },
"aura_zone": "example:spirit_gathering"
}
]
}

An active formation covers the environment within the range covered by its core and radius. max_bonus is optional, defaults to 0, and appends a value to the effective maximum of the chunks in range; overlapping formations take the highest bonus. Once the formation lapses, its maintenance fails or its structure is broken, the coverage disappears on its own.

Manual Areas and KubeJS​

const aura = MxtAura.get(player.level, player.blockPos)
console.log(aura.concentration())

const area = MxtAura.addBox(
player.level, 'example:blessing_land',
0, 64, 0, 64, 128, 64, 10
)
MxtAura.remove(player.level, area)

Manual areas are saved to the world. The larger priority is, the higher the precedence when manual areas of the same kind overlap. The KubeJS event name is MxtEvents.auraZone, and the event's kind is enter, leave, tick or override; override can be cancelled to refuse a formation environment override.

Other System Fields​

Alchemy recipes can use:

{
"minimum_aura": { "example:spirit_power": 50 }
}

Creature profiles can use:

{
"preferred_aura_elements": ["example:fire"],
"minimum_aura": { "example:spirit_power": 30 }
}

On the server, these commands query the aura under your feet:

CommandWhat it does
/mxt aura queryLists every aura at this position with its amount.
/mxt aura query <aura id>Shows only the named aura.
/mxt aura query element <element id>Shows only auras whose element marker is that element; several auras can carry the same element marker, so this asks about the element.
/mxt aura veinStanding on spirit stone ore, queries the block count and tier of the connected vein.
/mxt aura cache clear [radius]Clears the block aura query cache; radius 0..32, defaulting to 3 when omitted; needs gamemaster permission.