1. Wiki
  2. /Particles
  3. /Emitter components

Emitter components

Every Minecraft Bedrock particle emitter component in one place: setup, spawn rate, lifetime and shape, with fields and short examples.

The emitter is the invisible spawner behind every particle effect. Its components decide when it runs, how many particles it makes and where they start. They all go in the components block of a particle file, next to the particle components.

New to particles? Start with Your first particle, which builds a full ruby sparkle step by step.

What every emitter needs

An emitter needs one lifetime component and one rate component, or it will not spawn anything. A shape is optional: without one, particles start at the centre of the emitter. Use only one component from each of these groups.

Most number fields on this page accept either a plain number or a Molang string like "math.random(1, 3)". The tables mark when a field is worked out: once when the emitter starts, per loop, or per particle each time one spawns.

Setup

These run before anything spawns. You can use them together with any other components.

ComponentWhat it doesKey fields
minecraft:emitter_initializationRuns Molang on the emitter, mostly to set your own variables that other fields read latercreation_expression: runs once when the emitter starts. per_update_expression: runs on every update
minecraft:emitter_local_spaceFor effects attached to a mob: choose whether particles move along with the mob or stay where they were bornposition, rotation, velocity (all true or false, default false)

Setting variables

emitter_initialization is the place to roll a random number once and share it with every particle:

RP/particles/ruby_sparkle.json (inside components)
"minecraft:emitter_initialization": {
  "creation_expression": "variable.ruby_hue = math.random(0.2, 0.4);"
}

Every particle from this emitter can now read variable.ruby_hue, for example in its tint.

Local space

By default, particles start at the emitter and then live on their own in the world. If a mob walks away, its old particles stay behind, like a trail.

  • position: true makes particles move with the mob. Use it for a glow that should stay wrapped around it.
  • rotation: true also turns them with the mob. It only works together with position: true.
  • velocity: true adds the mob's speed to each new particle, so sparks thrown by a running mob fly forward.
RP/particles/ruby_aura.json (inside components)
"minecraft:emitter_local_space": {
  "position": true,
  "rotation": true
}

Only for attached effects

Local space does nothing for effects played with /particle or a script at a spot in the world. It only matters when a mob or attachable plays the effect.

Rate

The rate decides how many particles appear and how fast. Pick one.

ComponentWhat it doesKey fields
minecraft:emitter_rate_instantSpawns a group of particles all at the same moment, like a burstnum_particles (default 10, per loop)
minecraft:emitter_rate_steadySpawns particles one after another, at an even pacespawn_rate: particles per second (default 1). max_particles: most alive at one time (default 50)
minecraft:emitter_rate_manualSpawns nothing by itself. The game spawns particles one by one when it needs themmax_particles (default 50)

Instant: a burst

Inside components
"minecraft:emitter_rate_instant": {
  "num_particles": 12
}

If the emitter loops, it bursts again at the start of each loop.

Steady: a stream

Inside components
"minecraft:emitter_rate_steady": {
  "spawn_rate": 20,
  "max_particles": 40
}

This makes 20 particles per second, but stops adding new ones while 40 are alive. max_particles is a safety limit: keep it low, because hundreds of particles can slow down weaker phones.

Manual: for events

emitter_rate_manual is used by built-in effects that the game spawns one particle at a time, like rain splashes. For your own effects, you will mostly use it for small effects that other effects spawn with an event of type particle (see events). For anything you play yourself, use instant or steady.

Lifetime

The lifetime decides how long the emitter keeps working. Pick one, then add lifetime events if you need them.

ComponentWhat it doesKey fields
minecraft:emitter_lifetime_onceRuns one time, then removes itselfactive_time: seconds it spawns for (default 10)
minecraft:emitter_lifetime_loopingRuns, pauses, runs again, until something removes itactive_time: seconds on (default 10). sleep_time: seconds off between loops (default 0)
minecraft:emitter_lifetime_expressionTurns on and off by Molang, checked every frameactivation_expression: spawns while this is not 0 (default 1). expiration_expression: removes the emitter once this is not 0 (default 0)
minecraft:emitter_lifetime_eventsFires your events at moments in the emitter's lifecreation_event, expiration_event, timeline, travel_distance_events, looping_travel_distance_events

Once

The best choice for a one-time effect from a command or script:

Inside components
"minecraft:emitter_lifetime_once": {
  "active_time": 1
}

With emitter_rate_instant, the burst happens at the start, so active_time can be short.

Looping

Inside components
"minecraft:emitter_lifetime_looping": {
  "active_time": 2,
  "sleep_time": 3
}

This sparkles for 2 seconds, rests for 3, and repeats. Use looping for effects attached to a mob or played from an animation controller, where the game removes the emitter for you when the mob or state goes away.

Expression

Great for effects that follow a mob and switch on and off by themselves:

Inside components
"minecraft:emitter_lifetime_expression": {
  "activation_expression": "query.ground_speed > 0.1",
  "expiration_expression": 0
}

