Skip to main content

Aura Zone

An Aura Zone defines an aura environment template: the per-resource aura inventory supplied to a chunk, which dimensions and biomes it matches, how it fluctuates over time, which cultivation rules it applies, and how it looks on the client.

File Location

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

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<Holder<resource>, AuraValue>{}Independent environment inventory definition for each resource; AuraValue contains the amount, maximum, regeneration speed and colour.
distributionEnumequalHow aura is shared inside one chunk when it is insufficient for several players: random, equal, realm_weighted.
cultivate_conditionEntity Conditionmxt:always_trueThe condition under which the current environment allows cultivation; checked together with the current realm stage condition.
aura_kindsIdentifier[][]Aura source/type markers.
dimensionsHolderOrTag<LevelStem>[][]Dimension matching.
biomesHolderOrTag<Biome>[][]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.
element_conflict_penaltyDouble0Element conflict penalty.
noiseObjectoffTwo-dimensional noise distribution driven by 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).

The fluctuation field is enable, cycle_type (day, moon, static), amplitude and offset_tick. The rules field is cultivate_suppress, tribulation_modify, spirit_plant_bonus, alchemy_env_bonus and natural_spawn_herb.

A natural environment uses each resource's amount as its initial inventory, and noise and fluctuation act on that resource. When AuraValue.max is omitted it defaults to the initial value. You can use a plain number, { "type": "mxt:fixed", "value": 100 }, { "type": "mxt:initial_multiplier", "multiplier": 2 } or { "type": "mxt:unlimited" }. Block aura additionally raises the effective capacity of the matching resource without occupying the environment maximum. Environment priority is biome < dimension < permanent area < formation override. priority is only compared inside the same level: between overlapping biome templates, or between overlapping dimension templates, the highest priority wins; when priority is equal the first template in ascending template ID order is taken, so the choice between overlapping definitions is stable and reproducible. Dimension bindings still take precedence over biome bindings, and a higher biome priority never crosses the dimension level. Several players share the per-resource inventory of the same chunk: random distributes randomly, equal splits evenly, and realm_weighted distributes by realm weight.

AuraValue

FieldTypeDescription
amountDoubleThe resource's initial environment inventory.
maxAura maximumThe base environment maximum of the chunk. When omitted it equals the chunk's initial environment aura; a plain number is shorthand for a fixed maximum; { "type": "mxt:fixed", "value": 200 }, { "type": "mxt:initial_multiplier", "multiplier": 2 } and { "type": "mxt:unlimited" } are also accepted. The dispatcher comes from the built-in registry mxt:aura_maximum_type, so datapacks can only choose an existing algorithm.
regen_per_tickDoubleInventory regeneration per tick.
colorRGBColorEnvironment colour of the resource.

The keys of aura are resource IDs from the mxt:resource registry. Each resource stores its amount, maximum, regeneration speed and environment colour independently; the resource's aura_type is the optional mxt:element marker. See Number Provider Types for the NumberProvider shape used by fields such as max.

fluctuation

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

Fluctuation only affects the queried environment concentration; the chunk inventory is updated every second through regen_per_tick.

rules

FieldTypeDefaultDescription
cultivate_suppressBooleanfalseWhether cultivation is forbidden or aborted.
tribulation_modifyDouble0Tribulation difficulty modifier; a positive value makes it harder.
spirit_plant_bonusDouble0Spirit herb growth multiplier modifier; the consumer is still under development.
alchemy_env_bonusBooleanfalseWhether this counts as a favourable alchemy environment; the consumer is still under development.
natural_spawn_herbBooleanfalseWhether natural spirit herb spawning is allowed; the consumer is still under development.

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

Work in Progress

spirit_plant_bonus, alchemy_env_bonus and natural_spawn_herb are currently only parsed: they are not yet connected to spirit herb growth, alchemy bonuses or natural spawning consumers, and count as fields still under development.

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.

The larger noise.scale is, the more gradual the spatial variation; built-in environments use roughly 640 to 960. For ordinary environments it is recommended to keep noise.amplitude at 5, which corresponds to a noise disturbance of roughly -5 to 5 before truncation.

When a chunk is loaded for the first time it is initialised as max(0, (base_aura + Perlin noise) / 10 - 5); noise.seed is fully controlled by the data pack, which makes the distribution reproducible for modpacks. Negative values are clamped to zero, and the aura contribution of blocks such as spirit stone is still added on top of that.

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 be sent to clients.
spreadVec3[0.5,0.5,0.5]Spread range on the three axes.
offset_x/y/zFloat0,0.5,0Spawn position offset.