This only sparkles while the mob is walking, and never removes itself. Queries like query.ground_speed read the mob the effect is attached to.

Events

emitter_lifetime_events points at names in the events block of the same file. Each field takes one event name or a list of names.

Inside components
"minecraft:emitter_lifetime_events": {
  "creation_event": "flash",
  "expiration_event": "pop",
  "timeline": {
    "0.5": "twinkle",
    "1.0": ["twinkle", "chime"]
  },
  "travel_distance_events": {
    "4.0": "dust"
  },
  "looping_travel_distance_events": [
    { "distance": 1.0, "effects": ["dust"] }
  ]
}
FieldFires
creation_eventWhen the emitter starts
expiration_eventWhen the emitter ends. It does not wait for its particles to disappear
timelineAt these times, in seconds. It runs again on every loop
travel_distance_eventsOnce, when the emitter has moved this many blocks in total
looping_travel_distance_eventsAgain and again, every time it moves this many blocks. Perfect for footprints or a trail behind a projectile

Shape

The shape decides where each particle starts and which way it points. That direction is what particle_initial_speed pushes it along. Pick one.

ComponentParticles startKey fields
minecraft:emitter_shape_pointAll at one pointoffset, direction
minecraft:emitter_shape_sphereInside a ball, or on its surfaceradius (default 1), offset, surface_only, direction
minecraft:emitter_shape_boxInside a box, or on its surfacehalf_dimensions, offset, surface_only, direction
minecraft:emitter_shape_discOn a flat circle, or on its edgeradius (default 1), plane_normal, offset, surface_only, direction
minecraft:emitter_shape_customWherever your Molang saysoffset, direction
minecraft:emitter_shape_entity_aabbInside the box around the mob it is attached tosurface_only, direction

Fields shared by the shapes

FieldWhat it does
offsetMoves the starting spot away from the emitter, as [x, y, z] in blocks. Worked out per particle, so Molang here can scatter them
directionWhich way new particles point. "outwards" (away from the centre, the default), "inwards" (towards it), or your own [x, y, z]
surface_onlytrue spawns only on the outside of the shape, not inside it. Default false

The point and custom shapes only take an [x, y, z] direction, because they have no centre to point away from.

Point

Inside components
"minecraft:emitter_shape_point": {
  "offset": [0, 0.5, 0],
  "direction": [0, 1, 0]
}

Every particle starts half a block above the emitter and points straight up.

Sphere

Inside components
"minecraft:emitter_shape_sphere": {
  "radius": 0.5,
  "surface_only": true,
  "direction": "outwards"
}

A hollow ball of sparkles that flies apart. Try "inwards" with a short lifetime for a "gathering power" effect.

Box

Inside components
"minecraft:emitter_shape_box": {
  "offset": [0, 0.5, 0],
  "half_dimensions": [0.5, 0.5, 0.5],
  "direction": [0, 1, 0]
}

half_dimensions is measured from the centre, so 0.5 on every side fills exactly one block. Good for an effect that covers a whole block, like a glowing ore.

Disc

Inside components
"minecraft:emitter_shape_disc": {
  "radius": 1.5,
  "plane_normal": "y",
  "surface_only": true,
  "direction": "outwards"
}

plane_normal is the axis the disc faces. "y" (the default) makes it lie flat like a rug, "x" and "z" stand it up like a wall. You can also give your own [x, y, z]. This example makes a ring on the ground that spreads outwards: a nice landing effect.

Custom

Inside components
"minecraft:emitter_shape_custom": {
  "offset": [
    "math.random(-0.1, 0.1)",
    "math.random(0, 2)",
    "math.random(-0.1, 0.1)"
  ],
  "direction": [0, 1, 0]
}

With a custom shape, you work out the spot yourself, as [x, y, z]. This places each particle at a random height up to 2 blocks, but keeps it close to the middle sideways: a thin pillar of sparkles, like a beam of light. Each value is worked out again for every particle.

Entity box

Inside components
"minecraft:emitter_shape_entity_aabb": {
  "surface_only": false,
  "direction": [0, 0.2, 0]
}

This uses the mob's own hitbox (its collision box), so the same effect fits a chicken and a ruby golem without changes. If the effect is not attached to a mob, the particles come out of the emitter's point instead.

A full emitter

Putting one of each group together. This aura loops while a mob is around and sticks to it:

RP/particles/ruby_aura.json (inside components)
"minecraft:emitter_local_space": {
  "position": true,
  "rotation": false
},
"minecraft:emitter_lifetime_looping": {
  "active_time": 1
},
"minecraft:emitter_rate_steady": {
  "spawn_rate": 8,
  "max_particles": 20
},
"minecraft:emitter_shape_entity_aabb": {
  "surface_only": true,
  "direction": [0, 1, 0]
}

Add the particle side (lifetime, look and motion) from Particle components and play it from a mob's animation, as shown in Your first particle.

We use cookies to improve your experience and analyse site traffic. Learn more