particle is an optional particle effect at the top level of an aura zone, and the particle type is parsed with the vanilla ParticleTypes.CODEC. count, speed, spread, offset_* and force are passed through unchanged to the vanilla particle send API; particles are only not sent when the field is omitted, and count: 0 keeps the vanilla special directed-particle semantics. Aura particles are still refreshed every 5 ticks.

client_render

FieldTypeDefaultDescription
fog_colorRGBColor#FFFFFFFog colour; accepts #RRGGBB or an integer in 0..16777215.
render_distanceInteger64Distance affected by the fog, range 8..256.
fog_strengthFloat0.35Proportion by which the vanilla fog is overridden, range 0..1.

client_render is only responsible for client fog; particles are no longer placed inside it. fog_strength controls the proportion by which the fog colour and fog distance override the vanilla values, where 0 means no override and 1 means a full override. The fog strength is also scaled by the environment concentration, so low-concentration areas look fainter.

client_hud

stored_aura and sensed_concentration may both be omitted; each entry has the following fields:

FieldTypeDefaultDescription
maximumDoublerequiredThe aura value that corresponds to a full bar; it 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.

client_hud may be omitted entirely. stored_aura shows the final aura inventory in the chunk attachment, while sensed_concentration shows the environment template concentration at the current position; either one may also be omitted on its own. The resource bar context additionally provides mxt:environment_concentration and mxt:actual_concentration, corresponding to the environment value and the actual value from all sources.

Both HUD bars use the Origins-style 71x8 texture. maximum is the concentration that corresponds to a full bar and must be greater than zero; bar_index selects the texture row and icon, and 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 server synchronises the final concentration at the current position once per second, and the client only uses the synchronised snapshot to draw the HUD and the fog. The server also synchronises the actual and environment concentration at the current position according to aura.sync_interval in config/mxt-server.json, by default once every 5 ticks. In the network sync, actual contains every source — environment, chunk inventory, blocks and formations — while environment only contains 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 directly rewrite the displayed inventory, but block contributions, cultivation consumption and inventory regeneration still change the actual concentration.

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 } }
},
"aura_kinds": ["example:aura_kind/fire"],
"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,
"natural_spawn_herb": 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
}
}
}

Environment Resolution

The 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 previous one. The consumable aura of an ordinary chunk is still stored in the chunk attachment, so every system at the same position shares the same aura inventory.

  • dimensions and biomes may both be filled in; dimension matching takes precedence over biome matching. An empty list only means the template does not take part in static binding — it can still be referenced by a manual area or a formation.
  • aura_kinds are the aura type markers present at the current position, used for data-driven type checks; they are an all-contains relation with cultivate_action.aura_kinds and alchemy_recipe.aura_kinds. They do not represent a numeric source.
  • cultivate_condition is the entity condition under which this environment allows cultivation, defaulting to mxt:always_true. For example, mxt:aura_range can require the current final concentration to be within min..max; once the environment condition passes, each realm_stage.cultivate_condition is judged independently along its resource chain, and a chain that is not satisfied 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 allocated when the inventory is insufficient: random shuffles and satisfies requests in that order; equal (the default) splits it with max-min fairness and redistributes unused shares; realm_weighted distributes 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, while an unlimited environment uses concentration / (concentration + 1); when the allocated aura is less than the requested amount, the gain is additionally reduced in proportion to the actual quota.
  • block_aura does not occupy 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 recommended natural aura template sets base_aura to 0 and enables positive and negative noise; after the / 10 - 5 handling large areas have no natural aura, and block_aura accumulates 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 block aura cache and the chunk inventory update period are controlled by aura.block_aura_tick_interval in config/mxt-server.json, which defaults to an update every 10 ticks and allows a range of 1 to 1200 ticks.

Formation Interaction

Formation definitions can add an aura_zone:

{
"structure_template": "example:gathering_array",
"radius": 8,
"max_bonus": { "example:spirit_power": 50 },
"aura_zone": "example:spirit_gathering"
}

An active formation covers the environment within range around 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. After a formation fails, its maintenance fails or its structure is broken, the coverage disappears automatically.

Manual Areas and KubeJS

const aura = Mxt.api().getAura(player.level, player.blockPos)
console.log(aura.concentration())

const area = Mxt.api().addAuraBox(
player.level, 'example:blessing_land',
0, 64, 0, 64, 128, 64, 10
)
Mxt.api().removeAuraArea(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; 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:

{
"aura_kinds": ["example:aura_kind/fire"],
"minimum_aura": { "example:spirit_power": 50 }
}

Creature profiles can use:

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

On the server, /mxt aura query queries the final environment under your feet; when standing on spirit stone ore, /mxt aura vein queries the size and tier of the connected vein.